(original) (raw)
{-# LANGUAGE Unsafe #-} {-# LANGUAGE NoImplicitPrelude #-} {-# OPTIONS_HADDOCK hide #-}
module Foreign.ForeignPtr.Imp (
[ForeignPtr](GHC.ForeignPtr.html#ForeignPtr)
, [FinalizerPtr](GHC.ForeignPtr.html#FinalizerPtr)
, [FinalizerEnvPtr](GHC.ForeignPtr.html#FinalizerEnvPtr)
, [newForeignPtr](Foreign.ForeignPtr.Imp.html#newForeignPtr)
, [newForeignPtr_](GHC.ForeignPtr.html#newForeignPtr%5F)
, [addForeignPtrFinalizer](GHC.ForeignPtr.html#addForeignPtrFinalizer)
, [newForeignPtrEnv](Foreign.ForeignPtr.Imp.html#newForeignPtrEnv)
, [addForeignPtrFinalizerEnv](GHC.ForeignPtr.html#addForeignPtrFinalizerEnv)
, [withForeignPtr](Foreign.ForeignPtr.Imp.html#withForeignPtr)
, [finalizeForeignPtr](GHC.ForeignPtr.html#finalizeForeignPtr)
, [unsafeForeignPtrToPtr](GHC.ForeignPtr.html#unsafeForeignPtrToPtr)
, [touchForeignPtr](GHC.ForeignPtr.html#touchForeignPtr)
, [castForeignPtr](GHC.ForeignPtr.html#castForeignPtr)
, [plusForeignPtr](GHC.ForeignPtr.html#plusForeignPtr)
, [mallocForeignPtr](GHC.ForeignPtr.html#mallocForeignPtr)
, [mallocForeignPtrBytes](GHC.ForeignPtr.html#mallocForeignPtrBytes)
, [mallocForeignPtrArray](Foreign.ForeignPtr.Imp.html#mallocForeignPtrArray)
, [mallocForeignPtrArray0](Foreign.ForeignPtr.Imp.html#mallocForeignPtrArray0)
)
where
import Foreign.Ptr import Foreign.Storable ( Storable(sizeOf) )
import GHC.Base import GHC.Num import GHC.ForeignPtr
newForeignPtr :: FinalizerPtr a -> Ptr a -> IO (ForeignPtr a)
newForeignPtr finalizer p = do fObj <- newForeignPtr_ p addForeignPtrFinalizer finalizer fObj return fObj
withForeignPtr :: ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr fo io = do r <- io (unsafeForeignPtrToPtr fo) touchForeignPtr fo return r
newForeignPtrEnv :: FinalizerEnvPtr env a -> Ptr env -> Ptr a -> IO (ForeignPtr a) newForeignPtrEnv finalizer env p = do fObj <- newForeignPtr_ p addForeignPtrFinalizerEnv finalizer env fObj return fObj
mallocForeignPtrArray :: Storable a => Int -> IO (ForeignPtr a) mallocForeignPtrArray = doMalloc undefined where doMalloc :: Storable b => b -> Int -> IO (ForeignPtr b) doMalloc dummy size = mallocForeignPtrBytes (size * sizeOf dummy)
mallocForeignPtrArray0 :: Storable a => Int -> IO (ForeignPtr a) mallocForeignPtrArray0 size = mallocForeignPtrArray (size + 1)