#include "fusion-phases.h"
module Data.Array.Parallel.Unlifted.Sequential.Segmented.Stream (
streamSU, unstreamSU
) where
import Data.Array.Parallel.Stream (
Stream, SStream(..), segmentS)
import Data.Array.Parallel.Unlifted.Sequential.Flat (
UA, streamU, unstreamU)
import Data.Array.Parallel.Unlifted.Sequential.Segmented.SUArr (
SUArr, USegd,
lengthsUSegd, lengthsToUSegd,
segdSU, flattenSU, (>:))
streamSegd :: USegd -> Stream Int
streamSegd = streamU . lengthsUSegd
unstreamSegd :: Stream Int -> USegd
unstreamSegd = lengthsToUSegd . unstreamU
streamSU :: UA a => SUArr a -> SStream a
streamSU !sa = segmentS (streamSegd (segdSU sa))
(streamU (flattenSU sa))
unstreamSU :: UA a => SStream a -> SUArr a
unstreamSU (SStream segs vals) = unstreamSegd segs >: unstreamU vals