#ifndef UCX_MEMPOOL_H
#define UCX_MEMPOOL_H
#include "common.h"
#include "allocator.h"
#ifdef __cplusplus
extern "C" {
#endif
struct cx_mempool_memory_s;
struct cx_mempool_s {
CxAllocator
const *allocator;
cx_destructor_func auto_destr;
struct cx_mempool_memory_s **data;
size_t size;
size_t capacity;
};
typedef struct cx_mempool_s CxMempool;
__attribute__((__warn_unused_result__))
CxMempool *cxMempoolCreate(
size_t capacity, cx_destructor_func destr);
__attribute__((__warn_unused_result__))
static inline CxMempool *cxBasicMempoolCreate(
size_t capacity) {
return cxMempoolCreate(capacity,
NULL);
}
__attribute__((__nonnull__))
void cxMempoolDestroy(CxMempool *pool);
__attribute__((__nonnull__))
void cxMempoolSetDestructor(
void *memory,
cx_destructor_func fnc
);
__attribute__((__nonnull__))
int cxMempoolRegister(
CxMempool *pool,
void *memory,
cx_destructor_func destr
);
#ifdef __cplusplus
}
#endif
#endif