From da4de1c56005ca30b2ecc1217c6facb2ada8773c Mon Sep 17 00:00:00 2001 From: Ivar Fatland Date: Tue, 31 Mar 2026 22:00:09 +0200 Subject: [PATCH] some progress or whatever (still WIP) --- cig.h | 4 ++++ map.c | 25 ++++++++++++++++++++----- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/cig.h b/cig.h index 732a0cb..097fefe 100644 --- a/cig.h +++ b/cig.h @@ -15,6 +15,10 @@ typedef union any_align { char c; int i; long l; long long ll; float f; double d #define MB (KB * KB) #define GB (KB * KB * KB) #define PTR_FROM_FIELD_PTR(STRUCT, FIELD, PTR) ((STRUCT *) (((char *) PTR) - offsetof(STRUCT, FIELD))) +#define TODO(...) do { \ + fprintf(stderr, "%s:%d: TODO: %s", __FILE__, (int)__LINE__, #__VA_ARGS__);\ + exit(1); \ +} while (0) // Contains all operations an allocator can do. Similar interface to sdtlibs // malloc, realloc and free. diff --git a/map.c b/map.c index 0d1c813..83d4310 100644 --- a/map.c +++ b/map.c @@ -74,17 +74,32 @@ void *map_grow_func(void *this, const char *file, int line) { header->itemsize ); header = allocator_resize_func(allocator, header, new_size.bytes, file, line); - // TODO!!! Overwrite the mapping arr with -1, then iterate through the - // items arr and find the hashes of the values to populate the mappings - // arr. - assert(false && "TODO"); - TODO + + TODO( + Overwrite the mapping arr with -1, then iterate through the items + arr and find the hashes of the values to populate the mappings + ); } header->n_items = new_size; return header->bytes; } +void map_shrink_func(void *this, const char *file, int line) { + if (map_len(this) <= 0) { + fprintf( + stderr, + "%s:%d: tried to shrink map of size 0.\n", + file, + line + ); + exit(1); + } + map_header_t *header = PTR_FROM_FIELD_PTR(map_header_t, bytes, this); + header->n_items--; + TODO(Hash the key at the removed item to find it in the mapping array, and set it to the gravestone value.); +} + int map_len(void *this) { if (this == NULL) { return 0;