Veritable Lasagna
An Allocator & Data Structure Library for C.
Loading...
Searching...
No Matches
vl_arena.h
Go to the documentation of this file.
1#ifndef VL_ARENA_H
2#define VL_ARENA_H
3
4#include "vl_set.h"
5
7
8#ifdef VL_ARENA_NULL
9#undef VL_ARENA_NULL
10#endif
11
18#define VL_ARENA_NULL 0
19
26typedef struct vl_arena_node{
27 vl_arena_ptr offset;
28 vl_memsize_t size;
29} vl_arena_node;
30
57typedef struct{
58 vl_memory* data; //Block of memory.
59 vl_set freeSet; //set is ordered according to the offset of each free node.
60} vl_arena;
61
71void vlArenaInit(vl_arena* arena, vl_memsize_t initialSize);
72
78void vlArenaFree(vl_arena* arena);
79
89vl_arena* vlArenaNew(vl_memsize_t initialSize);
90
96void vlArenaDelete(vl_arena* arena);
97
106void vlArenaClear(vl_arena* arena);
107
108
123vl_arena* vlArenaClone(const vl_arena* src, vl_arena* dest);
124
134void vlArenaReserve(vl_arena* arena, vl_memsize_t numBytes);
135
149
166
182void vlArenaMemFree(vl_arena* arena, vl_arena_ptr ptr);
183
196vl_arena_ptr vlArenaMemPrepend(vl_arena* arena, vl_arena_ptr dst, const void* src, vl_memsize_t length);
197
210vl_arena_ptr vlArenaMemAppend(vl_arena* arena, vl_arena_ptr dst, const void* src, vl_memsize_t length);
211
219
237
249
259
260#endif //VL_ARENA_H
void vlArenaInit(vl_arena *arena, vl_memsize_t initialSize)
Initializes the vl_arena structure with the given initial size.
Definition vl_arena.c:18
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 end of the specified arena allocation.
Definition vl_arena.c:263
vl_arena * vlArenaClone(const vl_arena *src, vl_arena *dest)
Clones the specified arena to another.
Definition vl_arena.c:55
void vlArenaReserve(vl_arena *arena, vl_memsize_t numBytes)
Reserves storage in the underlying allocation of the given arena.
Definition vl_arena.c:114
void vlArenaClear(vl_arena *arena)
Clears all the elements in the given arena.
Definition vl_arena.c:45
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:309
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 beginning of the specified arena allocation.
Definition vl_arena.c:287
void vlArenaDelete(vl_arena *arena)
Deletes the given VL arena, freeing all allocated memory.
Definition vl_arena.c:40
vl_uintptr_t vl_arena_ptr
Definition vl_arena.h:6
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:196
void vlArenaFree(vl_arena *arena)
Frees memory allocated by an arena instance.
Definition vl_arena.c:29
void vlArenaMemFree(vl_arena *arena, vl_arena_ptr ptr)
Frees a memory block allocated in a vl_arena.
Definition vl_arena.c:253
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:313
vl_arena_ptr vlArenaMemAlloc(vl_arena *arena, vl_memsize_t size)
Take memory from the given arena.
Definition vl_arena.c:135
vl_memsize_t vlArenaTotalCapacity(vl_arena *arena)
Get the total capacity of the arena.
Definition vl_arena.c:317
vl_set freeSet
Definition vl_arena.h:59
vl_arena * vlArenaNew(vl_memsize_t initialSize)
Creates a new arena with the specified initial size.
Definition vl_arena.c:34
vl_memory * data
Definition vl_arena.h:58
vl_memsize_t vlArenaTotalFree(vl_arena *arena)
Get the total amount of free memory in the arena.
Definition vl_arena.c:321
An arena allocator.
Definition vl_arena.h:57
VL_MEMORY_SIZE_T vl_memsize_t
Definition vl_memory.h:18
VL_MEMORY_T vl_memory
Definition vl_memory.h:76
VL_MEMORY_T vl_transient
Definition vl_memory.h:85
VL_UPTR_T vl_uintptr_t
Unsigned integer type suitable for expressing memory addresses.
Definition vl_numtypes.h:101
An ordered set.
Definition vl_set.h:53