PrimitiveArray 0.2.1.1 → 0.2.2.0
raw patch · 3 files changed
+80/−3 lines, 3 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Data.PrimitiveArray.Unboxed.VectorZero: Arr0 :: !sh -> !Vector elm -> Arr0 sh elm
+ Data.PrimitiveArray.Unboxed.VectorZero: MArr0 :: !sh -> !MVector s elm -> MArr0 s sh elm
+ Data.PrimitiveArray.Unboxed.VectorZero: data Arr0 sh elm
+ Data.PrimitiveArray.Unboxed.VectorZero: data MArr0 s sh elm
+ Data.PrimitiveArray.Unboxed.VectorZero: instance (Shape sh, ExtShape sh, Unbox elm) => MPrimArrayOps MArr0 sh elm
+ Data.PrimitiveArray.Unboxed.VectorZero: instance (Shape sh, ExtShape sh, Unbox elm) => PrimArrayOps Arr0 sh elm
Files
- Data/PrimitiveArray.hs +1/−1
- Data/PrimitiveArray/Unboxed/VectorZero.hs +71/−0
- PrimitiveArray.cabal +8/−2
Data/PrimitiveArray.hs view
@@ -151,7 +151,7 @@ -- | Determines if an index is valid for a given immutable array. inBounds :: PrimArrayOps arr sh elm => arr sh elm -> sh -> Bool-inBounds arr idx = let (lb,ub) = bounds arr in inShapeRange lb ub idx+inBounds arr idx = let (lb,ub) = bounds arr in inShapeRange lb (ub `addDim` unitDim) idx {-# INLINE inBounds #-} -- | Returns all elements of an immutable array as a list.
+ Data/PrimitiveArray/Unboxed/VectorZero.hs view
@@ -0,0 +1,71 @@+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE FlexibleInstances #-}++-- | Strict, unboxed arrays of primitive type. Uses unboxed vectors internally+-- to provide tuple instances.++module Data.PrimitiveArray.Unboxed.VectorZero where++import Control.Monad+import Data.Array.Repa.Index+import Data.Array.Repa.Shape+import Control.Exception (assert)+import Data.Vector.Unboxed as VU hiding (forM_, length, zipWithM_)+import Data.Vector.Unboxed.Mutable as VUM hiding (length)++import Data.ExtShape+import Data.PrimitiveArray++++-- | Monadic arrays of primitive type.++data MArr0 s sh elm = MArr0 !sh !(MVector s elm)++-- | Immutable arrays of primitive type.++data Arr0 sh elm = Arr0 !sh !(Vector elm)++++type instance MutArray Arr0 = MArr0++-- NOTE inLb, inUb is including bound, while exUb is excluding upper bound.+-- Differentiates between largest included index, first excluded index.++instance (Shape sh, ExtShape sh, VU.Unbox elm) => MPrimArrayOps MArr0 sh elm where+ boundsM (MArr0 exUb _) = (zeroDim,exUb `subDim` unitDim)+ fromListM inLb inUb xs = do+ ma <- newM inLb inUb+ let exUb = inUb `addDim` unitDim+ let (MArr0 _ mba) = ma+ zipWithM_ (\k x -> assert (length xs == size exUb) $ unsafeWrite mba k x) [0.. toIndex exUb inUb] xs+ return ma+ newM inLb inUb = let exUb = inUb `addDim` unitDim in+ unless (inLb == zeroDim) (error "MArr0 lb/=zeroDim") >>+ MArr0 exUb `liftM` new (size exUb)+ newWithM inLb inUb def = do+ let exUb = inUb `addDim` unitDim+ ma <- newM inLb inUb+ let (MArr0 _ mba) = ma+ forM_ [0 .. toIndex exUb inUb] $ \k -> unsafeWrite mba k def+ return ma+ readM (MArr0 exUb mba) idx = assert (inShape exUb idx) $ unsafeRead mba (toIndex exUb idx)+ writeM (MArr0 exUb mba) idx elm = assert (inShape exUb idx) $ unsafeWrite mba (toIndex exUb idx) elm+ {-# INLINE boundsM #-}+ {-# INLINE fromListM #-}+ {-# INLINE newM #-}+ {-# INLINE newWithM #-}+ {-# INLINE readM #-}+ {-# INLINE writeM #-}++instance (Shape sh, ExtShape sh, VUM.Unbox elm) => PrimArrayOps Arr0 sh elm where+ bounds (Arr0 exUb _) = (zeroDim,exUb `subDim` unitDim)+ freeze (MArr0 exUb mba) = Arr0 exUb `liftM` unsafeFreeze mba+ index (Arr0 exUb ba) idx = assert (inShape exUb idx) $ unsafeIndex ba (toIndex exUb idx)+ {-# INLINE bounds #-}+ {-# INLINE freeze #-}+ {-# INLINE index #-}+
PrimitiveArray.cabal view
@@ -1,5 +1,5 @@ Name: PrimitiveArray-Version: 0.2.1.1+Version: 0.2.2.0 License: BSD3 License-file: LICENSE Author: Christian Hoener zu Siederdissen@@ -25,6 +25,11 @@ always zero. . We have forked two repa modules: Shape and Index.+ .+ Unboxed vectors are available with implementations based on+ "primitive" and "vector". For some reason, we loose 50%+ performance with RNAfold if we use "vector" as the underlying+ data type, while Nussinov78 does not suffer. Library Exposed-modules:@@ -33,13 +38,14 @@ Data.ExtShape Data.PrimitiveArray Data.PrimitiveArray.Unboxed.Zero+ Data.PrimitiveArray.Unboxed.VectorZero Data.PrimitiveArray.Zero Build-depends: base >= 4 && <5, primitive >= 0.4, vector >= 0.9 ghc-options:- -Odph+ -O2 -funbox-strict-fields