clr-host-0.1.0.0: src/Clr/Host/DotNet/Variant.hs
{-# LANGUAGE CPP #-}
module Clr.Host.DotNet.Variant where
import Data.Word
import Foreign.Ptr
import Foreign.Storable
data Variant = Variant VarType Word64 deriving (Show, Eq)
type VarType = Word16
varType_Empty, varType_UI1 :: VarType
varType_Empty = 0
varType_UI1 = 17
emptyVariant = Variant varType_Empty 0
instance Storable Variant where
#if x86_64_HOST_ARCH
sizeOf _ = 24
#else
sizeOf _ = 16
#endif
alignment _ = 8
peek ptr = do
a <- peek $ plusPtr ptr 0
b <- peek $ plusPtr ptr 8
return $ Variant a b
poke ptr (Variant a b) = do
poke (plusPtr ptr 0) a
poke (plusPtr ptr 2) (0 :: Word16)
poke (plusPtr ptr 4) (0 :: Word16)
poke (plusPtr ptr 6) (0 :: Word16)
poke (plusPtr ptr 8) b