1 -----------------------------------------------------------------------------
2 -- $Id: Ptr.lhs,v 1.2 2001/12/21 15:07:25 simonmar Exp $
4 -- (c) The FFI Task Force, 2000
9 {-# OPTIONS -fno-implicit-prelude #-}
14 ------------------------------------------------------------------------
17 data Ptr a = Ptr Addr# deriving (Eq, Ord)
20 nullPtr = Ptr nullAddr#
22 castPtr :: Ptr a -> Ptr b
23 castPtr (Ptr addr) = Ptr addr
25 plusPtr :: Ptr a -> Int -> Ptr b
26 plusPtr (Ptr addr) (I# d) = Ptr (plusAddr# addr d)
28 alignPtr :: Ptr a -> Int -> Ptr a
29 alignPtr addr@(Ptr a) (I# i)
30 = case remAddr# a i of {
32 n -> Ptr (plusAddr# a (i -# n)) }
34 minusPtr :: Ptr a -> Ptr b -> Int
35 minusPtr (Ptr a1) (Ptr a2) = I# (minusAddr# a1 a2)
37 instance CCallable (Ptr a)
38 instance CReturnable (Ptr a)
40 ------------------------------------------------------------------------
41 -- Function pointers for the default calling convention.
43 data FunPtr a = FunPtr Addr# deriving (Eq, Ord)
45 nullFunPtr :: FunPtr a
46 nullFunPtr = FunPtr nullAddr#
48 castFunPtr :: FunPtr a -> FunPtr b
49 castFunPtr (FunPtr addr) = FunPtr addr
51 castFunPtrToPtr :: FunPtr a -> Ptr b
52 castFunPtrToPtr (FunPtr addr) = Ptr addr
54 castPtrToFunPtr :: Ptr a -> FunPtr b
55 castPtrToFunPtr (Ptr addr) = FunPtr addr
57 instance CCallable (FunPtr a)
58 instance CReturnable (FunPtr a)