module Data.Repa.Convert.Format.Fields where
import Data.Repa.Convert.Internal.Format
import Data.Repa.Convert.Internal.Packable
import Data.Repa.Scalar.Product
#include "repa-convert.h"
instance Format () where
type Value () = ()
fieldCount _ = 0
minSize _ = 0
fixedSize _ = return 0
packedSize _ _ = return 0
instance Packable () where
packer _f _v dst _fails k
= k dst
instance Unpackable () where
unpacker _f start _end _stop _fail eat
= eat start ()
instance (Format a, Format b)
=> Format (a :*: b) where
type Value (a :*: b)
= Value a :*: Value b
fieldCount (fa :*: fb)
= fieldCount fa + fieldCount fb
minSize (fa :*: fb)
= minSize fa + minSize fb
fixedSize (fa :*: fb)
= do sa <- fixedSize fa
sb <- fixedSize fb
return $ sa + sb
packedSize (fa :*: fb) (xa :*: xb)
= do sa <- packedSize fa xa
sb <- packedSize fb xb
return $ sa + sb