#ifndef UCX_MEMPOOL_H
#define UCX_MEMPOOL_H
#include "ucx.h"
#include <stddef.h>
#include "allocator.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct {
UcxAllocator *allocator;
void **data;
size_t ndata;
size_t size;
} UcxMempool;
#define ucx_mempool_new_default() ucx_mempool_new(
16)
UcxMempool *ucx_mempool_new(
size_t n);
int ucx_mempool_chcap(UcxMempool *pool,
size_t newcap);
#define ucx_mempool_clamp(pool) ucx_mempool_chcap(pool, \
(pool->ndata & ~0xF)+0x10)
void *ucx_mempool_malloc(UcxMempool *pool,
size_t n);
void *ucx_mempool_calloc(UcxMempool *pool,
size_t nelem,
size_t elsize);
void *ucx_mempool_realloc(UcxMempool *pool,
void *ptr,
size_t n);
void ucx_mempool_free(UcxMempool *pool,
void *ptr);
void ucx_mempool_destroy(UcxMempool *pool);
void ucx_mempool_set_destr(
void *ptr, ucx_destructor func);
void ucx_mempool_reg_destr(UcxMempool *pool,
void *ptr, ucx_destructor destr);
#ifdef __cplusplus
}
#endif
#endif