started working on parser

This commit is contained in:
2025-01-21 01:17:30 +05:00
parent 5c9197436f
commit 83e28c9022
11 changed files with 201 additions and 24 deletions

View File

@@ -16,22 +16,27 @@
return List_##T##_construct((T*)(len > 0 ? malloc(len * sizeof(T)) : NULL), 0, 0);\
}\
\
void List_##T##_push(List_##T* ptr, T value);
T* List_##T##_expand(List_##T* ptr);\
void List_##T##_push(List_##T* ptr, T value);\
#define List_define(T)\
void List_##T##_push(List_##T* ptr, T value){\
u32 max_len = ptr->max_len;\
if(ptr->len == max_len){\
max_len = max_len * 1.5;\
T* List_##T##_expand(List_##T* ptr){\
if(ptr->len == ptr->max_len){\
u32 max_len = ptr->max_len * 1.5;\
max_len += __List_padding_in_sizeof_T(T);\
/* branchless version of max(max_len, __List_min_size) */\
max_len += (max_len < __List_min_size) * (__List_min_size - max_len);\
ptr->data = (T*)realloc(ptr->data, max_len * sizeof(T));\
ptr->max_len = max_len;\
}\
ptr->data[ptr->len++] = value;\
}
return &ptr->data[ptr->len++];\
}\
\
void List_##T##_push(List_##T* ptr, T value){\
T* empty_cell_ptr = List_##T##_expand(ptr);\
*empty_cell_ptr = value;\
}\
#define __List_min_size 16