#include "fusion-phases.h"
module Data.Array.Parallel.PArray.PData.Word8 where
import Data.Array.Parallel.PArray.PData.Base
import Data.Array.Parallel.Pretty
import Data.Word
import qualified Data.Typeable as T
import qualified Data.Array.Parallel.Unlifted as U
import qualified Data.Vector as V
import Prelude as P
data instance PData Word8
= PWord8 (U.Array Word8)
data instance PDatas Word8
= PWord8s (U.Arrays Word8)
instance PR Word8 where
validPR _
= True
nfPR (PWord8 xx)
= xx `seq` ()
similarPR = (==)
coversPR weak (PWord8 uarr) ix
| weak = ix <= U.length uarr
| otherwise = ix < U.length uarr
pprpPR i
= int (fromIntegral i)
pprpDataPR (PWord8 uarr)
= text "PWord8" <+> pprp uarr
typeRepPR x
= T.typeOf x
typeRepDataPR _
= T.typeOf (5 :: Word8)
typeRepDatasPR _
= T.typeOf (5 :: Word8)
emptyPR
= PWord8 U.empty
replicatePR len x
= PWord8 (U.replicate len x)
replicatesPR segd (PWord8 arr)
= PWord8 (U.replicate_s segd arr)
appendPR (PWord8 arr1) (PWord8 arr2)
= PWord8 $ arr1 U.+:+ arr2
appendvsPR segdResult segd1 (PWord8s arr1) segd2 (PWord8s arr2)
= PWord8 $ U.append_vs segdResult segd1 arr1 segd2 arr2
lengthPR (PWord8 uarr)
= U.length uarr
indexPR (PWord8 uarr) ix
= U.index "indexPR[Word8]" uarr ix
indexsPR (PWord8s pvecs) srcixs
= PWord8 $ U.map (\(src, ix) -> U.unsafeIndex2s pvecs src ix) srcixs
indexvsPR (PWord8s arrs) vsegd srcixs
= PWord8 $ U.indexs_avs arrs vsegd srcixs
extractPR (PWord8 arr) start len
= PWord8 (U.extract arr start len)
extractssPR (PWord8s arrs) ssegd
= PWord8 $ U.extracts_ass ssegd arrs
extractvsPR (PWord8s arrs) vsegd
= PWord8 $ U.extracts_avs vsegd arrs
packByTagPR (PWord8 arr1) arrTags tag
= PWord8 $ U.packByTag arr1 arrTags tag
combine2PR sel (PWord8 arr1) (PWord8 arr2)
= PWord8 $ U.combine2 (U.tagsSel2 sel)
(U.repSel2 sel)
arr1 arr2
fromVectorPR xx
= PWord8 $U.fromList $ V.toList xx
toVectorPR (PWord8 arr)
= V.fromList $ U.toList arr
emptydPR
= PWord8s $ U.emptys
singletondPR (PWord8 pdata)
= PWord8s $ U.singletons pdata
lengthdPR (PWord8s arrs)
= U.lengths arrs
indexdPR (PWord8s arrs) ix
= PWord8 $ arrs `U.unsafeIndexs` ix
appenddPR (PWord8s xs) (PWord8s ys)
= PWord8s $ xs `U.appends` ys
fromVectordPR pdatas
= PWord8s
$ U.fromVectors
$ V.map (\(PWord8 xs) -> xs) pdatas
toVectordPR (PWord8s vec)
= V.map PWord8 $ U.toVectors vec
deriving instance Show (PData Word8)
deriving instance Show (PDatas Word8)
instance PprPhysical (U.Array Word8) where
pprp uarr
= text (show $ U.toList uarr)
instance PprVirtual (PData Word8) where
pprv (PWord8 vec)
= text (show $ U.toList vec)