module Graphics.Image.Interface.Vector.Unboxed (
U, VU(..), VU.Unbox, Image(..), fromUnboxedVector, toUnboxedVector, fromIx, toIx, checkDims
) where
import Prelude hiding (map, zipWith)
#if !MIN_VERSION_base(4,8,0)
import Data.Functor
#endif
import qualified Data.Vector.Unboxed as VU
import Graphics.Image.Interface as I
import Graphics.Image.Interface.Vector.Generic
import Graphics.Image.Interface.Vector.Unboxing()
data VU = VU
data U
type instance Repr (V U) = VU.Vector
instance Show U where
show _ = "Unboxed"
instance Show VU where
show _ = "VectorUnboxed"
instance SuperClass VU cs e => BaseArray VU cs e where
type SuperClass VU cs e =
(ColorSpace cs e, Num (Pixel cs e), VU.Unbox (Components cs e))
data Image VU cs e = VUImage !(Image (V U) cs e)
dims (VUImage img) = dims img
instance (MArray VU cs e, BaseArray VU cs e) => Array VU cs e where
type Manifest VU = VU
makeImage !sh = VUImage . makeImage sh
makeImageWindowed !sh !window f g = VUImage $ makeImageWindowed sh window f g
singleton = VUImage . singleton
index00 (VUImage img) = index00 img
map f (VUImage img) = VUImage $ I.map f img
imap f (VUImage img) = VUImage $ I.imap f img
zipWith f (VUImage img1) (VUImage img2) = VUImage $ I.zipWith f img1 img2
izipWith f (VUImage img1) (VUImage img2) = VUImage $ I.izipWith f img1 img2
traverse (VUImage img) f g = VUImage $ I.traverse img f g
traverse2 (VUImage img1) (VUImage img2) f g = VUImage $ I.traverse2 img1 img2 f g
transpose (VUImage img) = VUImage $ I.transpose img
backpermute !sz f (VUImage img) = VUImage $ I.backpermute sz f img
fromLists = VUImage . I.fromLists
fold f !px0 (VUImage img) = fold f px0 img
foldIx f !px0 (VUImage img) = foldIx f px0 img
(|*|) (VUImage img1) (VUImage img2) = VUImage (img1 |*| img2)
eq (VUImage img1) (VUImage img2) = img1 == img2
compute (VUImage img) = VUImage $! compute img
toManifest = id
instance BaseArray VU cs e => MArray VU cs e where
data MImage s VU cs e = MVUImage (MImage s (V U) cs e)
unsafeIndex (VUImage img) = unsafeIndex img
deepSeqImage (VUImage img) = deepSeqImage img
foldl f !px0 (VUImage img) = I.foldl f px0 img
foldr f !px0 (VUImage img) = I.foldr f px0 img
makeImageM !sh f = VUImage <$> makeImageM sh f
mapM f (VUImage img) = VUImage <$> I.mapM f img
mapM_ f (VUImage img) = I.mapM_ f img
foldM f !px0 (VUImage img) = I.foldM f px0 img
foldM_ f !px0 (VUImage img) = I.foldM_ f px0 img
mdims (MVUImage mimg) = mdims mimg
thaw (VUImage img) = MVUImage <$> I.thaw img
freeze (MVUImage img) = VUImage <$> I.freeze img
new !ix = MVUImage <$> I.new ix
read (MVUImage img) = I.read img
write (MVUImage img) = I.write img
swap (MVUImage img) = I.swap img
toUnboxedVector :: Array VU cs e => Image VU cs e -> VU.Vector (Pixel cs e)
toUnboxedVector (VUImage img) = toVector img
fromUnboxedVector :: Array VU cs e => (Int, Int) -> VU.Vector (Pixel cs e) -> Image VU cs e
fromUnboxedVector !sz !v = VUImage $ fromVector sz v