started working on parser
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user