packages feed

clr-host-0.1.0.0: src/Clr/Host/DotNet/Guid.hs

module Clr.Host.DotNet.Guid where

import Data.Word
import Foreign.Ptr
import Foreign.Storable

data Guid = Guid Word32 Word16 Word16 Word8 Word8 Word8 Word8 Word8 Word8 Word8 Word8
  deriving (Show, Eq)

instance Storable Guid where
  sizeOf    _ = 16
  alignment _ = 4

  peek guidPtr = do
    a  <- peek $ plusPtr guidPtr 0
    b  <- peek $ plusPtr guidPtr 4
    c  <- peek $ plusPtr guidPtr 6
    d0 <- peek $ plusPtr guidPtr 8
    d1 <- peek $ plusPtr guidPtr 9
    d2 <- peek $ plusPtr guidPtr 10
    d3 <- peek $ plusPtr guidPtr 11
    d4 <- peek $ plusPtr guidPtr 12
    d5 <- peek $ plusPtr guidPtr 13
    d6 <- peek $ plusPtr guidPtr 14
    d7 <- peek $ plusPtr guidPtr 15
    return $ Guid a b c d0 d1 d2 d3 d4 d5 d6 d7

  poke guidPtr (Guid a b c d0 d1 d2 d3 d4 d5 d6 d7) = do
    poke (plusPtr guidPtr 0)  a
    poke (plusPtr guidPtr 4)  b
    poke (plusPtr guidPtr 6)  c
    poke (plusPtr guidPtr 8)  d0
    poke (plusPtr guidPtr 9)  d1
    poke (plusPtr guidPtr 10) d2
    poke (plusPtr guidPtr 11) d3
    poke (plusPtr guidPtr 12) d4
    poke (plusPtr guidPtr 13) d5
    poke (plusPtr guidPtr 14) d6
    poke (plusPtr guidPtr 15) d7

type CLSID    = Guid
type IID      = Guid