Reduct  v4.0.5-1-g4851deb
A functional and immutable language.
Loading...
Searching...
No Matches
arena.h
Go to the documentation of this file.
1#ifndef REDUCT_ARENA_H
2#define REDUCT_ARENA_H 1
3
4#include <reduct/defs.h>
5
6#include <stddef.h>
7#include <stdint.h>
8
9/**
10 * @file arena.h
11 * @brief Arena allocation.
12 * @defgroup arena Arena
13 *
14 * @{
15 */
16
17#define REDUCT_ARENA_MIN 1024 ///< The minimum size of an arena in bytes.
18#define REDUCT_ARENA_GROWTH \
19 2 ///< The factor by which we increase the minimum size until the needed capacity is reached.
20
21/**
22 * @brief Arena structure.
23 * @struct reduct_arena_t
24 */
25typedef struct reduct_arena
26{
27 struct reduct_arena* next;
28 struct reduct_arena* prev;
29 size_t capacity;
30 size_t count;
31 void* data;
33
34/**
35 * @brief Arena chunk descriptor.
36 * @struct reduct_arena_chunk_t
37 */
38typedef struct
39{
41 size_t size;
42 void* data;
44
45/**
46 * @brief Create an arena chunk descriptor.
47 *
48 * @param arena Pointer to the arena the chunk belongs to.
49 * @param size The size of the chunk in bytes.
50 * @param data Pointer to the chunk data.
51 * @return An arena chunk descriptor.
52 */
53#define REDUCT_ARENA_CHUNK(_arena, _size, _data) ((reduct_arena_chunk_t){(_arena), (_size), (_data)})
54
55/**
56 * @brief Per-thread arena-related state structure.
57 * @struct reduct_arena_local_t
58 */
63
64/**
65 * @brief Initialize a local arena state.
66 *
67 * @param local Pointer to the local arena state to initialize.
68 */
70
71/**
72 * @brief Deinitialize a local arena state.
73 *
74 * @param local Pointer to the local arena state to deinitialize.
75 */
77
78/**
79 * @brief Allocate a chunk of memory from a arena.
80 *
81 * @param reduct Pointer to the Reduct structure.
82 * @param size The size of the chunk to allocate in bytes.
83 * @param out Pointer to store the allocated chunk descriptor.
84 */
85REDUCT_API void reduct_arena_alloc(struct reduct* reduct, size_t size, reduct_arena_chunk_t* out);
86
87/**
88 * @brief Allocate a super chunk that starts with the specified chunk.
89 *
90 * If the chunk is at the end of its arena and there is enough capacity, it will extend the existing allocation.
91 *
92 * @param reduct Pointer to the Reduct structure.
93 * @param size The size of the super chunk to allocate in bytes.
94 * @param chunk The description of the chunk to extend from.
95 * @param out Pointer to store the allocated super chunk information.
96 */
97REDUCT_API void reduct_arena_alloc_super(struct reduct* reduct, size_t size, reduct_arena_chunk_t* chunk,
99
100/** @} */
101
102#endif
#define REDUCT_API
Definition defs.h:24
REDUCT_API void reduct_arena_local_init(reduct_arena_local_t *local)
Initialize a local arena state.
REDUCT_API void reduct_arena_alloc(struct reduct *reduct, size_t size, reduct_arena_chunk_t *out)
Allocate a chunk of memory from a arena.
REDUCT_API void reduct_arena_alloc_super(struct reduct *reduct, size_t size, reduct_arena_chunk_t *chunk, reduct_arena_chunk_t *out)
Allocate a super chunk that starts with the specified chunk.
REDUCT_API void reduct_arena_local_deinit(reduct_arena_local_t *local)
Deinitialize a local arena state.
Arena chunk descriptor.
Definition arena.h:39
reduct_arena_t * arena
Definition arena.h:40
Per-thread arena-related state structure.
Definition arena.h:60
reduct_arena_t * current
Definition arena.h:61
Arena structure.
Definition arena.h:26
size_t count
Definition arena.h:30
struct reduct_arena * prev
Definition arena.h:28
struct reduct_arena * next
Definition arena.h:27
size_t capacity
Definition arena.h:29
void * data
Definition arena.h:31