packages feed

vector-bytes-instances 0.1 → 0.1.1

raw patch · 6 files changed

+115/−101 lines, 6 filesdep ~basedep ~bytesdep ~vectorsetup-changed

Dependency ranges changed: base, bytes, vector

Files

+ CHANGELOG.md view
@@ -0,0 +1,8 @@+# Version 0.1.1++* Remove upper dependency bounds.+++# Version 0.1++* Initial release.
− Data/Vector/Serial.hs
@@ -1,94 +0,0 @@-{-# OPTIONS_GHC -fno-warn-orphans #-}--module Data.Vector.Serial-  ( genericDeserializeVector-  , genericDeserializeVectorWith-  , genericSerializeVector-  , genericSerializeVectorWith-  ) where--import Data.Bytes.Serial as Bytes-import Data.Bytes.Get as Bytes-import Data.Bytes.Put as Bytes-import qualified Data.Vector.Generic as G-import qualified Data.Vector.Generic.Mutable as GM-import qualified Data.Vector.Unboxed as U-import qualified Data.Vector.Storable as S-import qualified Data.Vector.Primitive as P-import Data.Vector (Vector)-import Foreign.Storable (Storable)-import System.IO.Unsafe-------------------------------------------------------------------------------------- | Orphan in "Data.Vector.Serial". Boxed, generic vectors.-instance Bytes.Serial a => Bytes.Serial (Vector a) where-    serialize = genericSerializeVector-    deserialize = genericDeserializeVector-    {-# INLINE deserialize #-}---- | Orphan in "Data.Vector.Serial". Unboxed vectors-instance (U.Unbox a, Bytes.Serial a) => Bytes.Serial (U.Vector a) where-    serialize = genericSerializeVector-    deserialize = genericDeserializeVector-    {-# INLINE deserialize #-}---- | Orphan in "Data.Vector.Serial". Primitive vectors-instance (P.Prim a, Bytes.Serial a) => Bytes.Serial (P.Vector a) where-    serialize = genericSerializeVector-    deserialize = genericDeserializeVector-    {-# INLINE deserialize #-}---- | Orphan in "Data.Vector.Serial". Storable vectors-instance (Storable a, Bytes.Serial a) => Bytes.Serial (S.Vector a) where-    serialize = genericSerializeVector-    deserialize = genericDeserializeVector-    {-# INLINE deserialize #-}------------------------------------------------------------------------------ | Deserialize vector using custom parsers.-genericDeserializeVectorWith-    :: (G.Vector v a, Bytes.Serial a, Bytes.MonadGet m)-    => m Int       -- ^ Parser for vector size-    -> m a         -- ^ Parser for vector's element-    -> m (v a)-{-# INLINE genericDeserializeVectorWith #-}-genericDeserializeVectorWith deserializeN deserializeA = do-    n <- deserializeN-    v <- return $ unsafePerformIO $ GM.unsafeNew n-    let go 0 = return ()-        go i = do x <- deserializeA-                  () <- return $ unsafePerformIO $ GM.unsafeWrite v (n-i) x-                  go (i-1)-    () <- go n-    return $ unsafePerformIO $ G.unsafeFreeze v---- | Generic serialize for anything in the 'G.Vector' class which uses custom---   encoders.-genericSerializeVectorWith-    :: (G.Vector v a, Bytes.Serial a, Bytes.MonadPut m)-    => (Int -> m ())  -- ^ Encoder for vector size-    -> (a   -> m ())  -- ^ Encoder for vector's element-    -> v a-    -> m ()-{-# INLINE genericSerializeVectorWith #-}-genericSerializeVectorWith serializeN serializeA v = do-    serializeN (G.length v)-    G.mapM_ serializeA v---- | Generic function for vector deserialization.-genericDeserializeVector-    :: (G.Vector v a, Bytes.Serial a, Bytes.MonadGet m)-    => m (v a)-{-# INLINE genericDeserializeVector #-}-genericDeserializeVector = genericDeserializeVectorWith deserialize deserialize---- | Generic serialize for anything in the 'G.Vector' class.-genericSerializeVector-    :: (G.Vector v a, Bytes.Serial a, Bytes.MonadPut m)-    => v a-    -> m ()-{-# INLINE genericSerializeVector #-}-genericSerializeVector = genericSerializeVectorWith serialize serialize-
LICENSE view
@@ -1,4 +1,4 @@-Copyright Renzo Carbonara (c) 2016+Copyright Renzo Carbonara (c) 2016-2018  All rights reserved. 
Setup.hs view
@@ -1,2 +1,4 @@+#! /usr/bin/env nix-shell+#! nix-shell ./shell.nix -i runghc import Distribution.Simple main = defaultMain
+ lib/Data/Vector/Serial.hs view
@@ -0,0 +1,94 @@+{-# OPTIONS_GHC -fno-warn-orphans #-}++module Data.Vector.Serial+  ( genericDeserializeVector+  , genericDeserializeVectorWith+  , genericSerializeVector+  , genericSerializeVectorWith+  ) where++import Data.Bytes.Serial as Bytes+import Data.Bytes.Get as Bytes+import Data.Bytes.Put as Bytes+import qualified Data.Vector.Generic as G+import qualified Data.Vector.Generic.Mutable as GM+import qualified Data.Vector.Unboxed as U+import qualified Data.Vector.Storable as S+import qualified Data.Vector.Primitive as P+import Data.Vector (Vector)+import Foreign.Storable (Storable)+import System.IO.Unsafe++--------------------------------------------------------------------------------++-- | Orphan in "Data.Vector.Serial". Boxed, generic vectors.+instance Bytes.Serial a => Bytes.Serial (Vector a) where+    serialize = genericSerializeVector+    deserialize = genericDeserializeVector+    {-# INLINE deserialize #-}++-- | Orphan in "Data.Vector.Serial". Unboxed vectors+instance (U.Unbox a, Bytes.Serial a) => Bytes.Serial (U.Vector a) where+    serialize = genericSerializeVector+    deserialize = genericDeserializeVector+    {-# INLINE deserialize #-}++-- | Orphan in "Data.Vector.Serial". Primitive vectors+instance (P.Prim a, Bytes.Serial a) => Bytes.Serial (P.Vector a) where+    serialize = genericSerializeVector+    deserialize = genericDeserializeVector+    {-# INLINE deserialize #-}++-- | Orphan in "Data.Vector.Serial". Storable vectors+instance (Storable a, Bytes.Serial a) => Bytes.Serial (S.Vector a) where+    serialize = genericSerializeVector+    deserialize = genericDeserializeVector+    {-# INLINE deserialize #-}++------------------------------------------------------------------------++-- | Deserialize vector using custom parsers.+genericDeserializeVectorWith+    :: (G.Vector v a, Bytes.Serial a, Bytes.MonadGet m)+    => m Int       -- ^ Parser for vector size+    -> m a         -- ^ Parser for vector's element+    -> m (v a)+{-# INLINE genericDeserializeVectorWith #-}+genericDeserializeVectorWith deserializeN deserializeA = do+    n <- deserializeN+    v <- return $ unsafePerformIO $ GM.unsafeNew n+    let go 0 = return ()+        go i = do x <- deserializeA+                  () <- return $ unsafePerformIO $ GM.unsafeWrite v (n-i) x+                  go (i-1)+    () <- go n+    return $ unsafePerformIO $ G.unsafeFreeze v++-- | Generic serialize for anything in the 'G.Vector' class which uses custom+--   encoders.+genericSerializeVectorWith+    :: (G.Vector v a, Bytes.Serial a, Bytes.MonadPut m)+    => (Int -> m ())  -- ^ Encoder for vector size+    -> (a   -> m ())  -- ^ Encoder for vector's element+    -> v a+    -> m ()+{-# INLINE genericSerializeVectorWith #-}+genericSerializeVectorWith serializeN serializeA v = do+    serializeN (G.length v)+    G.mapM_ serializeA v++-- | Generic function for vector deserialization.+genericDeserializeVector+    :: (G.Vector v a, Bytes.Serial a, Bytes.MonadGet m)+    => m (v a)+{-# INLINE genericDeserializeVector #-}+genericDeserializeVector = genericDeserializeVectorWith deserialize deserialize++-- | Generic serialize for anything in the 'G.Vector' class.+genericSerializeVector+    :: (G.Vector v a, Bytes.Serial a, Bytes.MonadPut m)+    => v a+    -> m ()+{-# INLINE genericSerializeVector #-}+genericSerializeVector = genericSerializeVectorWith serialize serialize+
vector-bytes-instances.cabal view
@@ -1,5 +1,5 @@ name: vector-bytes-instances-version: 0.1+version: 0.1.1 synopsis: Serial (from the bytes package) for Vector (from the vector package) description:   Serial (from the bytes package) for Vector (from the vector package)@@ -10,8 +10,10 @@ bug-reports: https://github.com/k0001/vector-bytes-instances/issues license: BSD3 license-file: LICENSE+extra-source-files: CHANGELOG.md author: Renzo Carbonara-maintainer: renzocarbonara¡gmail!com+copyright: Renzo Carbonara 2017-2018+maintainer: ren¡ren!zone stability: Experimental category: Data build-type: Simple@@ -19,15 +21,17 @@  library   ghc-options: -Wall -O2+  hs-source-dirs: lib   exposed-modules: Data.Vector.Serial   build-depends:-    base > 3 && < 4.10,-    vector >= 0.6 && < 0.12,-    bytes >= 0.13 && < 0.16+    base > 3 && < 5,+    vector >= 0.6,+    bytes >= 0.13  test-suite tests   type: exitcode-stdio-1.0-  main-is: test/Main.hs+  hs-source-dirs: test+  main-is: Main.hs   build-depends:       base     , vector-bytes-instances