module Data.Array.Parallel.Unlifted.Sequential.Segmented.Sums (
andSU, orSU, sumSU, productSU, maximumSU, minimumSU,
sumRU
) where
import Data.Array.Parallel.Unlifted.Sequential.Vector as V
import Data.Array.Parallel.Unlifted.Sequential.Segmented.USegd (
USegd )
import Data.Array.Parallel.Unlifted.Sequential.Segmented.Combinators (
foldSU, fold1SU, foldlRU)
andSU :: USegd -> Vector Bool -> Vector Bool
andSU = foldSU (&&) True
orSU :: USegd -> Vector Bool -> Vector Bool
orSU = foldSU (||) False
sumSU :: (Num e, Unbox e) => USegd -> Vector e -> Vector e
sumSU = foldSU (+) 0
productSU :: (Num e, Unbox e) => USegd -> Vector e -> Vector e
productSU = foldSU (*) 1
maximumSU :: (Ord e, Unbox e) => USegd -> Vector e -> Vector e
maximumSU = fold1SU max
minimumSU :: (Ord e, Unbox e) => USegd -> Vector e -> Vector e
minimumSU = fold1SU min
sumRU :: (Num e, Unbox e) => Int ->Vector e -> Vector e
sumRU = foldlRU (+) 0