PrimitiveArray-0.2.1.0: Efficient multidimensional arrays

Safe HaskellSafe-Infered

Data.PrimitiveArray

Description

Vastly extended primitive arrays. Some basic ideas are now modeled after the vector package, especially the monadic mutable / pure immutable array system. There are eight flavors of arrays among three axes: mutable/pure + boxedunboxed + zero-basedlower-bound.

NOTE all operations in MPrimArrayOps and PrimArrayOps are highly unsafe. No bounds-checking is performed at all.

Synopsis

Documentation

class (Shape sh, ExtShape sh) => MPrimArrayOps marr sh elm whereSource

The core set of operations for monadic arrays.

Methods

boundsM :: marr s sh elm -> (sh, sh)Source

Return the bounds of the array. All bounds are inclusive, as in [lb..ub]

fromListM :: PrimMonad m => sh -> sh -> [elm] -> m (marr (PrimState m) sh elm)Source

Given lower and upper bounds and a list of all elements, produce a mutable array.

newM :: PrimMonad m => sh -> sh -> m (marr (PrimState m) sh elm)Source

Creates a new array with the given bounds with each element within the array being in an undefined state.

newWithM :: PrimMonad m => sh -> sh -> elm -> m (marr (PrimState m) sh elm)Source

Creates a new array with all elements being equal to elm.

readM :: PrimMonad m => marr (PrimState m) sh elm -> sh -> m elmSource

Reads a single element in the array.

writeM :: PrimMonad m => marr (PrimState m) sh elm -> sh -> elm -> m ()Source

Writes a single element in the array.

Instances

(Shape sh, ExtShape sh, Prim elm) => MPrimArrayOps MArr0 sh elm 
(Shape sh, ExtShape sh, Prim elm) => MPrimArrayOps MArr0 sh elm 

type family MutArray v :: * -> * -> * -> *Source

Used to connect each immutable array with one mutable array.

class (Shape sh, ExtShape sh, MPrimArrayOps (MutArray arr) sh elm) => PrimArrayOps arr sh elm whereSource

The core set of functions on immutable arrays.

Methods

bounds :: arr sh elm -> (sh, sh)Source

Returns the bounds of an immutable array, again inclusive bounds: [lb..ub] .

freeze :: PrimMonad m => MutArray arr (PrimState m) sh elm -> m (arr sh elm)Source

Freezes a mutable array an returns its immutable version. This operation is O(1) and both arrays share the same memory. Do not use the mutable array afterwards.

index :: arr sh elm -> sh -> elmSource

Extract a single element from the array. Generally unsafe as not bounds-checking is performed.

Instances

(Shape sh, ExtShape sh, Prim elm) => PrimArrayOps Arr0 sh elm 
(Shape sh, ExtShape sh, Prim elm) => PrimArrayOps Arr0 sh elm 

(!) :: PrimArrayOps arr sh elm => arr sh elm -> sh -> elmSource

Infix index operator. Performs minimal bounds-checking using assert in non-optimized code.

inBoundsM :: MPrimArrayOps marr sh elm => marr s sh elm -> sh -> BoolSource

Returns true if the index is valid for the array.

sliceEq :: (Eq elm, PrimArrayOps arr sh elm) => arr sh elm -> sh -> arr sh elm -> sh -> sh -> BoolSource

Given two arrays with the same dimensionality, their respective starting index, and how many steps to go in each dimension (in terms of a dimension again), determine if the multidimensional slices have the same value at all positions

TODO specialize for DIM1 (and maybe higher dim's) to use memcmp

fromAssocsM :: (PrimMonad m, MPrimArrayOps marr sh elm) => sh -> sh -> elm -> [(sh, elm)] -> m (marr (PrimState m) sh elm)Source

Construct a mutable primitive array from a lower and an upper bound, a default element, and a list of associations.

assocs :: PrimArrayOps arr sh elm => arr sh elm -> [(sh, elm)]Source

Return all associations from an array.

fromList :: PrimArrayOps arr sh elm => sh -> sh -> [elm] -> arr sh elmSource

Creates an immutable array from lower and upper bounds and a complete list of elements.

fromAssocs :: PrimArrayOps arr sh elm => sh -> sh -> elm -> [(sh, elm)] -> arr sh elmSource

Creates an immutable array from lower and upper bounds, a default element, and a list of associations.

inBounds :: PrimArrayOps arr sh elm => arr sh elm -> sh -> BoolSource

Determines if an index is valid for a given immutable array.

toList :: PrimArrayOps arr sh elm => arr sh elm -> [elm]Source

Returns all elements of an immutable array as a list.