#include "fusion-phases.h"
module Data.Array.Parallel.PArray.PRepr.Tuple
( PRepr
, ziplPA)
where
import Data.Array.Parallel.PArray.Types
import Data.Array.Parallel.PArray.PRepr.Base
import Data.Array.Parallel.PArray.PData.Base
import Data.Array.Parallel.PArray.PData.Tuple2
import Data.Array.Parallel.PArray.PData.Tuple3
import Data.Array.Parallel.PArray.PData.Tuple4
import Data.Array.Parallel.PArray.PData.Tuple5
import Data.Array.Parallel.PArray.PData.Nested
import Data.Array.Parallel.PArray.PData.Wrap
type instance PRepr (a, b)
= (Wrap a, Wrap b)
instance (PA a, PA b) => PA (a, b) where
toPRepr (a, b)
= (Wrap a, Wrap b)
fromPRepr (Wrap a, Wrap b)
= (a, b)
toArrPRepr (PTuple2 as bs)
= PTuple2 (PWrap as) (PWrap bs)
fromArrPRepr (PTuple2 (PWrap as) (PWrap bs))
= PTuple2 as bs
toArrPReprs (PTuple2s as bs)
= PTuple2s (PWraps as) (PWraps bs)
fromArrPReprs (PTuple2s (PWraps as) (PWraps bs))
= PTuple2s as bs
ziplPA :: (PA a, PA b)
=> PData (PArray a) -> PData (PArray b) -> PData (PArray (a, b))
ziplPA xs ys
= let
PNested vsegd (PTuple2s xs' ys') segd _
= ziplPR (toNestedArrPRepr xs) (toNestedArrPRepr ys)
pdatas = PTuple2s (fromArrPReprs xs') (fromArrPReprs ys')
flat = fromArrPRepr $ extractvs_delay (toArrPReprs pdatas) vsegd
in PNested vsegd pdatas segd flat
type instance PRepr (a, b, c)
= (Wrap a, Wrap b, Wrap c)
instance (PA a, PA b, PA c) => PA (a, b, c) where
toPRepr (a, b, c)
= (Wrap a, Wrap b, Wrap c)
fromPRepr (Wrap a, Wrap b, Wrap c)
= (a, b, c)
toArrPRepr (PTuple3 as bs cs)
= PTuple3 (PWrap as) (PWrap bs) (PWrap cs)
fromArrPRepr (PTuple3 (PWrap as) (PWrap bs) (PWrap cs))
= PTuple3 as bs cs
toArrPReprs (PTuple3s as bs cs)
= PTuple3s (PWraps as) (PWraps bs) (PWraps cs)
fromArrPReprs (PTuple3s (PWraps as) (PWraps bs) (PWraps cs))
= PTuple3s as bs cs
type instance PRepr (a, b, c, d)
= (Wrap a, Wrap b, Wrap c, Wrap d)
instance (PA a, PA b, PA c, PA d) => PA (a, b, c, d) where
toPRepr (a, b, c, d)
= (Wrap a, Wrap b, Wrap c, Wrap d)
fromPRepr (Wrap a, Wrap b, Wrap c, Wrap d)
= (a, b, c, d)
toArrPRepr (PTuple4 as bs cs ds)
= PTuple4 (PWrap as) (PWrap bs) (PWrap cs) (PWrap ds)
fromArrPRepr (PTuple4 (PWrap as) (PWrap bs) (PWrap cs) (PWrap ds))
= PTuple4 as bs cs ds
toArrPReprs (PTuple4s as bs cs ds)
= PTuple4s (PWraps as) (PWraps bs) (PWraps cs) (PWraps ds)
fromArrPReprs (PTuple4s (PWraps as) (PWraps bs) (PWraps cs) (PWraps ds))
= PTuple4s as bs cs ds
type instance PRepr (a, b, c, d, e)
= (Wrap a, Wrap b, Wrap c, Wrap d, Wrap e)
instance (PA a, PA b, PA c, PA d, PA e) => PA (a, b, c, d, e) where
toPRepr (a, b, c, d, e)
= (Wrap a, Wrap b, Wrap c, Wrap d, Wrap e)
fromPRepr (Wrap a, Wrap b, Wrap c, Wrap d, Wrap e)
= (a, b, c, d, e)
toArrPRepr (PTuple5 as bs cs ds es)
= PTuple5 (PWrap as) (PWrap bs) (PWrap cs) (PWrap ds) (PWrap es)
fromArrPRepr (PTuple5 (PWrap as) (PWrap bs) (PWrap cs) (PWrap ds) (PWrap es))
= PTuple5 as bs cs ds es
toArrPReprs (PTuple5s as bs cs ds es)
= PTuple5s (PWraps as) (PWraps bs) (PWraps cs) (PWraps ds) (PWraps es)
fromArrPReprs (PTuple5s (PWraps as) (PWraps bs) (PWraps cs) (PWraps ds) (PWraps es))
= PTuple5s as bs cs ds es