hw-prim 0.6.2.19 → 0.6.2.20
raw patch · 3 files changed
+27/−4 lines, 3 filesPVP: minor bump suggested
API additions: PVP suggests at least a minor version bump
API changes (from Hackage documentation)
+ HaskellWorks.Data.ByteString: mmap :: FilePath -> IO ByteString
+ HaskellWorks.Data.Vector.Storable: mmap :: Storable a => FilePath -> IO (Vector a)
Files
- hw-prim.cabal +1/−1
- src/HaskellWorks/Data/ByteString.hs +14/−3
- src/HaskellWorks/Data/Vector/Storable.hs +12/−0
hw-prim.cabal view
@@ -3,7 +3,7 @@ -- see: https://github.com/sol/hpack name: hw-prim-version: 0.6.2.19+version: 0.6.2.20 synopsis: Primitive functions and data types description: Primitive functions and data types. category: Data
src/HaskellWorks/Data/ByteString.hs view
@@ -1,10 +1,13 @@-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE MultiWayIf #-}+{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiWayIf #-}+{-# LANGUAGE ScopedTypeVariables #-} module HaskellWorks.Data.ByteString ( chunkedBy , ToByteString(..) , ToByteStrings(..)+ , mmap , rechunk , rechunkPadded , resegment@@ -13,8 +16,9 @@ ) where import Control.Monad.ST-import Data.Semigroup ((<>))+import Data.Semigroup ((<>)) import Data.Word+import Foreign.ForeignPtr import qualified Control.Monad.ST.Unsafe as ST import qualified Data.ByteString as BS@@ -24,6 +28,7 @@ import qualified Data.Vector.Storable as DVS import qualified Data.Vector.Storable.Mutable as DVSM import qualified System.IO as IO+import qualified System.IO.MMap as IO import qualified System.IO.Unsafe as IO class ToByteString a where@@ -208,3 +213,9 @@ if BS.null c then IO.hClose h >> return [] else (c:) <$> lazyRead++mmap :: FilePath -> IO BS.ByteString+mmap filepath = do+ (fptr :: ForeignPtr Word8, offset, size) <- IO.mmapFileForeignPtr filepath IO.ReadOnly Nothing+ let !bs = BSI.fromForeignPtr (castForeignPtr fptr) offset size+ return bs
src/HaskellWorks/Data/Vector/Storable.hs view
@@ -1,19 +1,23 @@+{-# LANGUAGE BangPatterns #-} {-# LANGUAGE ScopedTypeVariables #-} module HaskellWorks.Data.Vector.Storable ( padded , foldMap , mapAccumL+ , mmap ) where import Control.Monad.ST (ST) import Data.Monoid (Monoid (..), (<>)) import Data.Vector.Storable (Storable) import Data.Word+import Foreign.ForeignPtr import Prelude hiding (foldMap) import qualified Data.Vector.Storable as DVS import qualified Data.Vector.Storable.Mutable as DVSM+import qualified System.IO.MMap as IO {-# ANN module ("HLint: ignore Redundant do" :: String) #-} @@ -42,3 +46,11 @@ go (i + 1) a1 vc else return a0 {-# INLINE mapAccumL #-}++-- | MMap the file as a storable vector. If the size of the file is not a multiple of the element size+-- in bytes, then the last few bytes of the file will not be included in the vector.+mmap :: Storable a => FilePath -> IO (DVS.Vector a)+mmap filepath = do+ (fptr :: ForeignPtr Word8, offset, size) <- IO.mmapFileForeignPtr filepath IO.ReadOnly Nothing+ let !v = DVS.unsafeFromForeignPtr fptr offset size+ return (DVS.unsafeCast v)