diff options
| -rw-r--r-- | array.c | 11 | ||||
| -rw-r--r-- | array.h | 6 |
2 files changed, 10 insertions, 7 deletions
@@ -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]; } @@ -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); |
