dph-lifted-vseg-0.6.0.1: Data/Array/Parallel/PArray/PData/Word8.hs
{-# OPTIONS_HADDOCK hide #-}
{-# LANGUAGE CPP #-}
#include "fusion-phases.h"
-- | PR instance for Word8.
module Data.Array.Parallel.PArray.PData.Word8 where
import Data.Array.Parallel.PArray.PData.Base
import qualified Data.Array.Parallel.Unlifted as U
import qualified Data.Vector as V
import Text.PrettyPrint
import Prelude as P
import Data.Word
import Data.Array.Parallel.Pretty
-------------------------------------------------------------------------------
data instance PData Word8
= PWord8 (U.Array Word8)
data instance PDatas Word8
= PWord8s (U.Arrays Word8)
-- PR -------------------------------------------------------------------------
instance PR Word8 where
{-# NOINLINE validPR #-}
validPR _
= True
{-# NOINLINE nfPR #-}
nfPR (PWord8 xx)
= xx `seq` ()
{-# NOINLINE similarPR #-}
similarPR = (==)
{-# NOINLINE coversPR #-}
coversPR weak (PWord8 uarr) ix
| weak = ix <= U.length uarr
| otherwise = ix < U.length uarr
{-# NOINLINE pprpPR #-}
pprpPR i
= int (fromIntegral i)
{-# NOINLINE pprpDataPR #-}
pprpDataPR (PWord8 uarr)
= text "PWord8" <+> pprp uarr
-- Constructors -------------------------------
{-# INLINE_PDATA emptyPR #-}
emptyPR
= PWord8 U.empty
{-# INLINE_PDATA replicatePR #-}
replicatePR len x
= PWord8 (U.replicate len x)
{-# INLINE_PDATA replicatesPR #-}
replicatesPR segd (PWord8 arr)
= PWord8 (U.replicate_s segd arr)
{-# INLINE_PDATA appendPR #-}
appendPR (PWord8 arr1) (PWord8 arr2)
= PWord8 $ arr1 U.+:+ arr2
{-# INLINE_PDATA appendsPR #-}
appendsPR segdResult segd1 (PWord8 arr1) segd2 (PWord8 arr2)
= PWord8 $ U.append_s segdResult segd1 arr1 segd2 arr2
-- Projections --------------------------------
{-# INLINE_PDATA lengthPR #-}
lengthPR (PWord8 uarr)
= U.length uarr
{-# INLINE_PDATA indexPR #-}
indexPR (PWord8 uarr) ix
= U.index "indexPR[Word8]" uarr ix
{-# INLINE_PDATA indexsPR #-}
indexsPR (PWord8s pvecs) srcixs
= PWord8 $ U.map (\(src, ix) -> U.unsafeIndex2s pvecs src ix) srcixs
{-# INLINE_PDATA indexvsPR #-}
indexvsPR (PWord8s arrs) vsegd srcixs
= PWord8 $ U.indexs_avs arrs vsegd srcixs
{-# INLINE_PDATA extractPR #-}
extractPR (PWord8 arr) start len
= PWord8 (U.extract arr start len)
{-# INLINE_PDATA extractssPR #-}
extractssPR (PWord8s arrs) ssegd
= PWord8 $ U.extracts_ass ssegd arrs
{-# INLINE_PDATA extractvsPR #-}
extractvsPR (PWord8s arrs) vsegd
= PWord8 $ U.extracts_avs vsegd arrs
-- Pack and Combine ---------------------------
{-# INLINE_PDATA packByTagPR #-}
packByTagPR (PWord8 arr1) arrTags tag
= PWord8 $ U.packByTag arr1 arrTags tag
{-# INLINE_PDATA combine2PR #-}
combine2PR sel (PWord8 arr1) (PWord8 arr2)
= PWord8 $ U.combine2 (U.tagsSel2 sel)
(U.repSel2 sel)
arr1 arr2
-- Conversions --------------------------------
{-# NOINLINE fromVectorPR #-}
fromVectorPR xx
= PWord8 $U.fromList $ V.toList xx
{-# NOINLINE toVectorPR #-}
toVectorPR (PWord8 arr)
= V.fromList $ U.toList arr
-- PDatas -------------------------------------
{-# INLINE_PDATA emptydPR #-}
emptydPR
= PWord8s $ U.emptys
{-# INLINE_PDATA singletondPR #-}
singletondPR (PWord8 pdata)
= PWord8s $ U.singletons pdata
{-# INLINE_PDATA lengthdPR #-}
lengthdPR (PWord8s arrs)
= U.lengths arrs
{-# INLINE_PDATA indexdPR #-}
indexdPR (PWord8s arrs) ix
= PWord8 $ arrs `U.unsafeIndexs` ix
{-# INLINE_PDATA appenddPR #-}
appenddPR (PWord8s xs) (PWord8s ys)
= PWord8s $ xs `U.appends` ys
{-# NOINLINE fromVectordPR #-}
fromVectordPR pdatas
= PWord8s
$ U.fromVectors
$ V.map (\(PWord8 xs) -> xs) pdatas
{-# NOINLINE toVectordPR #-}
toVectordPR (PWord8s vec)
= V.map PWord8 $ U.toVectors vec
-- Show -----------------------------------------------------------------------
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)