Fri, 05 Oct 2012 11:52:53 +0200
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 |