From f34028a5e87093f3632d67a5fe8c4cf93e286d71 Mon Sep 17 00:00:00 2001 From: Greg Wells Date: Wed, 14 May 2025 11:23:53 -0400 Subject: [PATCH] write a c compatible list class --- src/utils/lists/gryphn_c_list.h | 49 +++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 src/utils/lists/gryphn_c_list.h diff --git a/src/utils/lists/gryphn_c_list.h b/src/utils/lists/gryphn_c_list.h new file mode 100644 index 0000000..3c344ae --- /dev/null +++ b/src/utils/lists/gryphn_c_list.h @@ -0,0 +1,49 @@ +#pragma once +#include "stdlib.h" + +typedef struct gnCList { + int count; + int maxCount; + void* data; +} gnCList; + +const int GROWTH_RATE = 2; // i heard somewhere that 1.5 is better but imma use 2 because I also heard that its better somewhere else + +inline gnCList gnCreateCList(int count) { + gnCList newList; + + if (count == 0) { + + } else { + newList.count = count; + newList.maxCount = count; + newList.data = malloc(sizeof(void*) * count); + } + + return newList; +} + +inline void gnCListResize(gnCList* cList, int count) { + cList->count = count; + while (cList->count > cList->maxCount) { + int oldMaxCount = cList->maxCount; + cList->maxCount *= GROWTH_RATE; + if (cList->count == oldMaxCount) { + cList->maxCount += 1; + } + } + + cList->data = realloc(cList->data, cList->maxCount); +} + +inline void gnCListReserve(gnCList* cList, int count) { + while (cList->count > cList->maxCount) { + int oldMaxCount = cList->maxCount; + cList->maxCount *= GROWTH_RATE; + if (cList->count == oldMaxCount) { + cList->maxCount += 1; + } + } + + cList->data = realloc(cList->data, cList->maxCount); +}