1#ifndef __H__MISC_FREELIST__
2#define __H__MISC_FREELIST__
6#define FREELIST_LEDGER_INVALID_BLOCK (~(u32)0)
14} _freelist_ledger_block_t;
47 _freelist_ledger_block_t *blk =
50 if (blk->start - last_block_end <= size) {
51 _freelist_ledger_block_t new_blk;
52 new_blk.start = last_block_end;
53 new_blk.end = blk->start;
60 _freelist_ledger_block_t new_blk;
61 new_blk.start = last_block_end;
62 new_blk.end = last_block_end + size;
75 _freelist_ledger_block_t *blk =
78 if (blk->start == at) {
84 "Attempt to release block at %d, possibly a member of block %d", at,
#define ASSERT(expr, msg,...)
Definition defs.h:35
#define ASSERT__(expr)
Definition defs.h:21
size_t sz
Definition defs.h:51
uint32_t u32
Definition defs.h:45
static freelist_ledger_t ledger
Definition freelist.c:5
#define FREELIST_LEDGER_INVALID_BLOCK
Definition freelist.h:6
u32 freelist_ledger_ptr_t
Definition freelist.h:8
#define list_get_ty_ptr(ty, ls, idx)
Definition list.h:128
#define list_init_ty(ty, ls, alloc)
Definition list.h:36
static void list_cleanup(list_t *ls)
Definition list.h:166
#define list_push_var(ls, var)
Definition list.h:83
static void list_insert(list_t *ls, sz idx, const void *data)
Definition list.h:90
A generic allocator type passed by value. Contains a fallback allocator and a set of function pointer...
Definition memory.h:30
An object that implements malloc-like behaviour without specifying the exact internal object being ma...
Definition freelist.h:22
u32 capacity
The maximum amount of slots managed by the ledger. Errors out if reached.
Definition freelist.h:28
static void freelist_ledger_release(freelist_ledger_t *ledger, freelist_ledger_ptr_t at)
Returns the block back into the pool.
Definition freelist.h:72
list_t _blocks
The blocks that were reserved. Contrary to the name, this list stores the busy blocks,...
Definition freelist.h:25
static void freelist_ledger_init(freelist_ledger_t *ledger, allocator_t allocator, u32 capacity)
Definition freelist.h:32
static freelist_ledger_ptr_t freelist_ledger_reserve(freelist_ledger_t *ledger, u32 size)
Reserves the next block from the ledger. Returns FREELIST_LEDGER_INVALID_BLOCK if the requested block...
Definition freelist.h:41
static void freelist_ledger_cleanup(freelist_ledger_t *ledger)
Definition freelist.h:90
sz size
Definition list.h:17