guarded-allocation-0.0: src/Foreign/Marshal/Array/Guarded/Plain.hs
module Foreign.Marshal.Array.Guarded.Plain (
create,
alloca,
) where
import Foreign.Marshal.Array (allocaArray)
import Foreign.Storable (Storable)
import Foreign.ForeignPtr (ForeignPtr, withForeignPtr, mallocForeignPtrArray)
import Foreign.Ptr (Ptr)
import Control.Applicative ((<$>))
create :: (Storable a) => Int -> (Ptr a -> IO b) -> IO (ForeignPtr a, b)
create size f = do
fptr <- mallocForeignPtrArray size
(,) fptr <$> withForeignPtr fptr f
alloca :: (Storable a) => Int -> (Ptr a -> IO b) -> IO b
alloca = allocaArray