64 #define MEMORY_POOL_HTODB(_header_, _block_size_) ((void *)_header_ - _block_size_) 69 #define MEMORY_POOL_DBTOH(_data_block_, _block_size_) ((memory_pool_block_header_t *)(_data_block_ + _block_size_)) 72 #define NODE_MAGIC 0xBAADA555 101 printf(
"ERROR: memory_pool_init: unable to malloc memory_pool_t. OOM\n");
106 for( n = 0; n < count; ++n ) {
109 printf(
"*** DEBUG:\tinside for loop, count is: %d\t***\n", n);
114 block = (
void *) malloc (total_size);
124 header->
size = block_size;
126 printf(
"MEMORY_POOL: i=%d, data=%p, header=%p, block_size=%zu, next=%p\n",
137 printf(
"memory_pool_init: mp=%p, count=%zu, block_size=%zu\n", mp, count, block_size);
149 return n == count ? mp : NULL;
157 printf(
"ERROR: memory_pool_destroy: nothing to destroy.\n");
161 printf(
"memory_pool_destroy: mp=%p, pool=%p, count=%zu, available=%zu, block_size=%zu\n",
173 for(
int n = 0; n < mp->
available; ++n ) {
175 printf(
"memory_pool_destroy: freeing non-aquired data block # %d\n", n+1);
190 printf(
"memory_pool_destroy: freeing aquired data block # %d\n", n+1);
192 if(mp->
shadow[n] != NULL) {
216 if(mp->
pool == NULL) {
217 printf(
"ERROR: memory_pool_acquire: nothing to aquire.\n");
231 header->
inuse =
true;
236 mp->
shadow[slot] == header;
241 printf(
"memory_pool_acquire: mp=%p, data=%p\n", mp, data);
258 printf(
"memory_pool_release: data=%p, header=%p, block_size=%zu, next=%p\n",
259 data, header, header->
size, header->
next);
269 header->
inuse =
false;
296 printf(
"ERROR: memory_pool_available: memory pool invalid\n");
313 printf(
"ERROR: memory_pool_dump: memory pool invalid\n");
317 printf(
"memory_pool_dump: mp = %p, count=%zu, available=%zu, block_size=%zu\n",
326 for(
int n = 0; n < mp->
available; ++n ) {
331 printf(
" + block: i=%d, data=%p, header=%p, inuse=%s, block_size=%zu, next=%p\n",
335 header->
inuse ?
"TRUE":
"FALSE",
339 header = header->
next;
struct memory_pool_block_header * pool
size_t memory_pool_available(memory_pool_t *mp)
memory pool availability function
bool memory_pool_release(memory_pool_t *mp, void *data)
memory pool push function
struct memory_pool_block_header memory_pool_block_header_t
type alias for global namespace
#define MEMORY_POOL_DBTOH(_data_block_, _block_size_)
memory_pool_t * memory_pool_init(size_t count, size_t block_size)
memory pool initializer
void * memory_pool_acquire(memory_pool_t *mp)
memory pool pop function
void memory_pool_dump(memory_pool_t *mp)
memory pool dump function
#define MEMORY_POOL_HTODB(_header_, _block_size_)
bool memory_pool_destroy(memory_pool_t *mp)