summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Crayne <joe@jerkface.net>2018-10-23 23:05:55 -0400
committerJoe Crayne <joe@jerkface.net>2018-10-23 23:05:55 -0400
commit87c1aaeb9f38e65f99e70f6fe8ff37a8dfb0bbad (patch)
treef3c2c3ec86fa01233b0fb0b3fcda9c0b20a17323
parent59af31ffa1f8c67aeb6f153c627c4edad4ceacd0 (diff)
implemented setFlush and avail_input
-rw-r--r--haskell/Data/XDelta.hsc22
1 files changed, 15 insertions, 7 deletions
diff --git a/haskell/Data/XDelta.hsc b/haskell/Data/XDelta.hsc
index d276a8d..03785c0 100644
--- a/haskell/Data/XDelta.hsc
+++ b/haskell/Data/XDelta.hsc
@@ -12,6 +12,7 @@ import Control.Monad.Primitive
12import Control.Monad.ST 12import Control.Monad.ST
13import Control.Monad.ST.Unsafe 13import Control.Monad.ST.Unsafe
14import Data.BA 14import Data.BA
15import Data.Bits
15import qualified Data.ByteString as B 16import qualified Data.ByteString as B
16import qualified Data.ByteString.Unsafe as B 17import qualified Data.ByteString.Unsafe as B
17import qualified Data.ByteString.Internal as B 18import qualified Data.ByteString.Internal as B
@@ -185,21 +186,28 @@ data XDeltaMethods m u = XDeltaMethods
185 , xInterleave :: forall a. m a -> m a 186 , xInterleave :: forall a. m a -> m a
186 } 187 }
187 188
188-- | Checks for legal flag changes. 189-- -- | Checks for legal flag changes.
189foreign import ccall "xdelta3.h xd3_set_flags" xd3_set_flags :: Ptr Xd3Stream -> Flags -> IO () 190-- foreign import ccall "xdelta3.h xd3_set_flags" xd3_set_flags :: Ptr Xd3Stream -> Flags -> IO ()
191
192setFlag :: PrimMonad m => Flags -> Stream m -> Bool -> m ()
193setFlag b stream wantFlush = do
194 f <- readAtByte (streamArray stream) #{offset xd3_stream, flags}
195 writeAtByte (streamArray stream) #{offset xd3_stream, flags}
196 . (coerce :: Flags -> Word32)
197 $ if wantFlush then Flags f .|. b
198 else Flags f .&. complement b
190 199
191setFlush :: PrimMonad m => Stream m -> Bool -> m () 200setFlush :: PrimMonad m => Stream m -> Bool -> m ()
192setFlush stream wantFlush = return () -- todo 201setFlush = setFlag XD3_FLUSH
193 202
194setSkipWindow :: PrimMonad m => Stream m -> Bool -> m () 203setSkipWindow :: PrimMonad m => Stream m -> Bool -> m ()
195setSkipWindow stream wantSkipWin = return () -- todo 204setSkipWindow = setFlag XD3_SKIP_WINDOW
196 205
197foreign import ccall "xdelta3.h xd3_avail_input" xd3_avail_input :: Ptr Xd3Stream -> Ptr a -> Usize_t -> IO () 206foreign import ccall "xdelta3.h xd3_avail_input" xd3_avail_input :: Ptr Xd3Stream -> Ptr a -> Usize_t -> IO ()
198 207
208avail_input :: PrimMonad m => Stream m -> Ptr a -> Usize_t -> m ()
199avail_input stream p sz = 209avail_input stream p sz =
200 -- withForeignPtr fp (\stream -> xd3_avail_input stream p sz) 210 unsafeIOToPrim $ xd3_avail_input (ptr $ mutableByteArrayContents $ streamArray stream) p sz
201 -- TODO
202 return ()
203 211
204-- | This acknowledges receipt of output data, must be called after any 212-- | This acknowledges receipt of output data, must be called after any
205-- XD3_OUTPUT return. 213-- XD3_OUTPUT return.