This commit is contained in:
2026-08-18 08:12:49 -05:00
parent b444f539af
commit 0ee2fe8874
5 changed files with 17 additions and 8 deletions
+2 -2
View File
@@ -1,5 +1,5 @@
CC = clang CC = zig cc
CFLAGS = -O2 -Wall -Wextra -Wno-c2x-extensions CFLAGS = -O2 -std=c23 #-Wall -Wextra -Wno-c2x-extensions
test_array: test_array:
$(CC) $(CFLAGS) -o test_array test_array.c libkeke_array.c $(CC) $(CFLAGS) -o test_array test_array.c libkeke_array.c
./test_array ./test_array
BIN
View File
Binary file not shown.
+12 -3
View File
@@ -27,8 +27,7 @@ KekeArray *keke_array_alloc(size_t initial_len, size_t type_size) {
array->type_size = type_size; array->type_size = type_size;
array->max_len = max_len; array->max_len = max_len;
array->content = malloc(max_len * type_size); array->content = calloc(max_len, type_size);
memset(array->content, 0, max_len * type_size);
return array; return array;
} }
@@ -37,7 +36,6 @@ void keke_array_free(KekeArray *array) {
free(array); free(array);
} }
void keke_array_set(KekeArray *array, size_t index, const void *value) { void keke_array_set(KekeArray *array, size_t index, const void *value) {
if(index >= array->max_len) { if(index >= array->max_len) {
array->content = realloc(array->content, (array->max_len << 1) * array->type_size); array->content = realloc(array->content, (array->max_len << 1) * array->type_size);
@@ -74,6 +72,11 @@ void keke_array_set_len(KekeArray *array, size_t new_len) {
} }
void keke_array_insert(KekeArray *array, size_t index, const void *value) { void keke_array_insert(KekeArray *array, size_t index, const void *value) {
if(array->len + 1 > array->max_len) {
array->content = realloc(array->content, (array->max_len << 1) * array->type_size);
memset(array->content + array->max_len * array->type_size, 0, array->max_len * array->type_size);
array->max_len <<= 1;
}
keke_array_set_len(array, array->len + 1); keke_array_set_len(array, array->len + 1);
memmove(array->content + ((index + 1) * array->type_size), array->content + (index * array->type_size), (array->len - index - 1) * array->type_size); memmove(array->content + ((index + 1) * array->type_size), array->content + (index * array->type_size), (array->len - index - 1) * array->type_size);
memcpy(array->content + index * array->type_size, value, array->type_size); memcpy(array->content + index * array->type_size, value, array->type_size);
@@ -98,6 +101,12 @@ void keke_array_delete(KekeArray *array, size_t index) {
memmove(array->content + (index * array->type_size), array->content + ((index + 1) * array->type_size), (array->len - index + 1) * array->type_size); memmove(array->content + (index * array->type_size), array->content + ((index + 1) * array->type_size), (array->len - index + 1) * array->type_size);
} }
void keke_array_swap_delete(KekeArray *array, size_t index) {
size_t new_len = array->len - 1;
keke_swap(ARRAY_GET(array, index), ARRAY_GET(array, new_len), array->type_size);
keke_array_set_len(array, new_len);
}
KekeArray *keke_array_yoink(KekeArray *array, size_t start_index, size_t len) { KekeArray *keke_array_yoink(KekeArray *array, size_t start_index, size_t len) {
if(start_index + len >= array->len) return NULL; if(start_index + len >= array->len) return NULL;
KekeArray *ret = keke_array_alloc(len, array->type_size); KekeArray *ret = keke_array_alloc(len, array->type_size);
+1 -1
View File
@@ -1,7 +1,7 @@
#include <stdint.h> #include <stdint.h>
#include "libkeke_symbol.h" #include "libkeke_symbol.h"
static KekeSymbol iota = KEKE_NULL_SYMBOL + 1; static _Atomic KekeSymbol iota = KEKE_NULL_SYMBOL + 1;
KekeSymbol keke_new_symbol() { KekeSymbol keke_new_symbol() {
return iota++; return iota++;