[project @ 2002-08-03 19:32:16 by reid]
[ghc-base.git] / GHC / Storable.lhs
index 9a4e038..6bd932b 100644 (file)
@@ -2,21 +2,22 @@
 {-# OPTIONS -fno-implicit-prelude #-}
 -----------------------------------------------------------------------------
 -- |
--- Module      :  GHC.Storable
--- Copyright   :  (c) The FFI task force, 2000-2002
+-- Module      :  Foreign.Storable
+-- Copyright   :  (c) The FFI task force 2001
 -- License     :  see libraries/base/LICENSE
 -- 
 -- Maintainer  :  ffi@haskell.org
--- Stability   :  internal
--- Portability :  non-portable (GHC Extensions)
+-- Stability   :  provisional
+-- Portability :  portable
 --
--- The 'Storable' class.
+-- The module "Storable" provides most elementary support for
+-- marshalling and is part of the language-independent portion of the
+-- Foreign Function Interface (FFI), and will normally be imported via
+-- the "Foreign" module.
 --
 -----------------------------------------------------------------------------
 
-#include "MachDeps.h"
-
-module GHC.Storable
+module Foreign.Storable
        ( Storable(
             sizeOf,         -- :: a -> Int
             alignment,      -- :: a -> Int
@@ -35,16 +36,9 @@ import Foreign.C.Types
 import Foreign.C.TypesISO
 
 #ifdef __GLASGOW_HASKELL__
-import GHC.Stable      ( StablePtr )
-import GHC.Num
-import GHC.Int
-import GHC.Word
-import GHC.Stable
-import GHC.Ptr
-import GHC.Float
-import GHC.Err
-import GHC.IOBase
-import GHC.Base
+import GHC.Storable
+#elif defined(__HUGS__)
+import HugsStorable
 #endif
 \end{code}
 
@@ -178,8 +172,10 @@ STORABLE(Char,SIZEOF_INT32,ALIGNMENT_INT32,
 STORABLE(Int,SIZEOF_HSINT,ALIGNMENT_HSINT,
         readIntOffPtr,writeIntOffPtr)
 
+#ifdef __GLASGOW_HASKELL__
 STORABLE(Word,SIZEOF_HSWORD,ALIGNMENT_HSWORD,
         readWordOffPtr,writeWordOffPtr)
+#endif
 
 STORABLE((Ptr a),SIZEOF_HSPTR,ALIGNMENT_HSPTR,
         readPtrOffPtr,writePtrOffPtr)
@@ -248,111 +244,3 @@ NSTORABLE(CSigAtomic)
 NSTORABLE(CClock)
 NSTORABLE(CTime)
 \end{code}
-
-Helper functions
-
-\begin{code}
-#ifdef __GLASGOW_HASKELL__
-
-readWideCharOffPtr  :: Ptr Char          -> Int -> IO Char
-readIntOffPtr       :: Ptr Int           -> Int -> IO Int
-readWordOffPtr      :: Ptr Word          -> Int -> IO Word
-readPtrOffPtr       :: Ptr (Ptr a)       -> Int -> IO (Ptr a)
-readFunPtrOffPtr    :: Ptr (FunPtr a)    -> Int -> IO (FunPtr a)
-readFloatOffPtr     :: Ptr Float         -> Int -> IO Float
-readDoubleOffPtr    :: Ptr Double        -> Int -> IO Double
-readStablePtrOffPtr :: Ptr (StablePtr a) -> Int -> IO (StablePtr a)
-readInt8OffPtr      :: Ptr Int8          -> Int -> IO Int8
-readInt16OffPtr     :: Ptr Int16         -> Int -> IO Int16
-readInt32OffPtr     :: Ptr Int32         -> Int -> IO Int32
-readInt64OffPtr     :: Ptr Int64         -> Int -> IO Int64
-readWord8OffPtr     :: Ptr Word8         -> Int -> IO Word8
-readWord16OffPtr    :: Ptr Word16        -> Int -> IO Word16
-readWord32OffPtr    :: Ptr Word32        -> Int -> IO Word32
-readWord64OffPtr    :: Ptr Word64        -> Int -> IO Word64
-
-readWideCharOffPtr (Ptr a) (I# i)
-  = IO $ \s -> case readWideCharOffAddr# a i s  of (# s2, x #) -> (# s2, C# x #)
-readIntOffPtr (Ptr a) (I# i)
-  = IO $ \s -> case readIntOffAddr# a i s       of (# s2, x #) -> (# s2, I# x #)
-readWordOffPtr (Ptr a) (I# i)
-  = IO $ \s -> case readWordOffAddr# a i s      of (# s2, x #) -> (# s2, W# x #)
-readPtrOffPtr (Ptr a) (I# i)
-  = IO $ \s -> case readAddrOffAddr# a i s      of (# s2, x #) -> (# s2, Ptr x #)
-readFunPtrOffPtr (Ptr a) (I# i)
-  = IO $ \s -> case readAddrOffAddr# a i s      of (# s2, x #) -> (# s2, FunPtr x #)
-readFloatOffPtr (Ptr a) (I# i)
-  = IO $ \s -> case readFloatOffAddr# a i s     of (# s2, x #) -> (# s2, F# x #)
-readDoubleOffPtr (Ptr a) (I# i)
-  = IO $ \s -> case readDoubleOffAddr# a i s    of (# s2, x #) -> (# s2, D# x #)
-readStablePtrOffPtr (Ptr a) (I# i)
-  = IO $ \s -> case readStablePtrOffAddr# a i s of (# s2, x #) -> (# s2, StablePtr x #)
-readInt8OffPtr (Ptr a) (I# i)
-  = IO $ \s -> case readInt8OffAddr# a i s      of (# s2, x #) -> (# s2, I8# x #)
-readWord8OffPtr (Ptr a) (I# i)
-  = IO $ \s -> case readWord8OffAddr# a i s     of (# s2, x #) -> (# s2, W8# x #)
-readInt16OffPtr (Ptr a) (I# i)
-  = IO $ \s -> case readInt16OffAddr# a i s     of (# s2, x #) -> (# s2, I16# x #)
-readWord16OffPtr (Ptr a) (I# i)
-  = IO $ \s -> case readWord16OffAddr# a i s    of (# s2, x #) -> (# s2, W16# x #)
-readInt32OffPtr (Ptr a) (I# i)
-  = IO $ \s -> case readInt32OffAddr# a i s     of (# s2, x #) -> (# s2, I32# x #)
-readWord32OffPtr (Ptr a) (I# i)
-  = IO $ \s -> case readWord32OffAddr# a i s    of (# s2, x #) -> (# s2, W32# x #)
-readInt64OffPtr (Ptr a) (I# i)
-  = IO $ \s -> case readInt64OffAddr# a i s     of (# s2, x #) -> (# s2, I64# x #)
-readWord64OffPtr (Ptr a) (I# i)
-  = IO $ \s -> case readWord64OffAddr# a i s    of (# s2, x #) -> (# s2, W64# x #)
-
-writeWideCharOffPtr  :: Ptr Char          -> Int -> Char        -> IO ()
-writeIntOffPtr       :: Ptr Int           -> Int -> Int         -> IO ()
-writeWordOffPtr      :: Ptr Word          -> Int -> Word        -> IO ()
-writePtrOffPtr       :: Ptr (Ptr a)       -> Int -> Ptr a       -> IO ()
-writeFunPtrOffPtr    :: Ptr (FunPtr a)    -> Int -> FunPtr a    -> IO ()
-writeFloatOffPtr     :: Ptr Float         -> Int -> Float       -> IO ()
-writeDoubleOffPtr    :: Ptr Double        -> Int -> Double      -> IO ()
-writeStablePtrOffPtr :: Ptr (StablePtr a) -> Int -> StablePtr a -> IO ()
-writeInt8OffPtr      :: Ptr Int8          -> Int -> Int8        -> IO ()
-writeInt16OffPtr     :: Ptr Int16         -> Int -> Int16       -> IO ()
-writeInt32OffPtr     :: Ptr Int32         -> Int -> Int32       -> IO ()
-writeInt64OffPtr     :: Ptr Int64         -> Int -> Int64       -> IO ()
-writeWord8OffPtr     :: Ptr Word8         -> Int -> Word8       -> IO ()
-writeWord16OffPtr    :: Ptr Word16        -> Int -> Word16      -> IO ()
-writeWord32OffPtr    :: Ptr Word32        -> Int -> Word32      -> IO ()
-writeWord64OffPtr    :: Ptr Word64        -> Int -> Word64      -> IO ()
-
-writeWideCharOffPtr (Ptr a) (I# i) (C# x)
-  = IO $ \s -> case writeWideCharOffAddr# a i x s  of s2 -> (# s2, () #)
-writeIntOffPtr (Ptr a) (I# i) (I# x)
-  = IO $ \s -> case writeIntOffAddr# a i x s       of s2 -> (# s2, () #)
-writeWordOffPtr (Ptr a) (I# i) (W# x)
-  = IO $ \s -> case writeWordOffAddr# a i x s      of s2 -> (# s2, () #)
-writePtrOffPtr (Ptr a) (I# i) (Ptr x)
-  = IO $ \s -> case writeAddrOffAddr# a i x s      of s2 -> (# s2, () #)
-writeFunPtrOffPtr (Ptr a) (I# i) (FunPtr x)
-  = IO $ \s -> case writeAddrOffAddr# a i x s      of s2 -> (# s2, () #)
-writeFloatOffPtr (Ptr a) (I# i) (F# x)
-  = IO $ \s -> case writeFloatOffAddr# a i x s     of s2 -> (# s2, () #)
-writeDoubleOffPtr (Ptr a) (I# i) (D# x)
-  = IO $ \s -> case writeDoubleOffAddr# a i x s    of s2 -> (# s2, () #)
-writeStablePtrOffPtr (Ptr a) (I# i) (StablePtr x)
-  = IO $ \s -> case writeStablePtrOffAddr# a i x s of s2 -> (# s2 , () #)
-writeInt8OffPtr (Ptr a) (I# i) (I8# x)
-  = IO $ \s -> case writeInt8OffAddr# a i x s      of s2 -> (# s2, () #)
-writeWord8OffPtr (Ptr a) (I# i) (W8# x)
-  = IO $ \s -> case writeWord8OffAddr# a i x s     of s2 -> (# s2, () #)
-writeInt16OffPtr (Ptr a) (I# i) (I16# x)
-  = IO $ \s -> case writeInt16OffAddr# a i x s     of s2 -> (# s2, () #)
-writeWord16OffPtr (Ptr a) (I# i) (W16# x)
-  = IO $ \s -> case writeWord16OffAddr# a i x s    of s2 -> (# s2, () #)
-writeInt32OffPtr (Ptr a) (I# i) (I32# x)
-  = IO $ \s -> case writeInt32OffAddr# a i x s     of s2 -> (# s2, () #)
-writeWord32OffPtr (Ptr a) (I# i) (W32# x)
-  = IO $ \s -> case writeWord32OffAddr# a i x s    of s2 -> (# s2, () #)
-writeInt64OffPtr (Ptr a) (I# i) (I64# x)
-  = IO $ \s -> case writeInt64OffAddr# a i x s     of s2 -> (# s2, () #)
-writeWord64OffPtr (Ptr a) (I# i) (W64# x)
-  = IO $ \s -> case writeWord64OffAddr# a i x s    of s2 -> (# s2, () #)
-
-#endif /* __GLASGOW_HASKELL__ */
-\end{code}