#include "fusion-phases.h"
module Data.Array.Parallel.Unlifted.Sequential.Basics
( replicateSU, replicateRSU
, appendSU
, indicesSU, indicesSU')
where
import Data.Array.Parallel.Unlifted.Stream
import Data.Array.Parallel.Unlifted.Sequential.Vector
import Data.Array.Parallel.Unlifted.Sequential.USegd (USegd)
import qualified Data.Array.Parallel.Unlifted.Sequential.USegd as USegd
import qualified Data.Vector.Fusion.Stream as S
replicateSU :: Unbox a => USegd -> Vector a -> Vector a
replicateSU segd xs
= unstream
(replicateEachS (USegd.takeElements segd)
(S.zip (stream (USegd.takeLengths segd)) (stream xs)))
replicateRSU :: Unbox a => Int -> Vector a -> Vector a
replicateRSU n xs
= unstream
. replicateEachRS n
$ stream xs
appendSU :: Unbox a
=> USegd -> Vector a
-> USegd -> Vector a
-> Vector a
appendSU xd xs yd ys
= unstream
$ appendSS (stream (USegd.takeLengths xd)) (stream xs)
(stream (USegd.takeLengths yd)) (stream ys)
indicesSU :: USegd -> Vector Int
indicesSU = indicesSU' 0
indicesSU' :: Int -> USegd -> Vector Int
indicesSU' i segd
= unstream
. indicesSS (USegd.takeElements segd) i
. stream
$ USegd.takeLengths segd