packages feed

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 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