{-# LANGUAGE CPP, ForeignFunctionInterface #-} module SFML.System.Vector3 ( Vec3f(..) ) where import Foreign.C.Types import Foreign.Storable #include sizeFloat = #{size float} data Vec3f = Vec3f {-# UNPACK #-} !Float {-# UNPACK #-} !Float {-# UNPACK #-} !Float deriving Show instance Storable Vec3f where sizeOf _ = 3*sizeFloat alignment _ = alignment (undefined :: CFloat) peek ptr = do x <- fmap realToFrac (#{peek sfVector3f, x} ptr :: IO CFloat) y <- fmap realToFrac (#{peek sfVector3f, y} ptr :: IO CFloat) z <- fmap realToFrac (#{peek sfVector3f, z} ptr :: IO CFloat) return $ Vec3f x y z poke ptr (Vec3f x y z) = do #{poke sfVector3f, x} ptr (realToFrac x :: CFloat) #{poke sfVector3f, y} ptr (realToFrac y :: CFloat) #{poke sfVector3f, z} ptr (realToFrac z :: CFloat)