packages feed

binary-strict 0.2.3 → 0.2.4

raw patch · 4 files changed

+45/−3 lines, 4 files

Files

binary-strict.cabal view
@@ -1,5 +1,5 @@ name:            binary-strict-version:         0.2.3+version:         0.2.4 license:         BSD3 license-file:    LICENSE author:          Lennart Kolmodin <kolmodin@dtek.chalmers.se>@@ -17,9 +17,10 @@ tested-with:     GHC == 6.8.2 exposed-modules: Data.Binary.Strict.Get,                  Data.Binary.Strict.IncrementalGet,-                 Data.Binary.Strict.BitGet+                 Data.Binary.Strict.BitGet,+                 Data.Binary.Strict.Util extensions:      CPP, FlexibleContexts hs-source-dirs:  src extra-source-files: tests/BitGetTest.hs, src/Data/Binary/Strict/Common.h-ghc-options:     -Wall+ghc-options:     -Wall -fno-warn-name-shadowing build-type:      Simple
src/Data/Binary/Strict/BitGet.hs view
@@ -69,8 +69,10 @@ import GHC.Word #endif +#ifndef __HADDOCK__ data S = S {-# UNPACK #-} !B.ByteString  -- ^ input            {-# UNPACK #-} !Word8  -- ^ bit offset in current byte+#endif  newtype BitGet a = BitGet { unGet :: S -> (Either String a, S) } 
src/Data/Binary/Strict/Get.hs view
@@ -93,8 +93,10 @@ #endif  -- | The parse state+#ifndef __HADDOCK__ data S = S {-# UNPACK #-} !B.ByteString  -- input            {-# UNPACK #-} !Int  -- bytes read+#endif  newtype Get a = Get { unGet :: S -> (Either String a, S) } 
+ src/Data/Binary/Strict/Util.hs view
@@ -0,0 +1,37 @@+module Data.Binary.Strict.Util+  ( hexDumpString+  , hexDump+  ) where++import Data.List (intersperse)++import qualified Data.ByteString as B+import qualified Data.ByteString.Char8 as BC+import Data.ByteString.Internal (w2c)+import qualified Data.ByteString.Lazy.Char8 as BLC++import Text.Printf (printf)++-- | Convert a strict ByteString to a lazy Char8 ByteString, where the format+--   is the same as running hexdump -C on it.+hexDumpString :: B.ByteString -> BLC.ByteString+hexDumpString = BLC.fromChunks . dumpLine (0 :: Int) where+  dumpLine offset bs+    | B.null bs = []+    | otherwise = line : (dumpLine (offset + 16) $ B.drop 16 bs) where+        line = s $ a ++ b ++ "  " ++ c ++ padding ++ right ++ newline+        s = BC.pack+        a = printf "%08x  " offset+        b = concat $ intersperse " " $ map (printf "%02x") $ B.unpack $ B.take 8 bs+        c = concat $ intersperse " " $ map (printf "%02x") $ B.unpack $ B.take 8 $ B.drop 8 bs+        padding = replicate paddingSize ' '+        paddingSize = 2 + (16 - (min 16 $ B.length bs)) * 3 - if B.length bs <= 8 then 1 else 0+        right = map safeChar $ B.unpack $ B.take 16 bs+        newline = "\n"+        safeChar c+          | c >= 32 && c <= 126 = w2c c+          | otherwise = '.'++-- | Performs the same operation as hexDumpString, but also writes it to stdout+hexDump :: B.ByteString -> IO ()+hexDump = BLC.putStr . hexDumpString