on master help sign in
Implement naive way to putByteString
52aa5f1Lennart Kolmodin
Data/Binary/Bits/Put.hs+10
@@ -8,6 +8,7 @@ module Data.Binary.Bits.Put
8 , putWord16be
8 , putWord16be
9 , putWord32be
9 , putWord32be
10 , putWord64be
10 , putWord64be
11+ , putByteString
11 )
12 )
12 where
13 where
13
14
@@ -84,6 +85,15 @@ putWord64be n w
84 putWord64be (n-32) (w`shiftR`32)
85 putWord64be (n-32) (w`shiftR`32)
85 putWord64be 32 (w .&. 0xffffffff)
86 putWord64be 32 (w .&. 0xffffffff)
86
87
88+putByteString :: ByteString -> BitPut ()
89+putByteString bs = do
90+ offset <- hasOffset
91+ if offset
92+ then mapM_ (putWord8 8) (unpack bs) -- naive
93+ else joinPut (Put.putByteString bs)
94+ where
95+ hasOffset = BitPut $ \ s@(S _ _ o) -> PairS (o /= 0) s
96+
87joinPut :: Put -> BitPut ()
97joinPut :: Put -> BitPut ()
88joinPut m = BitPut $ \s0 -> PairS () $
98joinPut m = BitPut $ \s0 -> PairS () $
89 let (S b0 _ _) = flushIncomplete s0
99 let (S b0 _ _) = flushIncomplete s0