43 lines
1.3 KiB
C
43 lines
1.3 KiB
C
#pragma once
|
|
#include "stdint.h"
|
|
#include "stdlib.h"
|
|
|
|
#define GN_ARRAY_LIST(type)\
|
|
typedef struct type##ArrayList { \
|
|
uint32_t count; \
|
|
uint32_t maxSize; \
|
|
type* data; \
|
|
} type##ArrayList; \
|
|
inline static type##ArrayList type##ArrayListCreate() { \
|
|
type##ArrayList list;\
|
|
list.maxSize = 1; \
|
|
list.count = 0;\
|
|
list.data = malloc(sizeof(type) * list.maxSize); \
|
|
return list; \
|
|
}\
|
|
inline static void type##ArrayListReserve(type##ArrayList* list, int count) { \
|
|
int newCount = count - (list->maxSize - list->count);\
|
|
list->data = realloc(list->data, sizeof(type) * (newCount + list->maxSize)); \
|
|
list->maxSize += newCount; \
|
|
}\
|
|
inline static void type##ArrayListExpand(type##ArrayList* list, int count) { \
|
|
list->data = realloc(list->data, sizeof(type) * (count + list->maxSize)); \
|
|
list->maxSize += count; \
|
|
}\
|
|
inline static void type##ArrayListAdd(type##ArrayList* list, type data) { \
|
|
if (list->count >= list->maxSize) {\
|
|
list->maxSize *= 2; \
|
|
list->data = realloc(list->data, sizeof(type) * list->maxSize); \
|
|
} \
|
|
list->data[list->count] = data;\
|
|
list->count++;\
|
|
}\
|
|
inline static void type##ArrayListResize(type##ArrayList* list, int count) { \
|
|
int newCount = count - (list->maxSize - list->count);\
|
|
list->data = realloc(list->data, sizeof(type) * (newCount + list->maxSize)); \
|
|
list->maxSize += newCount; \
|
|
list->count += count; \
|
|
}
|
|
|
|
GN_ARRAY_LIST(int);
|