Compare commits
1 Commits
a8cd5fb7a8
...
799c090f79
| Author | SHA1 | Date | |
|---|---|---|---|
|
799c090f79
|
@@ -6,7 +6,7 @@ UseTab: Never
|
|||||||
|
|
||||||
ColumnLimit: 100
|
ColumnLimit: 100
|
||||||
|
|
||||||
BreakBeforeBraces: Allman
|
BreakBeforeBraces: Attach
|
||||||
|
|
||||||
AllowShortIfStatementsOnASingleLine: false
|
AllowShortIfStatementsOnASingleLine: false
|
||||||
AllowShortFunctionsOnASingleLine: None
|
AllowShortFunctionsOnASingleLine: None
|
||||||
@@ -19,4 +19,4 @@ SortIncludes: true
|
|||||||
|
|
||||||
IndentCaseLabels: true
|
IndentCaseLabels: true
|
||||||
|
|
||||||
AlignEscapedNewlines: Left
|
AlignEscapedNewlines: Right
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
#ifndef DYNAMIC_ARRAY_H
|
#ifndef DYNAMIC_ARRAY_H
|
||||||
#define DYNAMIC_ARRAY_H
|
#define DYNAMIC_ARRAY_H
|
||||||
|
|
||||||
#define DYNAMIC_ARRAY_VERSION_MAJOR 0
|
#define DYNAMIC_ARRAY_VERSION_MAJOR 0
|
||||||
#define DYNAMIC_ARRAY_VERSION_MINOR 1
|
#define DYNAMIC_ARRAY_VERSION_MINOR 1
|
||||||
#define DYNAMIC_ARRAY_VERSION_BUILD 0
|
#define DYNAMIC_ARRAY_VERSION_BUILD 0
|
||||||
#define DYNAMIC_ARRAY_VERSION ((DYNAMIC_ARRAY_VERSION_MAJOR << 16) | (DYNAMIC_ARRAY_VERSION_MINOR << 8) | DYNAMIC_ARRAY_VERSION_BUILD)
|
#define DYNAMIC_ARRAY_VERSION \
|
||||||
|
((DYNAMIC_ARRAY_VERSION_MAJOR << 16) | (DYNAMIC_ARRAY_VERSION_MINOR << 8) | \
|
||||||
|
DYNAMIC_ARRAY_VERSION_BUILD)
|
||||||
|
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -12,8 +14,6 @@
|
|||||||
#define DYNAMIC_ARRAY_DEFAULT_ARRAY_SIZE 10
|
#define DYNAMIC_ARRAY_DEFAULT_ARRAY_SIZE 10
|
||||||
#define DYNAMIC_ARRAY_CAPACITY_FACTOR 2
|
#define DYNAMIC_ARRAY_CAPACITY_FACTOR 2
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// [ HEADER | ARRAY ELEMENTS ]
|
// [ HEADER | ARRAY ELEMENTS ]
|
||||||
// ↑
|
// ↑
|
||||||
// THIS IS THE POINTER RETURNED BY ALL MACROS
|
// THIS IS THE POINTER RETURNED BY ALL MACROS
|
||||||
@@ -22,52 +22,48 @@ typedef struct {
|
|||||||
size_t capacity;
|
size_t capacity;
|
||||||
} ArrayHeader;
|
} ArrayHeader;
|
||||||
|
|
||||||
|
#define array_create(arr) \
|
||||||
#define array_create(arr) \
|
do { \
|
||||||
do { \
|
ArrayHeader* header = \
|
||||||
ArrayHeader *header = malloc(sizeof(*arr) * DYNAMIC_ARRAY_DEFAULT_ARRAY_SIZE + sizeof(ArrayHeader)); \
|
malloc(sizeof(*arr) * DYNAMIC_ARRAY_DEFAULT_ARRAY_SIZE + sizeof(ArrayHeader)); \
|
||||||
header->size = 0; \
|
header->size = 0; \
|
||||||
header->capacity = DYNAMIC_ARRAY_DEFAULT_ARRAY_SIZE; \
|
header->capacity = DYNAMIC_ARRAY_DEFAULT_ARRAY_SIZE; \
|
||||||
\
|
\
|
||||||
arr = (void *)(header + 1); \
|
arr = (void*)(header + 1); \
|
||||||
} while(0)
|
} while (0)
|
||||||
|
|
||||||
|
|
||||||
#define array_get_header(arr) ((ArrayHeader*)(arr) - 1)
|
#define array_get_header(arr) ((ArrayHeader*)(arr) - 1)
|
||||||
|
|
||||||
|
#define array_destroy(arr) \
|
||||||
#define array_destroy(arr) \
|
do { \
|
||||||
do { \
|
free(array_get_header(arr)); \
|
||||||
free(array_get_header(arr)); \
|
arr = NULL; \
|
||||||
arr = NULL; \
|
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
#define array_push_value(arr, value) \
|
||||||
#define array_push_value(arr, value) \
|
do { \
|
||||||
do { \
|
ArrayHeader* header = array_get_header(arr); \
|
||||||
ArrayHeader *header = array_get_header(arr); \
|
if (header->size + 1 > header->capacity) { \
|
||||||
if (header->size + 1 > header->capacity) { \
|
size_t new_capacity = header->capacity * DYNAMIC_ARRAY_CAPACITY_FACTOR; \
|
||||||
size_t new_capacity = header->capacity * DYNAMIC_ARRAY_CAPACITY_FACTOR; \
|
ArrayHeader* new_header = \
|
||||||
ArrayHeader *new_header = realloc(header, sizeof(*arr) * new_capacity + sizeof(ArrayHeader)); \
|
realloc(header, sizeof(*arr) * new_capacity + sizeof(ArrayHeader)); \
|
||||||
if (new_header != NULL) { \
|
if (new_header != NULL) { \
|
||||||
header = new_header; \
|
header = new_header; \
|
||||||
} \
|
} \
|
||||||
header->capacity = new_capacity; \
|
header->capacity = new_capacity; \
|
||||||
arr = (void *)(header + 1); \
|
arr = (void*)(header + 1); \
|
||||||
} \
|
} \
|
||||||
arr[header->size] = value; \
|
arr[header->size] = value; \
|
||||||
header->size++; \
|
header->size++; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
#define array_pop(arr) \
|
||||||
#define array_pop(arr) \
|
do { \
|
||||||
do { \
|
ArrayHeader* header = array_get_header(arr); \
|
||||||
ArrayHeader *header = array_get_header(arr); \
|
if (header->size == 0) { \
|
||||||
if (header->size == 0) { \
|
break; \
|
||||||
break; \
|
} \
|
||||||
} \
|
header->size--; \
|
||||||
header->size--; \
|
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
Reference in New Issue
Block a user