----------------------------------------------------------------------------- -- | -- Module : Data.Array.Parallel.Unlifted.Flat.Subarrays -- Copyright : (c) [2001..2002] Manuel M T Chakravarty & Gabriele Keller -- (c) 2006 Manuel M T Chakravarty & Roman Leshchinskiy -- License : see libraries/ndp/LICENSE -- -- Maintainer : Roman Leshchinskiy <rl@cse.unsw.edu.au> -- Stability : internal -- Portability : portable -- -- Description --------------------------------------------------------------- -- -- Subarrays of flat unlifted arrays. -- -- Todo ---------------------------------------------------------------------- -- {-# LANGUAGE CPP #-} #include "fusion-phases.h" module Data.Array.Parallel.Unlifted.Parallel.Subarrays ( dropUP -- sliceU, extractU, tailU, takeU, dropU, splitAtU, {- takeWhileU, dropWhileU, spanU, breakU -} ) where import Data.Array.Parallel.Base ( (:*:)(..), fstS, sndS, uncurryS) import Data.Array.Parallel.Unlifted.Sequential ( UA, UArr, unitsU, lengthU, newU, sliceU, fstU, sndU, foldU, mapU, zipU, unzipU, scanU, indexedU, replicateU) import Data.Array.Parallel.Unlifted.Distributed dropUP :: UA e => Int -> UArr e -> UArr e dropUP n xs = sliceU xs (min (max 0 n) (lengthU xs)) (min (lengthU xs) (lengthU xs - n)) {-# INLINE_U dropUP #-} {- dropUP n xs = joinD theGang unbalanced $ (mapD theGang (\t -> sliceU (fstS t) (fstS $ sndS t) (sndS $ sndS t))) args -- joinD theGang balanced $ mapD theGang (replicateU 1) startInds where args:: Dist (UArr Int :*: (Int :*: Int)) args = zipD (splitD theGang balanced xs) ranges ranges = mapD theGang (\t -> ((max 0 (min (fstS t - 1) (n - (sndS t)))) :*: (min (fstS t) (max 0 ((fstS t) + (sndS t) - n))))) (zipD localLen sHere) sHere:: Dist Int sHere = fstS $ scanD theGang (+) 0 localLen localLen:: Dist Int localLen = splitLengthD theGang xs -}