X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;ds=sidebyside;f=Foreign%2FStorable.hs;h=43fae6840628e2e3dc59caba2a3f37f3c87fb09a;hb=efc37fdab381c901c4957e3c94119b3e10385513;hp=e59e7e4c083c9dcb3117d3b2cc47019048a4cd5d;hpb=2d320b8078c867adaae49e46b204b1935d8653a1;p=ghc-base.git diff --git a/Foreign/Storable.hs b/Foreign/Storable.hs index e59e7e4..43fae68 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,11 @@ import GHC.Float import GHC.Err import GHC.IOBase import GHC.Base -#elif defined(__HUGS__) +#else +import Foreign.Ptr +#endif + +#ifdef __HUGS__ import Hugs.Storable #endif @@ -165,10 +167,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 +233,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)