{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE RankNTypes #-}
module Data.Dense.Storable
(
SArray
, Storable
, Shape
, HasLayout (..)
, Layout
, extent
, size
, indexes
, indexesFrom
, indexesBetween
, vector
, values
, values'
, valuesBetween
, flat
, fromList
, fromListInto
, fromListInto_
, fromVectorInto
, fromVectorInto_
, replicate
, generate
, linearGenerate
, create
, replicateM
, generateM
, linearGenerateM
, empty
, null
, (!)
, (!?)
, unsafeIndex
, linearIndex
, unsafeLinearIndex
, indexM
, unsafeIndexM
, linearIndexM
, unsafeLinearIndexM
, (//)
, accum
, map
, imap
, zipWith
, zipWith3
, izipWith
, izipWith3
, ixRow
, rows
, ixColumn
, columns
, ixPlane
, planes
, flattenPlane
, unsafeOrdinals
, SMArray
, thaw
, freeze
, unsafeThaw
, unsafeFreeze
, G.Delayed
, delayed
, seqDelayed
, delay
, manifest
, seqManifest
, G.genDelayed
, G.indexDelayed
, affirm
, seqAffirm
, G.Focused
, G.focusOn
, G.unfocus
, G.unfocused
, G.extendFocus
, G.locale
, G.shiftFocus
, unsafeWithPtr
, unsafeToForeignPtr
, unsafeFromForeignPtr
) where
import Control.Lens hiding (imap)
import Control.Monad.Primitive
import Control.Monad.ST
import qualified Data.Foldable as F
import Data.Vector.Storable (Storable, Vector)
import qualified Data.Vector.Storable as S
import Linear hiding (vector)
import Foreign (Ptr, ForeignPtr)
import Prelude hiding (map, null, replicate, zip,
zip3, zipWith, zipWith3)
import Data.Dense.Base (Array (..))
import Data.Dense.Generic (SArray)
import qualified Data.Dense.Generic as G
import Data.Dense.Index
import Data.Dense.Mutable (SMArray)
values :: (Shape f, Storable a, Storable b)
=> IndexedTraversal (f Int) (SArray f a) (SArray f b) a b
values :: IndexedTraversal (f Int) (SArray f a) (SArray f b) a b
values = p a (f b) -> SArray f a -> f (SArray f b)
forall (f :: * -> *) (v :: * -> *) a b.
(Shape f, Vector v a, Vector v b) =>
IndexedTraversal (f Int) (Array v f a) (Array v f b) a b
G.values'
{-# INLINE values #-}
values' :: (Shape f, Storable a, Storable b)
=> IndexedTraversal (f Int) (SArray f a) (SArray f b) a b
values' :: IndexedTraversal (f Int) (SArray f a) (SArray f b) a b
values' = p a (f b) -> SArray f a -> f (SArray f b)
forall (f :: * -> *) (v :: * -> *) a b.
(Shape f, Vector v a, Vector v b) =>
IndexedTraversal (f Int) (Array v f a) (Array v f b) a b
G.values'
{-# INLINE values' #-}
valuesBetween
:: (Shape f, Storable a)
=> f Int
-> f Int
-> IndexedTraversal' (f Int) (SArray f a) a
valuesBetween :: f Int -> f Int -> IndexedTraversal' (f Int) (SArray f a) a
valuesBetween = f Int -> f Int -> p a (f a) -> SArray f a -> f (SArray f a)
forall (f :: * -> *) (v :: * -> *) a.
(Shape f, Vector v a) =>
f Int -> f Int -> IndexedTraversal' (f Int) (Array v f a) a
G.valuesBetween
{-# INLINE valuesBetween #-}
flat :: Storable b => Iso (SArray V1 a) (SArray V1 b) (Vector a) (Vector b)
flat :: Iso (SArray V1 a) (SArray V1 b) (Vector a) (Vector b)
flat = p (Vector a) (f (Vector b)) -> p (SArray V1 a) (f (SArray V1 b))
forall (w :: * -> *) b (v :: * -> *) a.
Vector w b =>
Iso (Array v V1 a) (Array w V1 b) (v a) (w b)
G.flat
{-# INLINE flat #-}
vector :: (Storable a, Storable b) => IndexedLens (Layout f) (SArray f a) (SArray f b) (Vector a) (Vector b)
vector :: IndexedLens
(Layout f) (SArray f a) (SArray f b) (Vector a) (Vector b)
vector = p (Vector a) (f (Vector b)) -> SArray f a -> f (SArray f b)
forall (v :: * -> *) a (w :: * -> *) b (f :: * -> *).
(Vector v a, Vector w b) =>
IndexedLens (Layout f) (Array v f a) (Array w f b) (v a) (w b)
G.vector
{-# INLINE vector #-}
fromList :: Storable a => [a] -> SArray V1 a
fromList :: [a] -> SArray V1 a
fromList = [a] -> SArray V1 a
forall (v :: * -> *) a. Vector v a => [a] -> Array v V1 a
G.fromList
{-# INLINE fromList #-}
fromListInto :: (Shape f, Storable a) => Layout f -> [a] -> Maybe (SArray f a)
fromListInto :: Layout f -> [a] -> Maybe (SArray f a)
fromListInto = Layout f -> [a] -> Maybe (SArray f a)
forall (f :: * -> *) (v :: * -> *) a.
(Shape f, Vector v a) =>
Layout f -> [a] -> Maybe (Array v f a)
G.fromListInto
{-# INLINE fromListInto #-}
fromListInto_ :: (Shape f, Storable a) => Layout f -> [a] -> SArray f a
fromListInto_ :: Layout f -> [a] -> SArray f a
fromListInto_ = Layout f -> [a] -> SArray f a
forall (f :: * -> *) (v :: * -> *) a.
(Shape f, Vector v a) =>
Layout f -> [a] -> Array v f a
G.fromListInto_
{-# INLINE fromListInto_ #-}
fromVectorInto :: (Shape f, Storable a) => Layout f -> Vector a -> Maybe (SArray f a)
fromVectorInto :: Layout f -> Vector a -> Maybe (SArray f a)
fromVectorInto = Layout f -> Vector a -> Maybe (SArray f a)
forall (f :: * -> *) (v :: * -> *) a.
(Shape f, Vector v a) =>
Layout f -> v a -> Maybe (Array v f a)
G.fromVectorInto
{-# INLINE fromVectorInto #-}
fromVectorInto_ :: (Shape f, Storable a) => Layout f -> Vector a -> SArray f a
fromVectorInto_ :: Layout f -> Vector a -> SArray f a
fromVectorInto_ = Layout f -> Vector a -> SArray f a
forall (f :: * -> *) (v :: * -> *) a.
(Shape f, Vector v a) =>
Layout f -> v a -> Array v f a
G.fromVectorInto_
{-# INLINE fromVectorInto_ #-}
empty :: (Storable a, Additive f) => SArray f a
empty :: SArray f a
empty = SArray f a
forall (v :: * -> *) a (f :: * -> *).
(Vector v a, Additive f) =>
Array v f a
G.empty
{-# INLINE empty #-}
null :: F.Foldable f => SArray f a -> Bool
null :: SArray f a -> Bool
null = SArray f a -> Bool
forall (f :: * -> *) (v :: * -> *) a.
Foldable f =>
Array v f a -> Bool
G.null
{-# INLINE null #-}
(!) :: (Shape f, Storable a) => SArray f a -> f Int -> a
(!) = SArray f a -> f Int -> a
forall (f :: * -> *) (v :: * -> *) a.
(Shape f, Vector v a) =>
Array v f a -> f Int -> a
(G.!)
{-# INLINE (!) #-}
(!?) :: (Shape f, Storable a) => SArray f a -> f Int -> Maybe a
!? :: SArray f a -> f Int -> Maybe a
(!?) = SArray f a -> f Int -> Maybe a
forall (f :: * -> *) (v :: * -> *) a.
(Shape f, Vector v a) =>
Array v f a -> f Int -> Maybe a
(G.!?)
{-# INLINE (!?) #-}
unsafeIndex :: (Shape f, Storable a) => SArray f a -> f Int -> a
unsafeIndex :: SArray f a -> f Int -> a
unsafeIndex = SArray f a -> f Int -> a
forall (f :: * -> *) (v :: * -> *) a.
(Shape f, Vector v a) =>
Array v f a -> f Int -> a
G.unsafeIndex
{-# INLINE unsafeIndex #-}
linearIndex :: Storable a => SArray f a -> Int -> a
linearIndex :: SArray f a -> Int -> a
linearIndex = SArray f a -> Int -> a
forall (v :: * -> *) a (f :: * -> *).
Vector v a =>
Array v f a -> Int -> a
G.linearIndex
{-# INLINE linearIndex #-}
unsafeLinearIndex :: Storable a => SArray f a -> Int -> a
unsafeLinearIndex :: SArray f a -> Int -> a
unsafeLinearIndex = SArray f a -> Int -> a
forall (v :: * -> *) a (f :: * -> *).
Vector v a =>
Array v f a -> Int -> a
G.unsafeLinearIndex
{-# INLINE unsafeLinearIndex #-}
indexM :: (Shape f, Storable a, Monad m) => SArray f a -> f Int -> m a
indexM :: SArray f a -> f Int -> m a
indexM = SArray f a -> f Int -> m a
forall (f :: * -> *) (v :: * -> *) a (m :: * -> *).
(Shape f, Vector v a, Monad m) =>
Array v f a -> f Int -> m a
G.indexM
{-# INLINE indexM #-}
unsafeIndexM :: (Shape f, Storable a, Monad m) => SArray f a -> f Int -> m a
unsafeIndexM :: SArray f a -> f Int -> m a
unsafeIndexM = SArray f a -> f Int -> m a
forall (f :: * -> *) (v :: * -> *) a (m :: * -> *).
(Shape f, Vector v a, Monad m) =>
Array v f a -> f Int -> m a
G.unsafeIndexM
{-# INLINE unsafeIndexM #-}
linearIndexM :: (Shape f, Storable a, Monad m) => SArray f a -> Int -> m a
linearIndexM :: SArray f a -> Int -> m a
linearIndexM = SArray f a -> Int -> m a
forall (f :: * -> *) (v :: * -> *) a (m :: * -> *).
(Shape f, Vector v a, Monad m) =>
Array v f a -> Int -> m a
G.linearIndexM
{-# INLINE linearIndexM #-}
unsafeLinearIndexM :: (Storable a, Monad m) => SArray f a -> Int -> m a
unsafeLinearIndexM :: SArray f a -> Int -> m a
unsafeLinearIndexM = SArray f a -> Int -> m a
forall (v :: * -> *) a (m :: * -> *) (f :: * -> *).
(Vector v a, Monad m) =>
Array v f a -> Int -> m a
G.unsafeLinearIndexM
{-# INLINE unsafeLinearIndexM #-}
create :: Storable a => (forall s. ST s (SMArray f s a)) -> SArray f a
create :: (forall s. ST s (SMArray f s a)) -> SArray f a
create forall s. ST s (SMArray f s a)
m = ST Any (SMArray f Any a)
forall s. ST s (SMArray f s a)
m ST Any (SMArray f Any a) -> SArray f a -> SArray f a
`seq` (forall s. ST s (SArray f a)) -> SArray f a
forall a. (forall s. ST s a) -> a
runST (ST s (SMArray f s a)
forall s. ST s (SMArray f s a)
m ST s (SMArray f s a)
-> (SMArray f s a -> ST s (SArray f a)) -> ST s (SArray f a)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= SMArray f s a -> ST s (SArray f a)
forall (m :: * -> *) (v :: * -> *) a (f :: * -> *).
(PrimMonad m, Vector v a) =>
MArray (Mutable v) f (PrimState m) a -> m (Array v f a)
G.unsafeFreeze)
{-# INLINE create #-}
replicate :: (Shape f, Storable a) => f Int -> a -> SArray f a
replicate :: f Int -> a -> SArray f a
replicate = f Int -> a -> SArray f a
forall (f :: * -> *) (v :: * -> *) a.
(Shape f, Vector v a) =>
f Int -> a -> Array v f a
G.replicate
{-# INLINE replicate #-}
linearGenerate :: (Shape f, Storable a) => Layout f -> (Int -> a) -> SArray f a
linearGenerate :: Layout f -> (Int -> a) -> SArray f a
linearGenerate = Layout f -> (Int -> a) -> SArray f a
forall (f :: * -> *) (v :: * -> *) a.
(Shape f, Vector v a) =>
Layout f -> (Int -> a) -> Array v f a
G.linearGenerate
{-# INLINE linearGenerate #-}
generate :: (Shape f, Storable a) => Layout f -> (f Int -> a) -> SArray f a
generate :: Layout f -> (Layout f -> a) -> SArray f a
generate = Layout f -> (Layout f -> a) -> SArray f a
forall (f :: * -> *) (v :: * -> *) a.
(Shape f, Vector v a) =>
Layout f -> (Layout f -> a) -> Array v f a
G.generate
{-# INLINE generate #-}
replicateM :: (Monad m, Shape f, Storable a) => Layout f -> m a -> m (SArray f a)
replicateM :: Layout f -> m a -> m (SArray f a)
replicateM = Layout f -> m a -> m (SArray f a)
forall (m :: * -> *) (f :: * -> *) (v :: * -> *) a.
(Monad m, Shape f, Vector v a) =>
Layout f -> m a -> m (Array v f a)
G.replicateM
{-# INLINE replicateM #-}
generateM :: (Monad m, Shape f, Storable a) => Layout f -> (f Int -> m a) -> m (SArray f a)
generateM :: Layout f -> (Layout f -> m a) -> m (SArray f a)
generateM = Layout f -> (Layout f -> m a) -> m (SArray f a)
forall (m :: * -> *) (f :: * -> *) (v :: * -> *) a.
(Monad m, Shape f, Vector v a) =>
Layout f -> (Layout f -> m a) -> m (Array v f a)
G.generateM
{-# INLINE generateM #-}
linearGenerateM :: (Monad m, Shape f, Storable a) => Layout f -> (Int -> m a) -> m (SArray f a)
linearGenerateM :: Layout f -> (Int -> m a) -> m (SArray f a)
linearGenerateM = Layout f -> (Int -> m a) -> m (SArray f a)
forall (m :: * -> *) (f :: * -> *) (v :: * -> *) a.
(Monad m, Shape f, Vector v a) =>
Layout f -> (Int -> m a) -> m (Array v f a)
G.linearGenerateM
{-# INLINE linearGenerateM #-}
map :: (Storable a, Storable b) => (a -> b) -> SArray f a -> SArray f b
map :: (a -> b) -> SArray f a -> SArray f b
map = (a -> b) -> SArray f a -> SArray f b
forall (v :: * -> *) a b (f :: * -> *).
(Vector v a, Vector v b) =>
(a -> b) -> Array v f a -> Array v f b
G.map
{-# INLINE map #-}
imap :: (Shape f, Storable a, Storable b) => (f Int -> a -> b) -> SArray f a -> SArray f b
imap :: (f Int -> a -> b) -> SArray f a -> SArray f b
imap = (f Int -> a -> b) -> SArray f a -> SArray f b
forall (f :: * -> *) (v :: * -> *) a b.
(Shape f, Vector v a, Vector v b) =>
(f Int -> a -> b) -> Array v f a -> Array v f b
G.imap
{-# INLINE imap #-}
(//) :: (Storable a, Shape f) => SArray f a -> [(f Int, a)] -> SArray f a
// :: SArray f a -> [(f Int, a)] -> SArray f a
(//) = SArray f a -> [(f Int, a)] -> SArray f a
forall (v :: * -> *) a (f :: * -> *).
(Vector v a, Shape f) =>
Array v f a -> [(f Int, a)] -> Array v f a
(G.//)
{-# INLINE (//) #-}
accum :: (Shape f, Storable a)
=> (a -> b -> a)
-> SArray f a
-> [(f Int, b)]
-> SArray f a
accum :: (a -> b -> a) -> SArray f a -> [(f Int, b)] -> SArray f a
accum = (a -> b -> a) -> SArray f a -> [(f Int, b)] -> SArray f a
forall (f :: * -> *) (v :: * -> *) a b.
(Shape f, Vector v a) =>
(a -> b -> a) -> Array v f a -> [(f Int, b)] -> Array v f a
G.accum
{-# INLINE accum #-}
zipWith :: (Shape f, Storable a, Storable b, Storable c)
=> (a -> b -> c)
-> SArray f a
-> SArray f b
-> SArray f c
zipWith :: (a -> b -> c) -> SArray f a -> SArray f b -> SArray f c
zipWith = (a -> b -> c) -> SArray f a -> SArray f b -> SArray f c
forall (f :: * -> *) (v :: * -> *) a b c.
(Shape f, Vector v a, Vector v b, Vector v c) =>
(a -> b -> c) -> Array v f a -> Array v f b -> Array v f c
G.zipWith
{-# INLINE zipWith #-}
zipWith3 :: (Shape f, Storable a, Storable b, Storable c, Storable d)
=> (a -> b -> c -> d)
-> SArray f a
-> SArray f b
-> SArray f c
-> SArray f d
zipWith3 :: (a -> b -> c -> d)
-> SArray f a -> SArray f b -> SArray f c -> SArray f d
zipWith3 = (a -> b -> c -> d)
-> SArray f a -> SArray f b -> SArray f c -> SArray f d
forall (f :: * -> *) (v :: * -> *) a b c d.
(Shape f, Vector v a, Vector v b, Vector v c, Vector v d) =>
(a -> b -> c -> d)
-> Array v f a -> Array v f b -> Array v f c -> Array v f d
G.zipWith3
{-# INLINE zipWith3 #-}
izipWith :: (Shape f, Storable a, Storable b, Storable c)
=> (f Int -> a -> b -> c)
-> SArray f a
-> SArray f b
-> SArray f c
izipWith :: (f Int -> a -> b -> c) -> SArray f a -> SArray f b -> SArray f c
izipWith = (f Int -> a -> b -> c) -> SArray f a -> SArray f b -> SArray f c
forall (f :: * -> *) (v :: * -> *) a b c.
(Shape f, Vector v a, Vector v b, Vector v c) =>
(f Int -> a -> b -> c) -> Array v f a -> Array v f b -> Array v f c
G.izipWith
{-# INLINE izipWith #-}
izipWith3 :: (Shape f, Storable a, Storable b, Storable c, Storable d)
=> (f Int -> a -> b -> c -> d)
-> SArray f a
-> SArray f b
-> SArray f c
-> SArray f d
izipWith3 :: (f Int -> a -> b -> c -> d)
-> SArray f a -> SArray f b -> SArray f c -> SArray f d
izipWith3 = (f Int -> a -> b -> c -> d)
-> SArray f a -> SArray f b -> SArray f c -> SArray f d
forall (f :: * -> *) (v :: * -> *) a b c d.
(Shape f, Vector v a, Vector v b, Vector v c, Vector v d) =>
(f Int -> a -> b -> c -> d)
-> Array v f a -> Array v f b -> Array v f c -> Array v f d
G.izipWith3
{-# INLINE izipWith3 #-}
rows :: (Storable a, Storable b)
=> IndexedTraversal Int (SArray V2 a) (SArray V2 b) (Vector a) (Vector b)
rows :: IndexedTraversal
Int (SArray V2 a) (SArray V2 b) (Vector a) (Vector b)
rows = p (Vector a) (f (Vector b)) -> SArray V2 a -> f (SArray V2 b)
forall (v :: * -> *) a (w :: * -> *) b.
(Vector v a, Vector w b) =>
IndexedTraversal Int (Array v V2 a) (Array w V2 b) (v a) (w b)
G.rows
{-# INLINE rows #-}
ixRow :: Storable a => Int -> IndexedTraversal' Int (SArray V2 a) (Vector a)
ixRow :: Int -> IndexedTraversal' Int (SArray V2 a) (Vector a)
ixRow = Int
-> p (Vector a) (f (Vector a)) -> SArray V2 a -> f (SArray V2 a)
forall (v :: * -> *) a.
Vector v a =>
Int -> IndexedTraversal' Int (Array v V2 a) (v a)
G.ixRow
{-# INLINE ixRow #-}
columns :: (Storable a, Storable b)
=> IndexedTraversal Int (SArray V2 a) (SArray V2 b) (Vector a) (Vector b)
columns :: IndexedTraversal
Int (SArray V2 a) (SArray V2 b) (Vector a) (Vector b)
columns = p (Vector a) (f (Vector b)) -> SArray V2 a -> f (SArray V2 b)
forall (v :: * -> *) a (w :: * -> *) b.
(Vector v a, Vector w b) =>
IndexedTraversal Int (Array v V2 a) (Array w V2 b) (v a) (w b)
G.columns
{-# INLINE columns #-}
ixColumn :: Storable a => Int -> IndexedTraversal' Int (SArray V2 a) (Vector a)
ixColumn :: Int -> IndexedTraversal' Int (SArray V2 a) (Vector a)
ixColumn = Int
-> p (Vector a) (f (Vector a)) -> SArray V2 a -> f (SArray V2 a)
forall (v :: * -> *) a.
Vector v a =>
Int -> IndexedTraversal' Int (Array v V2 a) (v a)
G.ixColumn
{-# INLINE ixColumn #-}
ixPlane :: Storable a
=> ALens' (V3 Int) (V2 Int)
-> Int
-> IndexedTraversal' Int (SArray V3 a) (SArray V2 a)
ixPlane :: ALens' (V3 Int) (V2 Int)
-> Int -> IndexedTraversal' Int (SArray V3 a) (SArray V2 a)
ixPlane = ALens' (V3 Int) (V2 Int)
-> Int
-> p (SArray V2 a) (f (SArray V2 a))
-> SArray V3 a
-> f (SArray V3 a)
forall (v :: * -> *) a.
Vector v a =>
ALens' (V3 Int) (V2 Int)
-> Int -> IndexedTraversal' Int (Array v V3 a) (Array v V2 a)
G.ixPlane
{-# INLINE ixPlane #-}
planes :: (Storable a, Storable b)
=> ALens' (V3 Int) (V2 Int)
-> IndexedTraversal Int (SArray V3 a) (SArray V3 b) (SArray V2 a) (SArray V2 b)
planes :: ALens' (V3 Int) (V2 Int)
-> IndexedTraversal
Int (SArray V3 a) (SArray V3 b) (SArray V2 a) (SArray V2 b)
planes = ALens' (V3 Int) (V2 Int)
-> p (SArray V2 a) (f (SArray V2 b))
-> SArray V3 a
-> f (SArray V3 b)
forall (v :: * -> *) a (w :: * -> *) b.
(Vector v a, Vector w b) =>
ALens' (V3 Int) (V2 Int)
-> IndexedTraversal
Int (Array v V3 a) (Array w V3 b) (Array v V2 a) (Array w V2 b)
G.planes
{-# INLINE planes #-}
flattenPlane :: (Storable a, Storable b)
=> ALens' (V3 Int) (V2 Int)
-> (Vector a -> b)
-> SArray V3 a
-> SArray V2 b
flattenPlane :: ALens' (V3 Int) (V2 Int)
-> (Vector a -> b) -> SArray V3 a -> SArray V2 b
flattenPlane = ALens' (V3 Int) (V2 Int)
-> (Vector a -> b) -> SArray V3 a -> SArray V2 b
forall (v :: * -> *) a (w :: * -> *) b.
(Vector v a, Vector w b) =>
ALens' (V3 Int) (V2 Int)
-> (v a -> b) -> Array v V3 a -> Array w V2 b
G.flattenPlane
{-# INLINE flattenPlane #-}
unsafeOrdinals :: (Storable a, Shape f) => [f Int] -> IndexedTraversal' (f Int) (SArray f a) a
unsafeOrdinals :: [f Int] -> IndexedTraversal' (f Int) (SArray f a) a
unsafeOrdinals = [f Int] -> p a (f a) -> SArray f a -> f (SArray f a)
forall (v :: * -> *) a (f :: * -> *).
(Vector v a, Shape f) =>
[f Int] -> IndexedTraversal' (f Int) (Array v f a) a
G.unsafeOrdinals
{-# INLINE [0] unsafeOrdinals #-}
freeze :: (PrimMonad m, Storable a)
=> SMArray f (PrimState m) a -> m (SArray f a)
freeze :: SMArray f (PrimState m) a -> m (SArray f a)
freeze = SMArray f (PrimState m) a -> m (SArray f a)
forall (m :: * -> *) (v :: * -> *) a (f :: * -> *).
(PrimMonad m, Vector v a) =>
MArray (Mutable v) f (PrimState m) a -> m (Array v f a)
G.freeze
{-# INLINE freeze #-}
thaw :: (PrimMonad m, Storable a)
=> SArray f a -> m (SMArray f (PrimState m) a)
thaw :: SArray f a -> m (SMArray f (PrimState m) a)
thaw = SArray f a -> m (SMArray f (PrimState m) a)
forall (m :: * -> *) (v :: * -> *) a (f :: * -> *).
(PrimMonad m, Vector v a) =>
Array v f a -> m (MArray (Mutable v) f (PrimState m) a)
G.thaw
{-# INLINE thaw #-}
unsafeFreeze :: (PrimMonad m, Storable a)
=> SMArray f (PrimState m) a -> m (SArray f a)
unsafeFreeze :: SMArray f (PrimState m) a -> m (SArray f a)
unsafeFreeze = SMArray f (PrimState m) a -> m (SArray f a)
forall (m :: * -> *) (v :: * -> *) a (f :: * -> *).
(PrimMonad m, Vector v a) =>
MArray (Mutable v) f (PrimState m) a -> m (Array v f a)
G.unsafeFreeze
{-# INLINE unsafeFreeze #-}
unsafeThaw :: (PrimMonad m, Storable a)
=> SArray f a -> m (SMArray f (PrimState m) a)
unsafeThaw :: SArray f a -> m (SMArray f (PrimState m) a)
unsafeThaw = SArray f a -> m (SMArray f (PrimState m) a)
forall (m :: * -> *) (v :: * -> *) a (f :: * -> *).
(PrimMonad m, Vector v a) =>
Array v f a -> m (MArray (Mutable v) f (PrimState m) a)
G.unsafeThaw
{-# INLINE unsafeThaw #-}
delayed :: (Storable a, Storable b, Shape f, Shape k)
=> Iso (SArray f a) (SArray k b) (G.Delayed f a) (G.Delayed k b)
delayed :: Iso (SArray f a) (SArray k b) (Delayed f a) (Delayed k b)
delayed = p (Delayed f a) (f (Delayed k b))
-> p (SArray f a) (f (SArray k b))
forall (v :: * -> *) a (w :: * -> *) b (f :: * -> *) (g :: * -> *).
(Vector v a, Vector w b, Shape f, Shape g) =>
Iso (Array v f a) (Array w g b) (Delayed f a) (Delayed g b)
G.delayed
{-# INLINE delayed #-}
seqDelayed :: (Storable a, Storable b, Shape f, Shape k)
=> Iso (SArray f a) (SArray k b) (G.Delayed f a) (G.Delayed k b)
seqDelayed :: Iso (SArray f a) (SArray k b) (Delayed f a) (Delayed k b)
seqDelayed = p (Delayed f a) (f (Delayed k b))
-> p (SArray f a) (f (SArray k b))
forall (v :: * -> *) a (w :: * -> *) b (f :: * -> *) (g :: * -> *).
(Vector v a, Vector w b, Shape f, Shape g) =>
Iso (Array v f a) (Array w g b) (Delayed f a) (Delayed g b)
G.seqDelayed
{-# INLINE seqDelayed #-}
delay :: (Storable a, Shape f) => SArray f a -> G.Delayed f a
delay :: SArray f a -> Delayed f a
delay = SArray f a -> Delayed f a
forall (v :: * -> *) a (f :: * -> *).
(Vector v a, Shape f) =>
Array v f a -> Delayed f a
G.delay
{-# INLINE delay #-}
manifest :: (Storable a, Shape f) => G.Delayed f a -> SArray f a
manifest :: Delayed f a -> SArray f a
manifest = Delayed f a -> SArray f a
forall (v :: * -> *) a (f :: * -> *).
(Vector v a, Shape f) =>
Delayed f a -> Array v f a
G.manifest
{-# INLINE manifest #-}
seqManifest :: (Storable a, Shape f) => G.Delayed f a -> SArray f a
seqManifest :: Delayed f a -> SArray f a
seqManifest = Delayed f a -> SArray f a
forall (v :: * -> *) a (f :: * -> *).
(Vector v a, Shape f) =>
Delayed f a -> Array v f a
G.seqManifest
{-# INLINE seqManifest #-}
affirm :: (Shape f, Storable a) => G.Delayed f a -> G.Delayed f a
affirm :: Delayed f a -> Delayed f a
affirm = SArray f a -> Delayed f a
forall a (f :: * -> *).
(Storable a, Shape f) =>
SArray f a -> Delayed f a
delay (SArray f a -> Delayed f a)
-> (Delayed f a -> SArray f a) -> Delayed f a -> Delayed f a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Delayed f a -> SArray f a
forall a (f :: * -> *).
(Storable a, Shape f) =>
Delayed f a -> SArray f a
manifest
{-# INLINE affirm #-}
seqAffirm :: (Shape f, Storable a) => G.Delayed f a -> G.Delayed f a
seqAffirm :: Delayed f a -> Delayed f a
seqAffirm = SArray f a -> Delayed f a
forall a (f :: * -> *).
(Storable a, Shape f) =>
SArray f a -> Delayed f a
delay (SArray f a -> Delayed f a)
-> (Delayed f a -> SArray f a) -> Delayed f a -> Delayed f a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Delayed f a -> SArray f a
forall a (f :: * -> *).
(Storable a, Shape f) =>
Delayed f a -> SArray f a
seqManifest
{-# INLINE seqAffirm #-}
unsafeWithPtr :: Storable a => SArray f a -> (Ptr a -> IO b) -> IO b
unsafeWithPtr :: SArray f a -> (Ptr a -> IO b) -> IO b
unsafeWithPtr (Array Layout f
_ Vector a
v) = Vector a -> (Ptr a -> IO b) -> IO b
forall a b. Storable a => Vector a -> (Ptr a -> IO b) -> IO b
S.unsafeWith Vector a
v
{-# INLINE unsafeWithPtr #-}
unsafeToForeignPtr :: Storable a => SArray f a -> ForeignPtr a
unsafeToForeignPtr :: SArray f a -> ForeignPtr a
unsafeToForeignPtr (Array Layout f
_ Vector a
v) = ForeignPtr a
fp
where (ForeignPtr a
fp, Int
_, Int
_) = Vector a -> (ForeignPtr a, Int, Int)
forall a. Storable a => Vector a -> (ForeignPtr a, Int, Int)
S.unsafeToForeignPtr Vector a
v
{-# INLINE unsafeToForeignPtr #-}
unsafeFromForeignPtr
:: (Shape f, Storable a) => Layout f -> ForeignPtr a -> SArray f a
unsafeFromForeignPtr :: Layout f -> ForeignPtr a -> SArray f a
unsafeFromForeignPtr Layout f
l ForeignPtr a
fp = Layout f -> Vector a -> SArray f a
forall (v :: * -> *) (f :: * -> *) a.
Layout f -> v a -> Array v f a
Array Layout f
l (ForeignPtr a -> Int -> Vector a
forall a. Storable a => ForeignPtr a -> Int -> Vector a
S.unsafeFromForeignPtr0 ForeignPtr a
fp (Layout f -> Int
forall (f :: * -> *). Shape f => Layout f -> Int
shapeSize Layout f
l))
{-# INLINE unsafeFromForeignPtr #-}