sources/minipool.h (24 lines of code) (raw):
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#pragma once
typedef struct minipool {
struct minipool *_Nullable next;
char *_Nullable bytes;
char *_Nullable current;
uint32_t available;
} minipool;
#define MINIBLOCK (1024*64)
cql_noexport void minipool_open(minipool *_Nullable *_Nonnull pool);
cql_noexport void minipool_close(minipool *_Nullable *_Nonnull pool);
cql_noexport void *_Nonnull minipool_alloc(minipool *_Nonnull pool, uint32_t needed);
// lazy free service for misc pool contents
typedef struct lazy_free {
struct lazy_free *_Nullable next;
void *_Nullable context;
void (*_Nonnull teardown)(void *_Nullable context);
} lazy_free;
cql_noexport void add_lazy_free(lazy_free *_Nonnull p);
cql_noexport void run_lazy_frees(void);
#define _pool_new(p, x) ((x*)minipool_alloc(p, (int32_t)sizeof(x)))
#define _pool_new_array(p, x, c) ((x*)minipool_alloc(p, c*(int32_t)sizeof(x)))
#define _ast_pool_new(x) _pool_new(ast_pool, x)
#define _ast_pool_new_array(x, c) _pool_new_array(ast_pool, x, c)
cql_data_decl( minipool *_Nullable ast_pool );
cql_data_decl( minipool *_Nullable str_pool );