summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarson Fleming <[email protected]>2026-01-25 02:43:47 -0500
committerCarson Fleming <[email protected]>2026-01-25 02:43:47 -0500
commiteaba8182af646204294546a10a84e8f8165ba589 (patch)
treede32c16221306a3f45679fd45046637b81c66529
parente72088d79804e4f689196f4bc700fb9348c77209 (diff)
downloadsafec-eaba8182af646204294546a10a84e8f8165ba589.tar.gz
properly generic
-rw-r--r--array.c11
-rw-r--r--array.h6
2 files changed, 10 insertions, 7 deletions
diff --git a/array.c b/array.c
index c941b05..c7df5b5 100644
--- a/array.c
+++ b/array.c
@@ -7,20 +7,23 @@
void array_set(array_t* array, size_t idx, void* val) {
CRASH_IF_OOB(array, idx);
- array->data[idx] = val;
+ char* data_ptr = (char*)array->__data + idx*array->elemsz;
+ for (size_t i = 0; i < array->elemsz; i++) {
+ data_ptr[i] = *((char*)val + i);
+ }
}
void* array_get(const array_t* array, size_t idx) {
CRASH_IF_OOB(array, idx);
- return array->data[idx];
+ return (char*)array->__data + idx*array->elemsz;
}
void str_set(str_t* str, size_t idx, char val) {
CRASH_IF_OOB(str, idx);
- str->data[idx] = val;
+ str->__data[idx] = val;
}
char str_get(const str_t* str, size_t idx) {
CRASH_IF_OOB(str, idx);
- return str->data[idx];
+ return str->__data[idx];
}
diff --git a/array.h b/array.h
index 848e1a7..2741ed0 100644
--- a/array.h
+++ b/array.h
@@ -2,10 +2,10 @@
#define __SAFEC_ARRAY_H
#include <stddef.h>
-/* TODO: it might be good to just have itemsz and char* data */
typedef struct {
size_t length;
- void** data;
+ size_t elemsz;
+ void* __data;
} array_t;
void array_set(array_t* array, size_t idx, void* val);
@@ -13,7 +13,7 @@ void* array_get(const array_t* array, size_t idx);
typedef struct {
size_t length;
- char* data;
+ char* __data;
} str_t;
void str_set(str_t* str, size_t idx, char val);