#include <blockbufferallocator.h>
Block buffer allocator. A fixed allocator which contains the size of the initialized memoryblock/size. The first memory request (and any Resize calls) that are smaller than this size will return this static memory. All other requests will be routed to the PARENT_ALLOCATOR. The BlockBufferAllocator is not thread-safe!
Here an example for the use of a BlockBufferAllocator:
In the example a BaseArray will use the guaranteed 1024 bytes from the stack / fixed allocator first. Only when the BaseArray grows bigger than 1024 characters more memory from the DefaultAllocator will be fetched. This is a convenient way to allow routines be flexible without (length) limits, but avoiding constant unnecessary memory allocations.
PARENT_ALLOCATOR | The allocator that shall be used when a request cannot be satisfied using the static memory. |
Public Member Functions | |
BlockBufferAllocator (void *memoryBuffer, Int memBlockSize) | |
BlockBufferAllocator (const BlockBufferAllocator &parent) | |
Int | ComputeArraySize (Int currentSize, Int increment, Int minChunkSize) |
void * | Alloc (Int32 s, MAXON_SOURCE_LOCATION_DECLARATION) |
void * | Alloc (Int64 s, MAXON_SOURCE_LOCATION_DECLARATION) |
void * | Realloc (void *p, Int32 n, MAXON_SOURCE_LOCATION_DECLARATION) |
void * | Realloc (void *p, Int64 n, MAXON_SOURCE_LOCATION_DECLARATION) |
template<typename T > | |
void | Free (T *&p) |
Bool | IsCompatibleWithDefaultAllocator (void *p) const |
Private Member Functions | |
BlockBufferAllocator () | |
Private Attributes | |
void * | _memoryBuffer |
Int | _memBlockSize |
Bool | _memoryUsed |
PARENT_ALLOCATOR | _allocator |
|
private |
Default constructor, disabled because the pointer and size is needed.
BlockBufferAllocator | ( | void * | memoryBuffer, |
Int | memBlockSize | ||
) |
Constructor, with the given memory block.
[in] | memoryBuffer | Pointer to memory that is mapped to the allocator. |
[in] | memBlockSize | Size of the memory block. |
|
explicit |
Copy constructor.
Computes the new size for a growing array THREADSAFE.
[in] | currentSize | Current number of elements. |
[in] | increment | Number of elements to be added (>= 1) |
[in] | minChunkSize | The minimum number of elements upon array creation. |
void* Alloc | ( | Int32 | s, |
MAXON_SOURCE_LOCATION_DECLARATION | |||
) |
Allocates a memory block. The memory is not cleared, it may contain a certain byte pattern in debug mode.
[in] | s | Block size in bytes (values < 0 will return nullptr) |
[in] | allocLocation | Pass MAXON_SOURCE_LOCATION(_NAME) to add the current source line and file. |
void* Alloc | ( | Int64 | s, |
MAXON_SOURCE_LOCATION_DECLARATION | |||
) |
Allocates a memory block. The memory is not cleared, it may contain a certain byte pattern in debug mode.
[in] | s | Block size in bytes (values < 0 will return nullptr) |
[in] | allocLocation | Pass MAXON_SOURCE_LOCATION(_NAME) to add the current source line and file. |
void* Realloc | ( | void * | p, |
Int32 | n, | ||
MAXON_SOURCE_LOCATION_DECLARATION | |||
) |
Resizes a memory block. The content of the memory block is preserved up to the lesser of the new and old sizes, even if the block is moved to a new location. The additional memory is not cleared, it may contain a certain byte pattern in debug mode. In case that p is a nullptr the function behaves like Alloc. If the function fails to allocate the requested block of memory a nullptr is returned and the memory block pointed to by argument p is not deallocated (it is still valid with its contents unchanged). THREADSAFE.
[in] | p | Current memory block (can be nullptr) |
[in] | n | New block size in bytes (values < 0 will return nullptr) |
[in] | allocLocation | Pass MAXON_SOURCE_LOCATION(_NAME) to add the current source line and file. |
void* Realloc | ( | void * | p, |
Int64 | n, | ||
MAXON_SOURCE_LOCATION_DECLARATION | |||
) |
Resizes a memory block. The content of the memory block is preserved up to the lesser of the new and old sizes, even if the block is moved to a new location. The additional memory is not cleared, it may contain a certain byte pattern in debug mode. In case that p is a nullptr the function behaves like Alloc. If the function fails to allocate the requested block of memory a nullptr is returned and the memory block pointed to by argument p is not deallocated (it is still valid with its contents unchanged). THREADSAFE.
[in] | p | Current memory block (can be nullptr) |
[in] | n | New block size in bytes (values < 0 will return nullptr) |
[in] | allocLocation | Pass MAXON_SOURCE_LOCATION(_NAME) to add the current source line and file. |
void Free | ( | T *& | p | ) |
Frees a memory block.
[in,out] | p | Memory block address (can be nullptr, will be nullptr after return) |
Bool IsCompatibleWithDefaultAllocator | ( | void * | p | ) | const |
Returns if a memory block allocated via this allocator can be reallocated or freed by the DefaultAllocator.
[in] | p | Memory block address. |
|
private |
|
private |
|
private |
|
private |