[Dummy ForeignPtr
Einar Karttunen <ekarttun@cs.helsinki.fi>**20060508181538] hunk ./lib/base/Foreign/ForeignPtr.hs 2
-module Foreign.ForeignPtr where
+module Foreign.ForeignPtr
+    (ForeignPtr, newForeignPtr_, newForeignPtr,
+     addForeignPtrFinalizer, mallocForeignPtr, mallocForeignPtrBytes,
+     withForeignPtr, unsafeForeignPtrToPtr, touchForeignPtr, castForeignPtr
+    ) where
+
+import Control.Monad
+import Foreign.Marshal.Alloc
+import Foreign.Marshal.Array
+import Foreign.Ptr
+import Foreign.Storable
+
+newtype ForeignPtr a = FP (Ptr a)
+type FinalizerPtr  a = Ptr a
+
+newForeignPtr_ :: Ptr a -> IO (ForeignPtr a)
+newForeignPtr_ = return . FP
+
+newForeignPtr :: FinalizerPtr a -> Ptr a -> IO (ForeignPtr a)
+newForeignPtr finalizer ptr = do
+    fp <- newForeignPtr_ ptr
+    addForeignPtrFinalizer finalizer fp
+    return fp
+
+
+-- newForeignPtrEnv :: FinalizerEnvPtr env a -> Ptr env -> Ptr a -> IO (ForeignPtr a)
+addForeignPtrFinalizer :: FinalizerPtr a -> ForeignPtr a -> IO ()
+addForeignPtrFinalizer _ _ = return ()
+
+-- addForeignPtrFinalizerEnv :: FinalizerEnvPtr env a -> Ptr env -> ForeignPtr a -> IO ()
+
+mallocForeignPtr :: Storable a => IO (ForeignPtr a)
+mallocForeignPtr = liftM FP malloc
+
+mallocForeignPtrBytes :: Int -> IO (ForeignPtr a)
+mallocForeignPtrBytes = liftM FP . mallocBytes
+
+mallocForeignPtrArray  :: Storable a => Int -> IO (ForeignPtr a)
+mallocForeignPtrArray = liftM FP . mallocArray
+
+-- mallocForeignPtrArray0 :: Storable a => Int -> IO (ForeignPtr a)
+-- mallocForeignPtrArray0 = liftM FP . mallocArray0
+
+withForeignPtr :: ForeignPtr a -> (Ptr a -> IO b) -> IO b
+withForeignPtr (FP p) act = act p
+
+unsafeForeignPtrToPtr :: ForeignPtr a -> Ptr a
+unsafeForeignPtrToPtr (FP x) = x
+
+touchForeignPtr :: ForeignPtr a -> IO ()
+touchForeignPtr _ = return ()
+
+castForeignPtr :: ForeignPtr a -> ForeignPtr b
+castForeignPtr (FP x) = FP $ castPtr x