#include "fusion-phases.h"
module Data.Array.Parallel.Unlifted.Sequential.Combinators
( foldlSU, foldlSSU
, foldSU, foldSSU
, foldl1SU, foldl1SSU
, fold1SU, fold1SSU
, foldlRU
, combineSU)
where
import Data.Array.Parallel.Unlifted.Stream
import Data.Array.Parallel.Unlifted.Vectors as US
import Data.Array.Parallel.Unlifted.Sequential.Vector as U
import Data.Array.Parallel.Unlifted.Sequential.USSegd (USSegd)
import Data.Array.Parallel.Unlifted.Sequential.USegd (USegd)
import qualified Data.Array.Parallel.Unlifted.Sequential.USSegd as USSegd
import qualified Data.Array.Parallel.Unlifted.Sequential.USegd as USegd
foldlSU :: (Unbox a, Unbox b)
=> (b -> a -> b) -> b -> USegd -> Vector a -> Vector b
foldlSU f !z segd xs
= unstream
$ foldSS f z (stream (USegd.takeLengths segd))
(stream xs)
foldlSSU :: (Unbox a, Unboxes a, Unbox b)
=> (b -> a -> b) -> b -> USSegd -> Vectors a -> Vector b
foldlSSU f !z ssegd xss
= unstream
$ foldSS f z (stream (USSegd.takeLengths ssegd))
(streamSegsFromVectorsUSSegd xss ssegd)
foldSU :: Unbox a
=> (a -> a -> a) -> a -> USegd -> Vector a -> Vector a
foldSU = foldlSU
foldSSU :: (Unbox a, Unboxes a)
=> (a -> a -> a) -> a -> USSegd -> Vectors a -> Vector a
foldSSU = foldlSSU
foldl1SU :: Unbox a
=> (a -> a -> a) -> USegd -> Vector a -> Vector a
foldl1SU f segd xs
= unstream
$ fold1SS f (stream (USegd.takeLengths segd))
(stream xs)
foldl1SSU :: (Unbox a, Unboxes a)
=> (a -> a -> a) -> USSegd -> Vectors a -> Vector a
foldl1SSU f ssegd xxs
= unstream
$ fold1SS f (stream (USSegd.takeLengths ssegd))
(streamSegsFromVectorsUSSegd xxs ssegd)
fold1SU :: Unbox a
=> (a -> a -> a) -> USegd -> Vector a -> Vector a
fold1SU = foldl1SU
fold1SSU :: (Unbox a, Unboxes a)
=> (a -> a -> a) -> USSegd -> Vectors a -> Vector a
fold1SSU = foldl1SSU
foldlRU :: (Unbox a, Unbox b) => (b -> a -> b) -> b -> Int -> Vector a -> Vector b
foldlRU f !z segSize
= unstream . foldValuesR f z segSize . stream
combineSU :: Unbox a => Vector Bool -> USegd -> Vector a -> USegd -> Vector a -> Vector a
combineSU bs xd xs yd ys
= unstream
$ combineSS (stream bs)
(stream (USegd.takeLengths xd)) (stream xs)
(stream (USegd.takeLengths yd)) (stream ys)