#include "fusion-phases.h"
module Data.Array.Parallel.Unlifted.Sequential.Segmented.Combinators (
foldlSU, foldSU, foldl1SU, fold1SU,
foldlRU,
combineSU
) where
import Data.Array.Parallel.Stream (
foldSS, fold1SS, combineSS, foldValuesR )
import Data.Array.Parallel.Unlifted.Sequential.Vector as V
import Data.Array.Parallel.Unlifted.Sequential.Segmented.USegd
import Debug.Trace
foldlSU :: (Unbox a, Unbox b) => (b -> a -> b) -> b -> USegd -> Vector a -> Vector b
foldlSU f z segd xs = unstream
$ foldSS f z (stream (lengthsUSegd segd)) (stream xs)
foldSU :: Unbox a => (a -> a -> a) -> a -> USegd -> Vector a -> Vector a
foldSU = foldlSU
foldl1SU :: Unbox a => (a -> a -> a) -> USegd -> Vector a -> Vector a
foldl1SU f segd xs = unstream
$ fold1SS f (stream (lengthsUSegd segd)) (stream xs)
fold1SU :: Unbox a => (a -> a -> a) -> USegd -> Vector a -> Vector a
fold1SU = foldl1SU
combineSU :: Unbox a => Vector Bool -> USegd -> Vector a -> USegd -> Vector a -> Vector a
combineSU bs xd xs yd ys = unstream
$ combineSS (stream bs)
(stream (lengthsUSegd xd)) (stream xs)
(stream (lengthsUSegd yd)) (stream ys)
foldlRU :: (Unbox a, Unbox b) => (b -> a -> b) -> b -> Int -> Vector a -> Vector b
foldlRU f z segSize = unstream . foldValuesR f z segSize . stream