SBgl 0.1.0
A graphics framework in C99
Loading...
Searching...
No Matches
sbl_arena.h File Reference

Arena allocator implementation. More...

#include <stddef.h>
#include <stdint.h>
#include <stdbool.h>
#include <string.h>
Include dependency graph for sbl_arena.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  SblArenaBlock
 A single block of memory in the arena. More...
 
struct  SblArena
 Arena allocator. More...
 
struct  SblArenaMark
 Bookmark for arena state. More...
 

Macros

#define SBL_ARENA_DEF
 
#define SBL_ARENA_PUSH_STRUCT(arena, type)
 
#define SBL_ARENA_PUSH_STRUCT_ZERO(arena, type)
 
#define SBL_ARENA_PUSH_ARRAY(arena, type, count)
 
#define SBL_ARENA_PUSH_ARRAY_ZERO(arena, type, count)
 
#define SBL_ARENA_PUSH_STRING(arena, str)
 
#define SBL_ARENA_MEMSET(dst, val, sz)
 
#define SBL_ARENA_MEMCPY(dst, src, sz)
 

Typedefs

typedef struct SblArenaBlock SblArenaBlock
 A single block of memory in the arena.
 
typedef struct SblArena SblArena
 Arena allocator.
 

Functions

SBL_ARENA_DEF bool sbl_arena_init (SblArena *arena, uint64_t initial_size)
 
SBL_ARENA_DEF void sbl_arena_free (SblArena *arena)
 
SBL_ARENA_DEF void * sbl_arena_alloc (SblArena *arena, uint64_t size)
 
SBL_ARENA_DEF void * sbl_arena_alloc_zero (SblArena *arena, uint64_t size)
 
SBL_ARENA_DEF void sbl_arena_reset (SblArena *arena)
 
SBL_ARENA_DEF SblArenaMark sbl_arena_mark (SblArena *arena)
 
SBL_ARENA_DEF void sbl_arena_rewind (SblArena *arena, SblArenaMark mark)
 
SBL_ARENA_DEF SblArenasbl_get_thread_arena (void)
 

Variables

__thread SblArena sbl_thread_arena
 
__thread int sbl_thread_arena_initialized
 

Detailed Description

Arena allocator implementation.

Definition in file sbl_arena.h.

Macro Definition Documentation

◆ SBL_ARENA_DEF

#define SBL_ARENA_DEF

Definition at line 14 of file sbl_arena.h.

◆ SBL_ARENA_MEMCPY

#define SBL_ARENA_MEMCPY ( dst,
src,
sz )
Value:
memcpy(dst, src, sz)

Definition at line 94 of file sbl_arena.h.

◆ SBL_ARENA_MEMSET

#define SBL_ARENA_MEMSET ( dst,
val,
sz )
Value:
memset(dst, val, sz)

Definition at line 89 of file sbl_arena.h.

◆ SBL_ARENA_PUSH_ARRAY

#define SBL_ARENA_PUSH_ARRAY ( arena,
type,
count )
Value:
((type*)sbl_arena_alloc((arena), sizeof(type) * (count)))
SBL_ARENA_DEF void * sbl_arena_alloc(SblArena *arena, uint64_t size)

Definition at line 21 of file sbl_arena.h.

21#define SBL_ARENA_PUSH_ARRAY(arena, type, count) \
22 ((type*)sbl_arena_alloc((arena), sizeof(type) * (count)))

◆ SBL_ARENA_PUSH_ARRAY_ZERO

#define SBL_ARENA_PUSH_ARRAY_ZERO ( arena,
type,
count )
Value:
((type*)sbl_arena_alloc_zero((arena), sizeof(type) * (count)))
SBL_ARENA_DEF void * sbl_arena_alloc_zero(SblArena *arena, uint64_t size)

Definition at line 23 of file sbl_arena.h.

23#define SBL_ARENA_PUSH_ARRAY_ZERO(arena, type, count) \
24 ((type*)sbl_arena_alloc_zero((arena), sizeof(type) * (count)))

◆ SBL_ARENA_PUSH_STRING

#define SBL_ARENA_PUSH_STRING ( arena,
str )
Value:
((char*)SBL_ARENA_MEMCPY(sbl_arena_alloc((arena), strlen(str) + 1), (str), strlen(str) + 1))
#define SBL_ARENA_MEMCPY(dst, src, sz)
Definition sbl_arena.h:94

Definition at line 26 of file sbl_arena.h.

26#define SBL_ARENA_PUSH_STRING(arena, str) \
27 ((char*)SBL_ARENA_MEMCPY(sbl_arena_alloc((arena), strlen(str) + 1), (str), strlen(str) + 1))

◆ SBL_ARENA_PUSH_STRUCT

#define SBL_ARENA_PUSH_STRUCT ( arena,
type )
Value:
((type*)sbl_arena_alloc((arena), sizeof(type)))

Definition at line 19 of file sbl_arena.h.

◆ SBL_ARENA_PUSH_STRUCT_ZERO

#define SBL_ARENA_PUSH_STRUCT_ZERO ( arena,
type )
Value:
((type*)sbl_arena_alloc_zero((arena), sizeof(type)))

Definition at line 20 of file sbl_arena.h.

Typedef Documentation

◆ SblArena

typedef struct SblArena SblArena

Arena allocator.

Manages a chain of memory blocks to provide linear allocations without individual free calls.

◆ SblArenaBlock

typedef struct SblArenaBlock SblArenaBlock

A single block of memory in the arena.

Function Documentation

◆ sbl_arena_alloc()

SBL_ARENA_DEF void * sbl_arena_alloc ( SblArena * arena,
uint64_t size )

◆ sbl_arena_alloc_zero()

SBL_ARENA_DEF void * sbl_arena_alloc_zero ( SblArena * arena,
uint64_t size )

◆ sbl_arena_free()

SBL_ARENA_DEF void sbl_arena_free ( SblArena * arena)

◆ sbl_arena_init()

SBL_ARENA_DEF bool sbl_arena_init ( SblArena * arena,
uint64_t initial_size )

◆ sbl_arena_mark()

SBL_ARENA_DEF SblArenaMark sbl_arena_mark ( SblArena * arena)

◆ sbl_arena_reset()

SBL_ARENA_DEF void sbl_arena_reset ( SblArena * arena)

◆ sbl_arena_rewind()

SBL_ARENA_DEF void sbl_arena_rewind ( SblArena * arena,
SblArenaMark mark )

◆ sbl_get_thread_arena()

SBL_ARENA_DEF SblArena * sbl_get_thread_arena ( void )

Variable Documentation

◆ sbl_thread_arena

__thread SblArena sbl_thread_arena
extern

◆ sbl_thread_arena_initialized

__thread int sbl_thread_arena_initialized
extern