on master help sign in
Add withBitOrder
99f47eeSylvain HENRY
Data/Binary/Bits/Get.hs+18
@@ -58,6 +58,7 @@ module Data.Binary.Bits.Get
58 , BitOrder(..)
58 , BitOrder(..)
59 , runBitGet
59 , runBitGet
60 , selectBitOrder
60 , selectBitOrder
61+ , withBitOrder
61
62
62 -- ** Get bytes
63 -- ** Get bytes
63 , getBool
64 , getBool
@@ -358,6 +359,13 @@ withState f = do
358 s <- getState
359 s <- getState
359 putState $! f s
360 putState $! f s
360
361
362+-- | Get the bit ordering
363+getBitOrder :: BitGet BitOrder
364+getBitOrder = do
365+ (S _ _ bo) <- getState
366+ return bo
367+
368+
361-- | Make sure there are at least @n@ bits.
369-- | Make sure there are at least @n@ bits.
362ensureBits :: Int -> BitGet ()
370ensureBits :: Int -> BitGet ()
363ensureBits n = do
371ensureBits n = do
@@ -388,6 +396,16 @@ alignByte = do
388selectBitOrder :: BitOrder -> BitGet ()
396selectBitOrder :: BitOrder -> BitGet ()
389selectBitOrder = withState . selectBitOrderS
397selectBitOrder = withState . selectBitOrderS
390
398
399+withBitOrder :: BitOrder -> BitGet a -> BitGet a
400+withBitOrder bo f = do
401+ bo' <- getBitOrder
402+ selectBitOrder bo
403+ r <- f
404+ selectBitOrder bo'
405+ return r
406+
407+
408+
391-- | Test whether all input has been consumed, i.e. there are no remaining
409-- | Test whether all input has been consumed, i.e. there are no remaining
392-- undecoded bytes.
410-- undecoded bytes.
393isEmpty :: BitGet Bool
411isEmpty :: BitGet Bool