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