module Data.Array.Repa.Repr.Vector
( V, Array (..)
, computeVectorS, computeVectorP
, fromListVector
, fromVector
, toVector)
where
import Data.Array.Repa.Shape
import Data.Array.Repa.Base
import Data.Array.Repa.Eval
import qualified Data.Vector as V
import qualified Data.Vector.Mutable as VM
import Control.Monad
data V
data instance Array V sh e
= AVector !sh !(V.Vector e)
deriving instance (Show sh, Show e)
=> Show (Array V sh e)
deriving instance (Read sh, Read e)
=> Read (Array V sh e)
instance Repr V a where
linearIndex (AVector _ vec) ix
= vec V.! ix
unsafeLinearIndex (AVector _ vec) ix
= vec `V.unsafeIndex` ix
extent (AVector sh _)
= sh
deepSeqArray (AVector sh vec) x
= sh `deepSeq` vec `seq` x
instance Fillable V e where
data MArr V e
= MVec (VM.IOVector e)
newMArr n
= liftM MVec (VM.new n)
unsafeWriteMArr (MVec v) ix
= VM.unsafeWrite v ix
unsafeFreezeMArr sh (MVec mvec)
= do vec <- V.unsafeFreeze mvec
return $ AVector sh vec
deepSeqMArr !_vec x
= x
touchMArr _
= return ()
computeVectorS
:: Fill r1 V sh e
=> Array r1 sh e -> Array V sh e
computeVectorS = computeS
computeVectorP
:: (Fill r1 V sh e, Monad m)
=> Array r1 sh e -> m (Array V sh e)
computeVectorP = computeP
fromListVector :: Shape sh => sh -> [a] -> Array V sh a
fromListVector = fromList
fromVector
:: Shape sh
=> sh -> V.Vector e -> Array V sh e
fromVector sh vec
= AVector sh vec
toVector :: Array V sh e -> V.Vector e
toVector (AVector _ vec)
= vec