on master help sign in
Remove commented code (R structure).
590ca5aLennart Kolmodin
Data/Binary/Bits/Get.hs−85
@@ -43,8 +43,6 @@ import GHC.Word
43import GHC.Int
43import GHC.Int
44#endif
44#endif
45
45
46−data T a b = !a :*: !b deriving (Show)
47−
48data S = S !ByteString -- ^ Input
46data S = S !ByteString -- ^ Input
49 !Int -- ^ Bit offset (0-7)
47 !Int -- ^ Bit offset (0-7)
50 deriving (Show)
48 deriving (Show)
@@ -344,86 +342,3 @@ shiftr_w16 = shiftR
344shiftr_w32 = shiftR
342shiftr_w32 = shiftR
345shiftr_w64 = shiftR
343shiftr_w64 = shiftR
346#endif
344#endif
347−
348−{-
349−data R a where
350− RBool :: R Bool
351− RWord8 :: Int -> R Word8
352− RWord16be :: Int -> R Word16
353− RWord32be :: Int -> R Word32
354− RByteString :: Int -> R ByteString
355− RThis :: a -> R a
356− RNextTo :: R a -> R b -> R (T a b)
357− RMap :: R b -> (b -> R a) -> R a
358− RMapPure :: R a -> (a -> b) -> R b
359− RList :: Int -> R a -> R [a]
360− RCheck :: R a -> (a -> Bool) -> String -> R a
361−
362−instance Functor R where
363− fmap f m = RMapPure m f
364−
365−instance Show (R a) where
366− show r = case r of
367− RBool -> "Bool"
368−
369−size_in_bits :: forall a. R a -- ^ The record
370− -> Int -- ^ Number of bits
371−size_in_bits r = case r of
372− RBool -> 1
373− RWord8 n -> min n 8
374− RWord16be n -> min n 16
375− RWord32be n -> min n 16
376− RByteString n -> 8 * n
377− RThis _ -> 0
378− RList n r -> n * size_in_bits r
379− RMap r _ -> size_in_bits r
380− RMapPure r _ -> size_in_bits r
381− RCheck r _ _ -> size_in_bits r
382− RNextTo a b -> size_in_bits a + size_in_bits b
383−
384−size_in_bytes :: forall a. R a
385− -> Int
386−size_in_bytes r = byte_offset (size_in_bits r + 7)
387−
388−get :: R a -> Get a
389−get r = do
390− bs <- getByteString (size_in_bytes r)
391− a :*: s <- getR (S bs 0) r
392− return a
393−
394−getR :: S -> R a -> Get (T a S)
395−getR s0 r = do
396− case r of
397− RBool -> return (readBool s0)
398− RWord8 n -> return (readWord8 s0 n)
399− RWord16be n -> return (readWord16be s0 n)
400− RWord32be n -> return (readWord32be s0 n)
401− RByteString n -> return (readByteString s0 n)
402− RThis x -> return (x :*: s0)
403− RNextTo a b -> do
404− t :*: s <- getR s0 a
405− u :*: s' <- getR s b
406− return (t:*:u:*:s')
407− RMap r p -> do
408− a :*: s@(S bs o) <- getR s0 r
409− let codepath = p a
410− required_bytes = byte_offset (size_in_bits r - o)
411− bs' <- getByteString required_bytes
412− getR (S (bs `append` bs') o) codepath
413− RMapPure r f -> do
414− a :*: s <- getR s0 r
415− return (f a :*: s)
416− RList n r ->
417− let loop 0 s acc = return (List.reverse acc :*: s)
418− loop m s acc = do
419− a :*: s' <- getR s r
420− loop (m-1) s' (a:acc)
421− in loop n s0 []
422− RCheck r c m -> do
423− a :*: s <- getR s0 r
424− if c a
425− then return (a :*: s)
426− else fail m
427−-}
428−
429−