16 pool->
memory = (
char *)malloc(size);
37 static size_t align_up(
size_t n,
size_t align) {
38 return (n + align - 1) & ~(align - 1);
42 if (!pool || !pool->
memory || size == 0) {
48 if (pool->
used + size > pool->
size) {
59 if (!pool || !pool->
memory || size == 0) {
64 if (align & (align - 1)) {
72 size_t misalignment = pool->
used & (align - 1);
73 size_t padding = (misalignment == 0) ? 0 : (align - misalignment);
75 if (pool->
used + padding + size > pool->
size) {
79 pool->
used += padding;
99 len = (int)strlen(str);
107 memcpy(copy, str, len);
120 return pool ? pool->
used : 0;
char * ck_tokenizer_mempool_strndup(CKTokenizerMemPool *pool, const char *str, int len)
char * ck_tokenizer_mempool_strdup(CKTokenizerMemPool *pool, const char *str)
static size_t align_up(size_t n, size_t align)
void ck_tokenizer_mempool_reset(CKTokenizerMemPool *pool)
void * ck_tokenizer_mempool_alloc_aligned(CKTokenizerMemPool *pool, size_t size, size_t align)
int ck_tokenizer_mempool_init(CKTokenizerMemPool *pool, size_t size)
size_t ck_tokenizer_mempool_available(CKTokenizerMemPool *pool)
size_t ck_tokenizer_mempool_used(CKTokenizerMemPool *pool)
void ck_tokenizer_mempool_free(CKTokenizerMemPool *pool)
void * ck_tokenizer_mempool_alloc(CKTokenizerMemPool *pool, size_t size)
#define CK_TOKENIZER_POOL_DEFAULT_SIZE