base-4.4.0.0: Basic libraries

Portabilityportable
Stabilityprovisional
Maintainersven.panne@aedion.de

Foreign.Marshal.Pool

Contents

Description

This module contains support for pooled memory management. Under this scheme, (re-)allocations belong to a given pool, and everything in a pool is deallocated when the pool itself is deallocated. This is useful when Foreign.Marshal.Alloc.alloca with its implicit allocation and deallocation is not flexible enough, but explicit uses of Foreign.Marshal.Alloc.malloc and free are too awkward.

Synopsis

Pool management

data Pool Source

A memory pool.

newPool :: IO PoolSource

Allocate a fresh memory pool.

freePool :: Pool -> IO ()Source

Deallocate a memory pool and everything which has been allocated in the pool itself.

withPool :: (Pool -> IO b) -> IO bSource

Execute an action with a fresh memory pool, which gets automatically deallocated (including its contents) after the action has finished.

(Re-)Allocation within a pool

pooledMalloc :: Storable a => Pool -> IO (Ptr a)Source

Allocate space for storable type in the given pool. The size of the area allocated is determined by the sizeOf method from the instance of Storable for the appropriate type.

pooledMallocBytes :: Pool -> Int -> IO (Ptr a)Source

Allocate the given number of bytes of storage in the pool.

pooledRealloc :: Storable a => Pool -> Ptr a -> IO (Ptr a)Source

Adjust the storage area for an element in the pool to the given size of the required type.

pooledReallocBytes :: Pool -> Ptr a -> Int -> IO (Ptr a)Source

Adjust the storage area for an element in the pool to the given size.

pooledMallocArray :: Storable a => Pool -> Int -> IO (Ptr a)Source

Allocate storage for the given number of elements of a storable type in the pool.

pooledMallocArray0 :: Storable a => Pool -> Int -> IO (Ptr a)Source

Allocate storage for the given number of elements of a storable type in the pool, but leave room for an extra element to signal the end of the array.

pooledReallocArray :: Storable a => Pool -> Ptr a -> Int -> IO (Ptr a)Source

Adjust the size of an array in the given pool.

pooledReallocArray0 :: Storable a => Pool -> Ptr a -> Int -> IO (Ptr a)Source

Adjust the size of an array with an end marker in the given pool.

Combined allocation and marshalling

pooledNew :: Storable a => Pool -> a -> IO (Ptr a)Source

Allocate storage for a value in the given pool and marshal the value into this storage.

pooledNewArray :: Storable a => Pool -> [a] -> IO (Ptr a)Source

Allocate consecutive storage for a list of values in the given pool and marshal these values into it.

pooledNewArray0 :: Storable a => Pool -> a -> [a] -> IO (Ptr a)Source

Allocate consecutive storage for a list of values in the given pool and marshal these values into it, terminating the end with the given marker.