diff options
author | Joe Crayne <joe@jerkface.net> | 2018-10-23 23:05:55 -0400 |
---|---|---|
committer | Joe Crayne <joe@jerkface.net> | 2018-10-23 23:05:55 -0400 |
commit | 87c1aaeb9f38e65f99e70f6fe8ff37a8dfb0bbad (patch) | |
tree | f3c2c3ec86fa01233b0fb0b3fcda9c0b20a17323 | |
parent | 59af31ffa1f8c67aeb6f153c627c4edad4ceacd0 (diff) |
implemented setFlush and avail_input
-rw-r--r-- | haskell/Data/XDelta.hsc | 22 |
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 | |||
12 | import Control.Monad.ST | 12 | import Control.Monad.ST |
13 | import Control.Monad.ST.Unsafe | 13 | import Control.Monad.ST.Unsafe |
14 | import Data.BA | 14 | import Data.BA |
15 | import Data.Bits | ||
15 | import qualified Data.ByteString as B | 16 | import qualified Data.ByteString as B |
16 | import qualified Data.ByteString.Unsafe as B | 17 | import qualified Data.ByteString.Unsafe as B |
17 | import qualified Data.ByteString.Internal as B | 18 | import 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. |
189 | foreign 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 | |||
192 | setFlag :: PrimMonad m => Flags -> Stream m -> Bool -> m () | ||
193 | setFlag 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 | ||
191 | setFlush :: PrimMonad m => Stream m -> Bool -> m () | 200 | setFlush :: PrimMonad m => Stream m -> Bool -> m () |
192 | setFlush stream wantFlush = return () -- todo | 201 | setFlush = setFlag XD3_FLUSH |
193 | 202 | ||
194 | setSkipWindow :: PrimMonad m => Stream m -> Bool -> m () | 203 | setSkipWindow :: PrimMonad m => Stream m -> Bool -> m () |
195 | setSkipWindow stream wantSkipWin = return () -- todo | 204 | setSkipWindow = setFlag XD3_SKIP_WINDOW |
196 | 205 | ||
197 | foreign import ccall "xdelta3.h xd3_avail_input" xd3_avail_input :: Ptr Xd3Stream -> Ptr a -> Usize_t -> IO () | 206 | foreign import ccall "xdelta3.h xd3_avail_input" xd3_avail_input :: Ptr Xd3Stream -> Ptr a -> Usize_t -> IO () |
198 | 207 | ||
208 | avail_input :: PrimMonad m => Stream m -> Ptr a -> Usize_t -> m () | ||
199 | avail_input stream p sz = | 209 | avail_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. |