solidc
Robust collection of general-purpose cross-platform C libraries and data structures designed for rapid and safe development in C
Loading...
Searching...
No Matches
dynarray.h
Go to the documentation of this file.
1
6#ifndef DYNARRAY_H
7#define DYNARRAY_H
8
9#ifdef __cplusplus
10extern "C" {
11#endif
12
13#include <stdbool.h> // for bool
14#include <stddef.h> // for size_t
15#include <stdint.h> // for SIZE_MAX
16
18#define DYNARRAY_GROWTH_NUMERATOR 3
19#define DYNARRAY_GROWTH_DENOMINATOR 2
20
22#define DYNARRAY_INITIAL_CAPACITY 8
23
25#define DYNARRAY_SHRINK_THRESHOLD 4
26
32typedef struct {
34 void* data;
36 size_t size;
38 size_t capacity;
42
51bool dynarray_init(dynarray_t* arr, size_t element_size, size_t initial_capacity);
52
58void dynarray_free(dynarray_t* arr);
59
67bool dynarray_push(dynarray_t* arr, const void* element);
68
76bool dynarray_pop(dynarray_t* arr, void* out_element);
77
85void* dynarray_get(const dynarray_t* arr, size_t index);
86
94bool dynarray_set(dynarray_t* arr, size_t index, const void* element);
95
103bool dynarray_reserve(dynarray_t* arr, size_t new_capacity);
104
112
118void dynarray_clear(dynarray_t* arr);
119
125static inline size_t dynarray_size(const dynarray_t* arr) { return arr ? arr->size : 0; }
126
132static inline size_t dynarray_capacity(const dynarray_t* arr) { return arr ? arr->capacity : 0; }
133
139static inline bool dynarray_is_empty(const dynarray_t* arr) { return arr == NULL || arr->size == 0; }
140
141#ifdef __cplusplus
142}
143#endif
144
145#endif // DYNARRAY_H
bool dynarray_push(dynarray_t *arr, const void *element)
Definition dynarray.c:72
bool dynarray_set(dynarray_t *arr, size_t index, const void *element)
Definition dynarray.c:131
bool dynarray_pop(dynarray_t *arr, void *out_element)
Definition dynarray.c:97
bool dynarray_shrink_to_fit(dynarray_t *arr)
Definition dynarray.c:173
void * dynarray_get(const dynarray_t *arr, size_t index)
Definition dynarray.c:124
bool dynarray_init(dynarray_t *arr, size_t element_size, size_t initial_capacity)
Definition dynarray.c:34
void dynarray_clear(dynarray_t *arr)
Definition dynarray.c:184
void dynarray_free(dynarray_t *arr)
Definition dynarray.c:63
bool dynarray_reserve(dynarray_t *arr, size_t new_capacity)
Definition dynarray.c:142
size_t size
Definition dynarray.h:36
size_t element_size
Definition dynarray.h:40
size_t capacity
Definition dynarray.h:38
void * data
Definition dynarray.h:34