Veritable Lasagna
An Allocator & Data Structure Library for C.
Loading...
Searching...
No Matches
vl_arena.h
Go to the documentation of this file.
1
14#ifndef VL_ARENA_H
15#define VL_ARENA_H
16
17#include "vl_set.h"
18
19typedef vl_uintptr_t vl_arena_ptr;
20
21#ifdef VL_ARENA_NULL
22#undef VL_ARENA_NULL
23#endif
24
32#define VL_ARENA_NULL 0
33
41typedef struct vl_arena_node
42{
43 vl_arena_ptr offset;
44 vl_memsize_t size;
45} vl_arena_node;
46
83typedef struct
84{
85 vl_memory* data; // Block of memory.
86 vl_set freeSet; // set is ordered according to the offset of each free node.
87} vl_arena;
88
110VL_API void vlArenaInit(vl_arena* arena, vl_memsize_t initialSize);
111
130VL_API void vlArenaFree(vl_arena* arena);
131
153VL_API vl_arena* vlArenaNew(vl_memsize_t initialSize);
154
170VL_API void vlArenaDelete(vl_arena* arena);
171
190VL_API void vlArenaClear(vl_arena* arena);
191
219VL_API vl_arena* vlArenaClone(const vl_arena* src, vl_arena* dest);
220
242VL_API void vlArenaReserve(vl_arena* arena, vl_memsize_t numBytes);
243
268VL_API vl_arena_ptr vlArenaMemAlloc(vl_arena* arena, vl_memsize_t size);
269
299VL_API vl_arena_ptr vlArenaMemRealloc(vl_arena* arena, vl_arena_ptr ptr, vl_memsize_t size);
300
327VL_API void vlArenaMemFree(vl_arena* arena, vl_arena_ptr ptr);
328
353VL_API vl_arena_ptr vlArenaMemPrepend(vl_arena* arena, vl_arena_ptr dst, const void* src, vl_memsize_t length);
354
378VL_API vl_arena_ptr vlArenaMemAppend(vl_arena* arena, vl_arena_ptr dst, const void* src, vl_memsize_t length);
379
398VL_API vl_transient* vlArenaMemSample(vl_arena* arena, vl_arena_ptr ptr);
399
427VL_API vl_memsize_t vlArenaMemSize(vl_arena* arena, vl_arena_ptr ptr);
428
449VL_API vl_memsize_t vlArenaTotalCapacity(vl_arena* arena);
450
469VL_API vl_memsize_t vlArenaTotalFree(vl_arena* arena);
470
471#endif // VL_ARENA_H
VL_API vl_arena_ptr vlArenaMemAppend(vl_arena *arena, vl_arena_ptr dst, const void *src, vl_memsize_t length)
Copies a block of memory to the end of the specified arena allocation.
Definition vl_arena.c:332
VL_API void vlArenaMemFree(vl_arena *arena, vl_arena_ptr ptr)
Frees a memory block allocated in a vl_arena.
Definition vl_arena.c:292
VL_API vl_arena * vlArenaNew(vl_memsize_t initialSize)
Creates a new arena with the specified initial size.
Definition vl_arena.c:38
VL_API void vlArenaFree(vl_arena *arena)
Frees memory allocated by an arena instance.
Definition vl_arena.c:32
VL_API void vlArenaClear(vl_arena *arena)
Clears all the allocations in the given arena.
Definition vl_arena.c:51
VL_API void vlArenaInit(vl_arena *arena, vl_memsize_t initialSize)
Initializes the vl_arena structure with the given initial size.
Definition vl_arena.c:20
VL_API vl_memsize_t vlArenaTotalFree(vl_arena *arena)
Get the total amount of free memory in the arena.
Definition vl_arena.c:365
VL_API vl_arena_ptr vlArenaMemRealloc(vl_arena *arena, vl_arena_ptr ptr, vl_memsize_t size)
Reallocates memory for the given pointer in the given arena.
Definition vl_arena.c:229
VL_API vl_memsize_t vlArenaTotalCapacity(vl_arena *arena)
Get the total capacity of the arena.
Definition vl_arena.c:363
VL_API void vlArenaReserve(vl_arena *arena, vl_memsize_t numBytes)
Reserves storage in the underlying allocation of the given arena.
Definition vl_arena.c:140
VL_API vl_memsize_t vlArenaMemSize(vl_arena *arena, vl_arena_ptr ptr)
Get the size of a memory block allocated in a VL arena.
Definition vl_arena.c:358
VL_API vl_arena_ptr vlArenaMemPrepend(vl_arena *arena, vl_arena_ptr dst, const void *src, vl_memsize_t length)
Copies a block of memory to the beginning of the specified arena allocation.
Definition vl_arena.c:306
VL_API vl_arena_ptr vlArenaMemAlloc(vl_arena *arena, vl_memsize_t size)
Take memory from the given arena.
Definition vl_arena.c:162
VL_API vl_transient * vlArenaMemSample(vl_arena *arena, vl_arena_ptr ptr)
Sampling function that calculates a transient pointer into the specified arena.
Definition vl_arena.c:356
VL_API void vlArenaDelete(vl_arena *arena)
Deletes the given VL arena, freeing all allocated memory and the arena struct itself.
Definition vl_arena.c:45
VL_API vl_arena * vlArenaClone(const vl_arena *src, vl_arena *dest)
Clones the specified arena to another.
Definition vl_arena.c:62
vl_set freeSet
Definition vl_arena.h:86
vl_memory * data
Definition vl_arena.h:85
An arena allocator for efficient memory management.
Definition vl_arena.h:84
VL_MEMORY_T vl_memory
Definition vl_memory.h:108
VL_MEMORY_T vl_transient
Definition vl_memory.h:118
VL_UPTR_T vl_uintptr_t
Unsigned integer type suitable for expressing memory addresses.
Definition vl_numtypes.h:163
An ordered set.
Definition vl_set.h:72