X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Foreign%2FStorable.hs;h=73a651d0ca26ebf81e4d381b9269df1db41e988d;hb=e500eb01d713b4a3080a669951ef23018f44ba3e;hp=e59e7e4c083c9dcb3117d3b2cc47019048a4cd5d;hpb=2d320b8078c867adaae49e46b204b1935d8653a1;p=ghc-base.git diff --git a/Foreign/Storable.hs b/Foreign/Storable.hs index e59e7e4..73a651d 100644 --- a/Foreign/Storable.hs +++ b/Foreign/Storable.hs @@ -30,11 +30,9 @@ module Foreign.Storable import Control.Monad ( liftM ) -import Foreign.Ptr -import Foreign.C.Types -import Foreign.C.TypesISO #include "MachDeps.h" +#include "config.h" #ifdef __GLASGOW_HASKELL__ import GHC.Storable @@ -48,7 +46,15 @@ import GHC.Float import GHC.Err import GHC.IOBase import GHC.Base -#elif defined(__HUGS__) +#else +import Data.Int +import Data.Word +import Foreign.Ptr +import Foreign.StablePtr +#endif + +#ifdef __HUGS__ +import Hugs.Prelude import Hugs.Storable #endif @@ -165,10 +171,10 @@ sizeOfPtr px x = sizeOf x -- System-dependent, but rather obvious instances instance Storable Bool where - sizeOf _ = sizeOf (undefined::CInt) - alignment _ = alignment (undefined::CInt) - peekElemOff p i = liftM (/= (0::CInt)) $ peekElemOff (castPtr p) i - pokeElemOff p i x = pokeElemOff (castPtr p) i (if x then 1 else 0::CInt) + sizeOf _ = sizeOf (undefined::HTYPE_INT) + alignment _ = alignment (undefined::HTYPE_INT) + peekElemOff p i = liftM (/= (0::HTYPE_INT)) $ peekElemOff (castPtr p) i + pokeElemOff p i x = pokeElemOff (castPtr p) i (if x then 1 else 0::HTYPE_INT) #define STORABLE(T,size,align,read,write) \ instance Storable (T) where { \ @@ -231,33 +237,3 @@ STORABLE(Int32,SIZEOF_INT32,ALIGNMENT_INT32, STORABLE(Int64,SIZEOF_INT64,ALIGNMENT_INT64, readInt64OffPtr,writeInt64OffPtr) - -#define NSTORABLE(T) \ -instance Storable T where { \ - sizeOf (T x) = sizeOf x ; \ - alignment (T x) = alignment x ; \ - peekElemOff a i = liftM T (peekElemOff (castPtr a) i) ; \ - pokeElemOff a i (T x) = pokeElemOff (castPtr a) i x } - -NSTORABLE(CChar) -NSTORABLE(CSChar) -NSTORABLE(CUChar) -NSTORABLE(CShort) -NSTORABLE(CUShort) -NSTORABLE(CInt) -NSTORABLE(CUInt) -NSTORABLE(CLong) -NSTORABLE(CULong) -#ifndef __HUGS__ -NSTORABLE(CLLong) -NSTORABLE(CULLong) -#endif -NSTORABLE(CFloat) -NSTORABLE(CDouble) -NSTORABLE(CLDouble) -NSTORABLE(CPtrdiff) -NSTORABLE(CSize) -NSTORABLE(CWchar) -NSTORABLE(CSigAtomic) -NSTORABLE(CClock) -NSTORABLE(CTime)