{-# LANGUAGE MagicHash #-} module Basement.Types.Ptr ( Addr(..) , addrPlus , addrPlusSz , addrPlusCSz , Ptr(..) , ptrPlus , ptrPlusSz , ptrPlusCSz , castPtr ) where import Basement.Compat.Base import Basement.Compat.C.Types import Basement.Types.OffsetSize import GHC.Ptr import GHC.Prim import GHC.Types data Addr = Addr Addr# deriving (Addr -> Addr -> Bool (Addr -> Addr -> Bool) -> (Addr -> Addr -> Bool) -> Eq Addr forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: Addr -> Addr -> Bool $c/= :: Addr -> Addr -> Bool == :: Addr -> Addr -> Bool $c== :: Addr -> Addr -> Bool Eq,Eq Addr Eq Addr -> (Addr -> Addr -> Ordering) -> (Addr -> Addr -> Bool) -> (Addr -> Addr -> Bool) -> (Addr -> Addr -> Bool) -> (Addr -> Addr -> Bool) -> (Addr -> Addr -> Addr) -> (Addr -> Addr -> Addr) -> Ord Addr Addr -> Addr -> Bool Addr -> Addr -> Ordering Addr -> Addr -> Addr forall a. Eq a -> (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a min :: Addr -> Addr -> Addr $cmin :: Addr -> Addr -> Addr max :: Addr -> Addr -> Addr $cmax :: Addr -> Addr -> Addr >= :: Addr -> Addr -> Bool $c>= :: Addr -> Addr -> Bool > :: Addr -> Addr -> Bool $c> :: Addr -> Addr -> Bool <= :: Addr -> Addr -> Bool $c<= :: Addr -> Addr -> Bool < :: Addr -> Addr -> Bool $c< :: Addr -> Addr -> Bool compare :: Addr -> Addr -> Ordering $ccompare :: Addr -> Addr -> Ordering $cp1Ord :: Eq Addr Ord) addrPlus :: Addr -> Offset Word8 -> Addr addrPlus :: Addr -> Offset Word8 -> Addr addrPlus (Addr Addr# addr) (Offset (I# Int# i)) = Addr# -> Addr Addr (Addr# -> Int# -> Addr# plusAddr# Addr# addr Int# i) addrPlusSz :: Addr -> CountOf Word8 -> Addr addrPlusSz :: Addr -> CountOf Word8 -> Addr addrPlusSz (Addr Addr# addr) (CountOf (I# Int# i)) = Addr# -> Addr Addr (Addr# -> Int# -> Addr# plusAddr# Addr# addr Int# i) addrPlusCSz :: Addr -> CSize -> Addr addrPlusCSz :: Addr -> CSize -> Addr addrPlusCSz Addr addr = Addr -> CountOf Word8 -> Addr addrPlusSz Addr addr (CountOf Word8 -> Addr) -> (CSize -> CountOf Word8) -> CSize -> Addr forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . CSize -> CountOf Word8 sizeOfCSize ptrPlus :: Ptr a -> Offset Word8 -> Ptr a ptrPlus :: Ptr a -> Offset Word8 -> Ptr a ptrPlus (Ptr Addr# addr) (Offset (I# Int# i)) = Addr# -> Ptr a forall a. Addr# -> Ptr a Ptr (Addr# -> Int# -> Addr# plusAddr# Addr# addr Int# i) ptrPlusSz :: Ptr a -> CountOf Word8 -> Ptr a ptrPlusSz :: Ptr a -> CountOf Word8 -> Ptr a ptrPlusSz (Ptr Addr# addr) (CountOf (I# Int# i)) = Addr# -> Ptr a forall a. Addr# -> Ptr a Ptr (Addr# -> Int# -> Addr# plusAddr# Addr# addr Int# i) ptrPlusCSz :: Ptr a -> CSize -> Ptr a ptrPlusCSz :: Ptr a -> CSize -> Ptr a ptrPlusCSz Ptr a ptr = Ptr a -> CountOf Word8 -> Ptr a forall a. Ptr a -> CountOf Word8 -> Ptr a ptrPlusSz Ptr a ptr (CountOf Word8 -> Ptr a) -> (CSize -> CountOf Word8) -> CSize -> Ptr a forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . CSize -> CountOf Word8 sizeOfCSize