Files
dynamic_array/src/dynamic_array.h

54 lines
1.0 KiB
C

#pragma once
#define DEFAULT_ARRAY_SIZE 10
typedef struct {
void *value;
size_t element_size;
size_t size;
size_t capacity;
} Array;
typedef struct {
int initial_size;
size_t element_size;
} ArrayCreateOptions;
#define DEFAULT_ARRAY_CREATE_OPTIONS \
(ArrayCreateOptions){ DEFAULT_ARRAY_SIZE, sizeof(int) }
Array *array_create(const ArrayCreateOptions *options);
void array_deconstructor(Array **pp_array);
void array_resize(Array *p_array, size_t new_size);
void *array_get_value(const Array *p_array, size_t index);
void array_set_value(Array *p_array, size_t index, const void *value);
size_t array_get_size(const Array *p_array);
size_t array_get_capacity(const Array *p_array);
#define array_get_value_as(type, arr, idx) \
(sizeof(type) == (arr)->element_size) ? \
(type*)array_get_value(arr, idx) : \
NULL
#define array_set_value_as(type, arr, idx, value) \
((sizeof(type) == (arr)->element_size) ? \
(array_set_value((arr), (idx), (value)), 0) : \
-1)