aboutsummaryrefslogtreecommitdiff
path: root/Array.c
diff options
context:
space:
mode:
Diffstat (limited to 'Array.c')
-rw-r--r--Array.c97
1 files changed, 0 insertions, 97 deletions
diff --git a/Array.c b/Array.c
deleted file mode 100644
index 6be8c1a..0000000
--- a/Array.c
+++ /dev/null
@@ -1,97 +0,0 @@
-#include "Array.h"
-#include "Types.h"
-#include "GlobalArena.h"
-#include <stdlib.h>
-#include <string.h>
-
-struct ArrayMeta {
- BumpArena b;
- usize element_size;
- usize count;
- usize length;
-};
-
-static inline struct ArrayMeta*
-A_metadata(void* arr) {
- return arr - sizeof(struct ArrayMeta);
-}
-
-typedef void* Array;
-
-Array
-A_new(BumpArena b, usize element_size, usize length) {
- if (NULL == b)
- return NULL;
-
- struct ArrayMeta am = {
- .b = b,
- .element_size = element_size,
- .count = 0,
- .length = length,
- };
-
- void* start = B_alloc(b, sizeof(am) + element_size * length);
- if (NULL == start)
- return NULL;
-
- memcpy(start, &am, sizeof(am));
- return start + sizeof(am);
-}
-
-usize
-A_length(Array arr) {
- if (NULL == arr)
- return 0;
- return A_metadata(arr)->length;
-}
-
-usize
-A_count(Array arr) {
- if (NULL == arr)
- return 0;
- return A_metadata(arr)->count;
-}
-
-Result
-A_push(Array arr, void *value) {
- if (NULL == arr)
- return R_Uninitialized;
-
- struct ArrayMeta *am = A_metadata(arr);
-
- if (am->count >= am->length) {
- if (!B_resizeable(am->b, arr))
- return R_OutOfBounds;
-
- RETURN_NOTOK(B_resize(am->b, sizeof(*am) + am->element_size * (am->length << 1)));
- am->length <<= 1;
- }
-
- memcpy(arr + am->count++ * am->element_size, value, am->element_size);
-
- return R_Ok;
-}
-
-Result
-A_ppush(Array arr, void *pvalue) {
- void* temp = pvalue;
- return A_push(arr, &temp);
-}
-
-void*
-A_pop(Array arr) {
- if (NULL == arr)
- return NULL;
-
- struct ArrayMeta *am = A_metadata(arr);
-
- if (am->count == 0)
- return NULL;
-
- return arr + am->element_size * --am->count;
-}
-
-Array
-AG_new(usize element_size, usize length) {
- return A_new(g_arena, element_size, length);
-}