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 +8/−0
- Data/Vector/Serial.hs +0/−94
- LICENSE +1/−1
- Setup.hs +2/−0
- lib/Data/Vector/Serial.hs +94/−0
- vector-bytes-instances.cabal +10/−6
+ 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