#ifndef RR_GENERIC_ALLOCATOR_H #define RR_GENERIC_ALLOCATOR_H #include typedef struct rr_generic_allocator rr_generic_allocator_s; typedef struct rr_generic_pool rr_generic_pool_s; typedef struct rr_generic_arena rr_generic_arena_s; typedef rr_generic_arena_s (*rr_create_arena_fn) (usz_t capacity); typedef rr_generic_pool_s (*rr_create_pool_fn) (usz_t item_size, usz_t num_items); struct rr_generic_allocator { void * (*fn_alloc) (rr_generic_allocator_s *allocator, usz_t num_bytes); void (*fn_free) (rr_generic_allocator_s *allocator, void *block); void (*fn_destruct) (rr_generic_allocator_s *allocator); void *specifics; }; struct rr_generic_pool { void * (*fn_alloc) (rr_generic_pool_s *pool); void (*fn_free) (rr_generic_pool_s *pool, void *block); void (*fn_destruct) (rr_generic_pool_s *pool); usz_t (*fn_get_unit_size) (rr_generic_pool_s *pool); void *specifics; }; struct rr_generic_arena { void * (*fn_alloc) (rr_generic_arena_s *arena, usz_t num_bytes); void (*fn_destruct) (rr_generic_arena_s *arena); void *specifics; }; #endif // RR_GENERIC_ALLOCATOR_H