#include "fusion-phases.h"
module Data.Array.Parallel.Unlifted.Parallel.UPSegd (
UPSegd,
lengthUPSegd, lengthsUPSegd, indicesUPSegd, elementsUPSegd,
segdUPSegd, distUPSegd,
lengthsToUPSegd, mkUPSegd
) where
import Data.Array.Parallel.Unlifted.Sequential.Vector as Seq
import Data.Array.Parallel.Unlifted.Sequential.Segmented.USegd
import Data.Array.Parallel.Unlifted.Distributed
data UPSegd = UPSegd { upsegd_usegd :: !USegd
, upsegd_dsegd :: Dist ((USegd,Int),Int)
}
lengthUPSegd :: UPSegd -> Int
lengthUPSegd = lengthUSegd . upsegd_usegd
lengthsUPSegd :: UPSegd -> Vector Int
lengthsUPSegd = lengthsUSegd . upsegd_usegd
indicesUPSegd :: UPSegd -> Vector Int
indicesUPSegd = indicesUSegd . upsegd_usegd
elementsUPSegd :: UPSegd -> Int
elementsUPSegd = elementsUSegd . upsegd_usegd
segdUPSegd :: UPSegd -> USegd
segdUPSegd = upsegd_usegd
distUPSegd :: UPSegd -> Dist ((USegd,Int),Int)
distUPSegd = upsegd_dsegd
lengthsToUPSegd :: Vector Int -> UPSegd
lengthsToUPSegd = toUPSegd . lengthsToUSegd
mkUPSegd :: Vector Int -> Vector Int -> Int -> UPSegd
mkUPSegd lens idxs n = toUPSegd (mkUSegd lens idxs n)
toUPSegd :: USegd -> UPSegd
toUPSegd segd = UPSegd segd (splitSegdD' theGang segd)