module Graphics.Image.Interface.Repa.Unboxed (
RSU(..), RPU(..), Image(..)
) where
import qualified Data.Array.Repa as R
import qualified Data.Array.Repa.Eval as R
import Data.Typeable (Typeable)
import Prelude as P
import Graphics.Image.Interface as I
import Graphics.Image.Interface.Repa.Generic
import qualified Graphics.Image.Interface.Vector.Unboxed as IVU
data RSU = RSU deriving Typeable
data RPU = RPU deriving Typeable
instance Show RSU where
show _ = "RepaSequentialUnboxed"
instance Show RPU where
show _ = "RepaParallelUnboxed"
instance SuperClass RSU cs e => BaseArray RSU cs e where
type SuperClass RSU cs e =
(ColorSpace cs e,
R.Elt e, R.Elt (Pixel cs e))
newtype Image RSU cs e = SUImage (RImage R.U (Pixel cs e))
dims (SUImage img) = dimsR img
instance (BaseArray RSU cs e) => Array RSU cs e where
type Manifest RSU = IVU.VU
type Vector RSU = Vector IVU.VU
makeImage !sz f = SUImage (makeImageR sz f)
makeImageWindowed !sz !wIx !wSz f = SUImage . makeImageWindowedR sz wIx wSz f
scalar = SUImage . scalarR
index00 (SUImage img) = index00R img
map f (SUImage img) = SUImage (mapR f img)
imap f (SUImage img) = SUImage (imapR f img)
zipWith f (SUImage img1) (SUImage img2) = SUImage (zipWithR f img1 img2)
izipWith f (SUImage img1) (SUImage img2) = SUImage (izipWithR f img1 img2)
traverse (SUImage img) f g = SUImage (traverseR img f g)
traverse2 (SUImage img1) (SUImage img2) f g = SUImage (traverse2R img1 img2 f g)
transpose (SUImage img) = SUImage (transposeR img)
backpermute !sz g (SUImage img) = SUImage (backpermuteR sz g img)
fromLists = SUImage . fromListsR
fold f !px0 (SUImage img) = foldR Sequential f px0 img
foldIx f !px0 (SUImage img) = foldIxR Sequential f px0 img
eq (SUImage img1) (SUImage img2) = eqR Sequential img1 img2
compute (SUImage img) = SUImage (computeR Sequential img)
(|*|) (SUImage img1) (SUImage img2) = SUImage (multR Sequential img1 img2)
toManifest (SUImage img) = fromVector (dimsR img) (toVectorUnboxedR Sequential img)
toVector (SUImage img) = toVectorUnboxedR Sequential img
fromVector !sz = SUImage . fromVectorUnboxedR sz
instance SuperClass RPU cs e => BaseArray RPU cs e where
type SuperClass RPU cs e =
(ColorSpace cs e, R.Elt e, R.Elt (Pixel cs e))
newtype Image RPU cs e = PUImage (RImage R.U (Pixel cs e))
dims (PUImage img) = dimsR img
instance BaseArray RPU cs e => Array RPU cs e where
type Manifest RPU = IVU.VU
type Vector RPU = Vector IVU.VU
makeImage !sz f = PUImage (makeImageR sz f)
makeImageWindowed !sz !wIx !wSz f = PUImage . makeImageWindowedR sz wIx wSz f
scalar = PUImage . scalarR
index00 (PUImage img) = index00R img
map f (PUImage img) = PUImage (mapR f img)
imap f (PUImage img) = PUImage (imapR f img)
zipWith f (PUImage img1) (PUImage img2) = PUImage (zipWithR f img1 img2)
izipWith f (PUImage img1) (PUImage img2) = PUImage (izipWithR f img1 img2)
traverse (PUImage img) f g = PUImage (traverseR img f g)
traverse2 (PUImage img1) (PUImage img2) f g = PUImage (traverse2R img1 img2 f g)
transpose (PUImage img) = PUImage (transposeR img)
backpermute !sz g (PUImage img) = PUImage (backpermuteR sz g img)
fromLists = PUImage . fromListsR
fold f !px0 (PUImage img) = foldR Parallel f px0 img
foldIx f !px0 (PUImage img) = foldIxR Parallel f px0 img
eq (PUImage img1) (PUImage img2) = eqR Parallel img1 img2
compute (PUImage img) = PUImage (computeR Parallel img)
(|*|) (PUImage img1) (PUImage img2) = PUImage (multR Parallel img1 img2)
toManifest (PUImage img) = fromVector (dimsR img) (toVectorUnboxedR Parallel img)
toVector (PUImage img) = toVectorUnboxedR Parallel img
fromVector !sz = PUImage . fromVectorUnboxedR sz