packages feed

cereal 0.5.3.0 → 0.5.4.0

raw patch · 4 files changed

+148/−50 lines, 4 filesdep +bytestring-builderdep ~bytestringPVP ok

version bump matches the API change (PVP)

Dependencies added: bytestring-builder

Dependency ranges changed: bytestring

API changes (from Hackage documentation)

+ Data.Serialize.Put: putInt16be :: Putter Int16
+ Data.Serialize.Put: putInt16host :: Putter Int16
+ Data.Serialize.Put: putInt16le :: Putter Int16
+ Data.Serialize.Put: putInt32be :: Putter Int32
+ Data.Serialize.Put: putInt32host :: Putter Int32
+ Data.Serialize.Put: putInt32le :: Putter Int32
+ Data.Serialize.Put: putInt64be :: Putter Int64
+ Data.Serialize.Put: putInt64host :: Putter Int64
+ Data.Serialize.Put: putInt64le :: Putter Int64
+ Data.Serialize.Put: putInt8 :: Putter Int8
+ Data.Serialize.Put: putInthost :: Putter Int

Files

cereal.cabal view
@@ -1,5 +1,5 @@ name:                   cereal-version:                0.5.3.0+version:                0.5.4.0 license:                BSD3 license-file:           LICENSE author:                 Lennart Kolmodin <kolmodin@dtek.chalmers.se>,@@ -25,16 +25,29 @@   type:     git   location: git://github.com/GaloisInc/cereal.git +flag bytestring-builder+  description:+    Decides whether to use an older version of bytestring along with bytestring-builder or just a newer version of bytestring.+    .+    This flag normally toggles automatically but you can use `-fbytestring-builder` or `-f-bytestring-builder` to explicitly change it.+  default: False+  manual: False+ library         default-language:       Haskell2010 -        build-depends:          bytestring >= 0.10.2.0,-                                base >= 4.4 && < 5, containers, array,+        build-depends:          base >= 4.4 && < 5, containers, array,                                 ghc-prim >= 0.2          if !impl(ghc >= 8.0)           build-depends:        fail == 4.9.* +        if flag(bytestring-builder)+          build-depends:        bytestring >= 0.9    && < 0.10.4,+                                bytestring-builder >= 0.10.4 && < 1+        else+          build-depends:        bytestring >= 0.10.4 && < 1+         hs-source-dirs:         src          exposed-modules:        Data.Serialize,@@ -52,7 +65,7 @@         type:                   exitcode-stdio-1.0          build-depends:          base == 4.*,-                                bytestring >= 0.10.8.1,+                                bytestring >= 0.9,                                 QuickCheck,                                 test-framework,                                 test-framework-quickcheck2,
src/Data/Serialize.hs view
@@ -16,7 +16,7 @@ -- Module      : Data.Serialize -- Copyright   : Lennart Kolmodin, Galois Inc. 2009 -- License     : BSD3-style (see LICENSE)--- +-- -- Maintainer  : Trevor Elliott <trevor@galois.com> -- Stability   : -- Portability :@@ -199,23 +199,23 @@  -- Int8s are written as a single byte. instance Serialize Int8 where-    put i   = put (fromIntegral i :: Word8)-    get     = liftM fromIntegral (get :: Get Word8)+    put     = putInt8+    get     = getInt8  -- Int16s are written as a 2 bytes in big endian format instance Serialize Int16 where-    put i   = put (fromIntegral i :: Word16)-    get     = liftM fromIntegral (get :: Get Word16)+    put     = putInt16be+    get     = getInt16be  -- Int32s are written as a 4 bytes in big endian format instance Serialize Int32 where-    put i   = put (fromIntegral i :: Word32)-    get     = liftM fromIntegral (get :: Get Word32)+    put     = putInt32be+    get     = getInt32be  -- Int64s are written as a 8 bytes in big endian format instance Serialize Int64 where-    put i   = put (fromIntegral i :: Word64)-    get     = liftM fromIntegral (get :: Get Word64)+    put     = putInt64be+    get     = getInt64be  ------------------------------------------------------------------------ @@ -230,7 +230,7 @@     get     = liftM fromIntegral (get :: Get Int64)  --------------------------------------------------------------------------- +-- -- Portable, and pretty efficient, serialisation of Integer -- @@ -312,7 +312,7 @@  ------------------------------------------------------------------------ --- Safely wrap `chr` to avoid exceptions. +-- Safely wrap `chr` to avoid exceptions. -- `chr` source: http://hackage.haskell.org/package/base-4.7.0.2/docs/src/GHC-Char.html#chr chrEither :: Int -> Either String Char chrEither i@@ -362,7 +362,7 @@                                 return (z .|. shiftL6 (y .|. shiftL6                                         (x .|. shiftL6 (xor 0xf0 w))))         case chrEither r of-            Right r' -> +            Right r' ->                 return $! r'             Left err ->                 fail err@@ -388,7 +388,7 @@     put (a,b,c,d,e)     = put a >> put b >> put c >> put d >> put e     get                 = liftM5 (,,,,) get get get get get --- +-- -- and now just recurse: -- 
src/Data/Serialize/Get.hs view
@@ -59,10 +59,7 @@     -- ** ByteStrings     , getByteString     , getLazyByteString--#if MIN_VERSION_bytestring(0,10,4)     , getShortByteString-#endif      -- ** Big-endian reads     , getWord16be@@ -116,6 +113,7 @@ import qualified Data.ByteString.Internal as B import qualified Data.ByteString.Unsafe   as B import qualified Data.ByteString.Lazy     as L+import qualified Data.ByteString.Short    as BS import qualified Data.IntMap              as IntMap import qualified Data.IntSet              as IntSet import qualified Data.Map                 as Map@@ -123,12 +121,6 @@ import qualified Data.Set                 as Set import qualified Data.Tree                as T --#if MIN_VERSION_bytestring(0,10,4)-import qualified Data.ByteString.Short as BS-#endif-- #if defined(__GLASGOW_HASKELL__) && !defined(__HADDOCK__) import GHC.Base import GHC.Word@@ -511,12 +503,10 @@ getLazyByteString n = f `fmap` getByteString (fromIntegral n)   where f bs = L.fromChunks [bs] -#if MIN_VERSION_bytestring(0,10,4) getShortByteString :: Int -> Get BS.ShortByteString getShortByteString n = do   bs <- getBytes n   return $! BS.toShort bs-#endif   ------------------------------------------------------------------------
src/Data/Serialize/Put.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE BangPatterns #-} {-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleInstances #-} @@ -14,7 +15,7 @@ -- Module      : Data.Serialize.Put -- Copyright   : Lennart Kolmodin, Galois Inc. 2009 -- License     : BSD3-style (see LICENSE)--- +-- -- Maintainer  : Trevor Elliott <trevor@galois.com> -- Stability   : -- Portability :@@ -41,28 +42,36 @@      -- * Primitives     , putWord8+    , putInt8     , putByteString     , putLazyByteString--#if MIN_VERSION_bytestring(0,10,4)     , putShortByteString-#endif      -- * Big-endian primitives     , putWord16be     , putWord32be     , putWord64be+    , putInt16be+    , putInt32be+    , putInt64be      -- * Little-endian primitives     , putWord16le     , putWord32le     , putWord64le+    , putInt16le+    , putInt32le+    , putInt64le      -- * Host-endian, unaligned writes     , putWordhost     , putWord16host     , putWord32host     , putWord64host+    , putInthost+    , putInt16host+    , putInt32host+    , putInt64host      -- * Containers     , putTwoOf@@ -81,27 +90,17 @@   ) where  -#if MIN_VERSION_bytestring(0,10,2) import           Data.ByteString.Builder (Builder, toLazyByteString) import qualified Data.ByteString.Builder as B import qualified Data.ByteString.Builder.Extra as B-#elif MIN_VERSION_bytestring(0,10,0)-import           Data.ByteString.Lazy.Builder (Builder, toLazyByteString)-import qualified Data.ByteString.Lazy.Builder as B-import qualified Data.ByteString.Lazy.Builder.Extras as B-#else-#error "cereal requires bytestring >= 0.10.0.0"-#endif--#if MIN_VERSION_bytestring(0,10,4) import qualified Data.ByteString.Short as BS-#endif  import qualified Control.Applicative as A import Data.Array.Unboxed import qualified Data.Monoid as M import qualified Data.Foldable as F import Data.Word+import Data.Int import qualified Data.ByteString        as S import qualified Data.ByteString.Lazy   as L import qualified Data.IntMap            as IntMap@@ -117,9 +116,17 @@ import Data.Monoid #endif +#if !(MIN_VERSION_bytestring(0,10,0))+import Foreign.ForeignPtr (withForeignPtr)+import Foreign.Marshal.Utils (copyBytes)+import Foreign.Ptr (plusPtr)+import qualified Data.ByteString.Internal as S+import qualified Data.ByteString.Lazy.Internal as L+#endif+ ------------------------------------------------------------------------ --- XXX Strict in builder only. +-- XXX Strict in builder only. data PairS a = PairS a !Builder  sndS :: PairS a -> Builder@@ -190,12 +197,12 @@  -- | Run the 'Put' monad with a serialiser runPut :: Put -> S.ByteString-runPut = L.toStrict . runPutLazy+runPut = lazyToStrictByteString . runPutLazy {-# INLINE runPut #-}  -- | Run the 'Put' monad with a serialiser and get its result runPutM :: PutM a -> (a, S.ByteString)-runPutM (Put (PairS f s)) = (f, L.toStrict (toLazyByteString s))+runPutM (Put (PairS f s)) = (f, lazyToStrictByteString (toLazyByteString s)) {-# INLINE runPutM #-}  -- | Run the 'Put' monad with a serialiser@@ -221,16 +228,19 @@ putWord8            = tell . B.word8 {-# INLINE putWord8 #-} +-- | Efficiently write an int into the output buffer+putInt8             :: Putter Int8+putInt8             = tell . B.int8+{-# INLINE putInt8 #-}+ -- | An efficient primitive to write a strict ByteString into the output buffer. -- It flushes the current buffer, and writes the argument into a new chunk. putByteString       :: Putter S.ByteString putByteString       = tell . B.byteString {-# INLINE putByteString #-} -#if MIN_VERSION_bytestring(0,10,4) putShortByteString  :: Putter BS.ShortByteString putShortByteString   = tell . B.shortByteString-#endif  -- | Write a lazy ByteString efficiently, simply appending the lazy -- ByteString chunks to the output buffer@@ -299,7 +309,68 @@ putWord64host       = tell . B.word64Host {-# INLINE putWord64host #-} +-- | Write a Int16 in big endian format+putInt16be         :: Putter Int16+putInt16be         = tell . B.int16BE+{-# INLINE putInt16be #-} +-- | Write a Int16 in little endian format+putInt16le         :: Putter Int16+putInt16le         = tell . B.int16LE+{-# INLINE putInt16le #-}++-- | Write a Int32 in big endian format+putInt32be         :: Putter Int32+putInt32be         = tell . B.int32BE+{-# INLINE putInt32be #-}++-- | Write a Int32 in little endian format+putInt32le         :: Putter Int32+putInt32le         = tell . B.int32LE+{-# INLINE putInt32le #-}++-- | Write a Int64 in big endian format+putInt64be         :: Putter Int64+putInt64be         = tell . B.int64BE+{-# INLINE putInt64be #-}++-- | Write a Int64 in little endian format+putInt64le         :: Putter Int64+putInt64le         = tell . B.int64LE+{-# INLINE putInt64le #-}++------------------------------------------------------------------------++-- | /O(1)./ Write a single native machine int. The int is+-- written in host order, host endian form, for the machine you're on.+-- On a 64 bit machine the Int is an 8 byte value, on a 32 bit machine,+-- 4 bytes. Values written this way are not portable to+-- different endian or int sized machines, without conversion.+--+putInthost         :: Putter Int+putInthost         = tell . B.intHost+{-# INLINE putInthost #-}++-- | /O(1)./ Write a Int16 in native host order and host endianness.+-- For portability issues see @putInthost@.+putInt16host       :: Putter Int16+putInt16host       = tell . B.int16Host+{-# INLINE putInt16host #-}++-- | /O(1)./ Write a Int32 in native host order and host endianness.+-- For portability issues see @putInthost@.+putInt32host       :: Putter Int32+putInt32host       = tell . B.int32Host+{-# INLINE putInt32host #-}++-- | /O(1)./ Write a Int64 in native host order+-- On a 32 bit machine we write two host order Int32s, in big endian form.+-- For portability issues see @putInthost@.+putInt64host       :: Putter Int64+putInt64host       = tell . B.int64Host+{-# INLINE putInt64host #-}++ -- Containers ------------------------------------------------------------------  encodeListOf :: (a -> Builder) -> [a] -> Builder@@ -326,12 +397,12 @@  putSeqOf :: Putter a -> Putter (Seq.Seq a) putSeqOf pa = \s -> do-    putWord64be (fromIntegral $ Seq.length s) +    putWord64be (fromIntegral $ Seq.length s)     F.mapM_ pa s {-# INLINE putSeqOf #-}  putTreeOf :: Putter a -> Putter (T.Tree a)-putTreeOf pa = +putTreeOf pa =     tell . go   where     go (T.Node x cs) = execPut (pa x) `M.mappend` encodeListOf go cs@@ -370,3 +441,27 @@     let bs = runPut putVal     putLen (S.length bs)     putByteString bs++-------------------------------------------------------------------------------+-- pre-bytestring-0.10 compatibility+-------------------------------------------------------------------------------++{-# INLINE lazyToStrictByteString #-}+lazyToStrictByteString :: L.ByteString -> S.ByteString+#if MIN_VERSION_bytestring(0,10,0)+lazyToStrictByteString = L.toStrict+#else+lazyToStrictByteString = packChunks++-- packChunks is taken from the blaze-builder package.++-- | Pack the chunks of a lazy bytestring into a single strict bytestring.+packChunks :: L.ByteString -> S.ByteString+packChunks lbs = S.unsafeCreate (fromIntegral $ L.length lbs) (copyChunks lbs)+  where+    copyChunks !L.Empty                         !_pf = return ()+    copyChunks !(L.Chunk (S.PS fpbuf o l) lbs') !pf  = do+        withForeignPtr fpbuf $ \pbuf ->+            copyBytes pf (pbuf `plusPtr` o) l+        copyChunks lbs' (pf `plusPtr` l)+#endif