module Data.Repa.Convert.Internal.Packable
( Packable (..)
, Unpackable (..))
where
import Data.Repa.Convert.Internal.Format
import Data.Repa.Convert.Internal.Packer
import Data.Repa.Convert.Internal.Unpacker
import Data.Word
import GHC.Exts
class Format format
=> Packable format where
pack :: format
-> Value format
-> Packer
pack format
format Value format
value
= (Addr# -> IO () -> (Addr# -> IO ()) -> IO ()) -> Packer
Packer (format
-> Value format -> Addr# -> IO () -> (Addr# -> IO ()) -> IO ()
forall format.
Packable format =>
format
-> Value format -> Addr# -> IO () -> (Addr# -> IO ()) -> IO ()
packer format
format Value format
value)
{-# INLINE pack #-}
packer :: format
-> Value format
-> Addr#
-> IO ()
-> (Addr# -> IO ())
-> IO ()
class Format format
=> Unpackable format where
unpack :: format
-> Unpacker (Value format)
unpack format
format
= (Addr#
-> Addr#
-> (Word8 -> Bool)
-> IO ()
-> (Addr# -> Value format -> IO ())
-> IO ())
-> Unpacker (Value format)
forall a.
(Addr#
-> Addr#
-> (Word8 -> Bool)
-> IO ()
-> (Addr# -> a -> IO ())
-> IO ())
-> Unpacker a
Unpacker (format
-> Addr#
-> Addr#
-> (Word8 -> Bool)
-> IO ()
-> (Addr# -> Value format -> IO ())
-> IO ()
forall format.
Unpackable format =>
format
-> Addr#
-> Addr#
-> (Word8 -> Bool)
-> IO ()
-> (Addr# -> Value format -> IO ())
-> IO ()
unpacker format
format)
{-# INLINE unpack #-}
unpacker :: format
-> Addr#
-> Addr#
-> (Word8 -> Bool)
-> IO ()
-> (Addr# -> Value format -> IO ())
-> IO ()