[project @ 1998-02-02 17:27:26 by simonm]
[ghc-hetmet.git] / ghc / lib / std / PrelAddr.lhs
1 %
2 % (c) The AQUA Project, Glasgow University, 1994-1996
3 %
4
5 \section[PrelAddr]{Module @PrelAddr@}
6
7 \begin{code}
8 {-# OPTIONS -fno-implicit-prelude #-}
9
10 module PrelAddr (
11         Addr(..), 
12         nullAddr,                       -- :: Addr
13         plusAddr,                       -- :: Addr -> Int -> Addr
14    ) where
15
16 import PrelGHC
17 import PrelBase
18 import PrelST
19 import PrelCCall
20 \end{code}
21
22 \begin{code}
23 data Addr = A# Addr#    deriving (Eq, Ord)
24
25 instance Show Addr where
26    showsPrec p (A# a) = showsPrec p (I# (addr2Int# a))
27
28 nullAddr = ``NULL'' :: Addr
29
30 plusAddr :: Addr -> Int -> Addr
31 plusAddr (A# addr) (I# off) = A# (int2Addr# (addr2Int# addr +# off))
32
33 instance CCallable Addr
34 instance CCallable Addr#
35 instance CReturnable Addr
36 \end{code}
37
38 ToDo:
39
40 -- read value out of _immutable_ memory
41       indexCharOffAddr   :: Addr -> Int -> Char
42       indexIntOffAddr    :: Addr -> Int -> Int     -- should we drop this?
43       indexAddrOffAddr   :: Addr -> Int -> Addr
44       indexFloatOffAddr  :: Addr -> Int -> Float
45       indexDoubleOffAddr :: Addr -> Int -> Double
46       indexWord8OffAddr  :: Addr -> Int -> Word8
47       indexWord16OffAddr :: Addr -> Int -> Word16
48       indexWord32OffAddr :: Addr -> Int -> Word32
49       indexWord64OffAddr :: Addr -> Int -> Word64
50       indexInt8OffAddr   :: Addr -> Int -> Int8
51       indexInt16OffAddr  :: Addr -> Int -> Int16
52       indexInt32OffAddr  :: Addr -> Int -> Int32
53       indexInt64OffAddr  :: Addr -> Int -> Int64
54
55       -- read value out of mutable memory
56       readCharOffAddr    :: Addr -> Int -> IO Char
57       readIntOffAddr     :: Addr -> Int -> IO Int  -- should we drop this?
58       readAddrOffAddr    :: Addr -> Int -> IO Addr
59       readFloatOffAddr   :: Addr -> Int -> IO Float
60       readDoubleOffAddr  :: Addr -> Int -> IO Double
61       readWord8OffAddr   :: Addr -> Int -> IO Word8
62       readWord16OffAddr  :: Addr -> Int -> IO Word16
63       readWord32OffAddr  :: Addr -> Int -> IO Word32
64       readWord64OffAddr  :: Addr -> Int -> IO Word64
65       readInt8OffAddr    :: Addr -> Int -> IO Int8
66       readInt16OffAddr   :: Addr -> Int -> IO Int16
67       readInt32OffAddr   :: Addr -> Int -> IO Int32
68       readInt64OffAddr   :: Addr -> Int -> IO Int64
69
70       -- write value into mutable memory
71       writeCharOffAddr   :: Addr -> Int -> Char   -> IO ()
72       writeIntOffAddr    :: Addr -> Int -> Int    -> IO ()  -- should we drop this?
73       writeAddrOffAddr   :: Addr -> Int -> Addr   -> IO ()
74       writeFloatOffAddr  :: Addr -> Int -> Float  -> IO ()
75       writeDoubleOffAddr :: Addr -> Int -> Double -> IO ()
76       writeWord8OffAddr  :: Addr -> Int -> Word8  -> IO ()
77       writeWord16OffAddr :: Addr -> Int -> Word16 -> IO ()
78       writeWord32OffAddr :: Addr -> Int -> Word32 -> IO ()
79       writeWord64OffAddr :: Addr -> Int -> Word64 -> IO ()
80       writeInt8OffAddr   :: Addr -> Int -> Int8   -> IO ()
81       writeInt16OffAddr  :: Addr -> Int -> Int16  -> IO ()
82       writeInt32OffAddr  :: Addr -> Int -> Int32  -> IO ()
83       writeInt64OffAddr  :: Addr -> Int -> Int64  -> IO ()
84