1#include "../include/dynarray.h"
13static inline size_t calculate_growth(
size_t current,
size_t element_size) {
22 if (new_capacity <= current) {
23 new_capacity = current + 1;
27 if (new_capacity > SIZE_MAX / element_size) {
35 if (arr == NULL || element_size == 0) {
39 if (initial_capacity == 0) {
44 if (initial_capacity > SIZE_MAX / element_size) {
48 void* data = malloc(element_size * initial_capacity);
56 .capacity = initial_capacity,
57 .element_size = element_size,
73 if (arr == NULL || element == NULL) {
80 if (new_capacity == 0) {
98 if (arr == NULL || arr->
size == 0) {
105 if (out_element != NULL) {
112 size_t new_capacity = arr->
capacity / DYNARRAY_GROWTH_DENOMINATOR;
125 if (arr == NULL || index >= arr->
size) {
132 if (arr == NULL || element == NULL || index >= arr->
size) {
136 unsigned char* dest = (
unsigned char*)arr->
data + (index * arr->
element_size);
148 if (new_capacity < arr->size) {
149 new_capacity = arr->
size;
153 if (new_capacity == arr->
capacity) {
163 if (new_data == NULL && new_capacity > 0) {
167 arr->
data = new_data;
bool dynarray_push(dynarray_t *arr, const void *element)
#define DYNARRAY_INITIAL_CAPACITY
bool dynarray_set(dynarray_t *arr, size_t index, const void *element)
bool dynarray_pop(dynarray_t *arr, void *out_element)
bool dynarray_shrink_to_fit(dynarray_t *arr)
void * dynarray_get(const dynarray_t *arr, size_t index)
bool dynarray_init(dynarray_t *arr, size_t element_size, size_t initial_capacity)
void dynarray_clear(dynarray_t *arr)
#define DYNARRAY_GROWTH_NUMERATOR
void dynarray_free(dynarray_t *arr)
#define DYNARRAY_SHRINK_THRESHOLD
bool dynarray_reserve(dynarray_t *arr, size_t new_capacity)