refactor: update CMake configuration and add clang-format file
Some checks failed
CI / build (pull_request) Failing after 1m24s
Some checks failed
CI / build (pull_request) Failing after 1m24s
This commit is contained in:
@@ -7,59 +7,64 @@
|
||||
#define DYNAMIC_ARRAY_VERSION ((DYNAMIC_ARRAY_VERSION_MAJOR << 16) | (DYNAMIC_ARRAY_VERSION_MINOR << 8) | DYNAMIC_ARRAY_VERSION_BUILD)
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define DYNAMIC_ARRAY_DEFAULT_ARRAY_SIZE 10
|
||||
#define DYNAMIC_ARRAY_CAPACITY_FACTOR 2
|
||||
|
||||
|
||||
|
||||
// [ HEADER | ARRAY ELEMENTS ]
|
||||
// ↑
|
||||
// THIS IS THE POINTER RETURNED BY ALL MACROS
|
||||
typedef struct {
|
||||
void *value;
|
||||
size_t element_size;
|
||||
|
||||
size_t size;
|
||||
size_t capacity;
|
||||
} Array;
|
||||
} ArrayHeader;
|
||||
|
||||
|
||||
typedef struct {
|
||||
int initial_size;
|
||||
size_t element_size;
|
||||
} ArrayCreateOptions;
|
||||
#define array_create(arr) \
|
||||
do { \
|
||||
ArrayHeader *header = malloc(sizeof(*arr) * DYNAMIC_ARRAY_DEFAULT_ARRAY_SIZE + sizeof(ArrayHeader)); \
|
||||
header->size = 0; \
|
||||
header->capacity = DYNAMIC_ARRAY_DEFAULT_ARRAY_SIZE; \
|
||||
\
|
||||
arr = (void *)(header + 1); \
|
||||
} while(0)
|
||||
|
||||
|
||||
#define DYNAMIC_ARRAY_DEFAULT_ARRAY_CREATE_OPTIONS \
|
||||
(ArrayCreateOptions){ DYNAMIC_ARRAY_DEFAULT_ARRAY_SIZE, sizeof(int) }
|
||||
|
||||
Array *array_create(const ArrayCreateOptions *options);
|
||||
#define array_get_header(arr) ((ArrayHeader*)(arr) - 1)
|
||||
|
||||
|
||||
void array_deconstructor(Array **pp_array);
|
||||
#define array_destroy(arr) \
|
||||
do { \
|
||||
free(array_get_header(arr)); \
|
||||
arr = NULL; \
|
||||
} while (0)
|
||||
|
||||
|
||||
void array_resize(Array *p_array, size_t new_size);
|
||||
#define array_push_value(arr, value) \
|
||||
do { \
|
||||
ArrayHeader *header = array_get_header(arr); \
|
||||
if (header->size + 1 > header->capacity) { \
|
||||
size_t new_capacity = header->capacity * DYNAMIC_ARRAY_CAPACITY_FACTOR; \
|
||||
ArrayHeader *new_header = realloc(header, sizeof(*arr) * new_capacity + sizeof(ArrayHeader)); \
|
||||
if (new_header != NULL) { \
|
||||
header = new_header; \
|
||||
} \
|
||||
header->capacity = new_capacity; \
|
||||
arr = (void *)(header + 1); \
|
||||
} \
|
||||
arr[header->size] = value; \
|
||||
header->size++; \
|
||||
} while (0)
|
||||
|
||||
|
||||
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)
|
||||
#define array_pop(arr) \
|
||||
do { \
|
||||
ArrayHeader *header = array_get_header(arr); \
|
||||
header->size--; \
|
||||
} while (0)
|
||||
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user