ucx/mempool.h

Fri, 05 Oct 2012 11:52:53 +0200

author
Mike Becker <universe@uap-core.de>
date
Fri, 05 Oct 2012 11:52:53 +0200
changeset 48
621a4430c404
parent 38
35f67a8ef875
child 50
ff194559eb41
permissions
-rw-r--r--

map can now load values from file into pooled memory

use with care when using a decoder that also allocates memory

olaf@13 1 /*
olaf@13 2 *
olaf@13 3 */
olaf@13 4
olaf@13 5 #ifndef MPOOL_H
olaf@13 6 #define MPOOL_H
olaf@13 7
universe@38 8 #include <stddef.h>
universe@38 9
olaf@13 10 #ifdef __cplusplus
olaf@13 11 extern "C" {
olaf@13 12 #endif
olaf@13 13
olaf@13 14 typedef void(*ucx_destructor)(void*);
olaf@13 15
olaf@13 16 typedef struct {
olaf@13 17 void **data;
olaf@13 18 size_t ndata;
olaf@13 19 size_t size;
olaf@13 20 } UcxMempool;
olaf@13 21
universe@48 22 typedef void*(*ucx_allocator_malloc)(UcxMempool *pool, size_t n);
universe@48 23 typedef void*(*ucx_allocator_calloc)(UcxMempool *pool, size_t n, size_t size);
universe@48 24 typedef void*(*ucx_allocator_realloc)(UcxMempool *pool, void *data, size_t n);
universe@48 25
universe@48 26 typedef struct {
universe@48 27 UcxMempool *pool;
universe@48 28 ucx_allocator_malloc malloc;
universe@48 29 ucx_allocator_calloc calloc;
universe@48 30 ucx_allocator_realloc realloc;
universe@48 31 } UcxAllocator;
universe@48 32
universe@48 33 #define UCX_ALLOCATOR_DEFAULT {NULL, \
universe@48 34 ucx_default_malloc, ucx_default_calloc, ucx_default_realloc}
universe@48 35 #define UCX_ALLOCATOR_MEMPOOL(pool) {pool, \
universe@48 36 ucx_mempool_malloc, ucx_mempool_calloc, ucx_mempool_realloc}
universe@48 37
universe@48 38 void *ucx_default_malloc(UcxMempool *ignore, size_t n);
universe@48 39 void *ucx_default_calloc(UcxMempool *ignore, size_t n, size_t size);
universe@48 40 void *ucx_default_realloc(UcxMempool *ignore, void *data, size_t n);
universe@48 41
olaf@13 42 #define ucx_mempool_new_default() ucx_mempool_new(16)
olaf@13 43 UcxMempool *ucx_mempool_new(size_t n);
universe@15 44 int ucx_mempool_chcap(UcxMempool *pool, size_t newcap);
olaf@13 45
olaf@13 46 void *ucx_mempool_malloc(UcxMempool *pool, size_t n);
olaf@13 47 void *ucx_mempool_calloc(UcxMempool *pool, size_t nelem, size_t elsize);
olaf@13 48 void *ucx_mempool_realloc(UcxMempool *pool, void *ptr, size_t n);
olaf@13 49
olaf@13 50 void ucx_mempool_free(UcxMempool *pool);
olaf@13 51
olaf@13 52 void ucx_mempool_set_destr(void *ptr, ucx_destructor func);
olaf@13 53 void ucx_mempool_reg_destr(UcxMempool *pool, void *ptr, ucx_destructor destr);
olaf@13 54
olaf@13 55
olaf@13 56 #ifdef __cplusplus
olaf@13 57 }
olaf@13 58 #endif
olaf@13 59
olaf@13 60 #endif /* MPOOL_H */
olaf@13 61

mercurial