Update C++ API
This commit is contained in:
@@ -30,43 +30,38 @@ BEGIN_C_LINKAGE
|
||||
} NAME
|
||||
|
||||
#ifdef WAPP_PLATFORM_CPP
|
||||
#define wapp_array(TYPE, ...) ([&]() { \
|
||||
u64 capacity = _calc_array_capacity(TYPE, __VA_ARGS__); \
|
||||
\
|
||||
TYPE items[_calc_array_capacity(TYPE, __VA_ARGS__)] = {__VA_ARGS__}; \
|
||||
\
|
||||
wapp_persist u8 array[ \
|
||||
sizeof(ArrayHeader) + _calc_array_capacity(TYPE, __VA_ARGS__) * sizeof(TYPE) \
|
||||
] = {0}; \
|
||||
ArrayHeader *header = (ArrayHeader *)array; \
|
||||
header->magic = WAPP_ARRAY_MAGIC; \
|
||||
header->count = _calc_array_count(TYPE, __VA_ARGS__); \
|
||||
header->capacity = _calc_array_capacity(TYPE, __VA_ARGS__); \
|
||||
header->item_size = sizeof(TYPE); \
|
||||
\
|
||||
u8 *buf = (u8 *)(header + 1); \
|
||||
memcpy(buf, items, capacity * sizeof(TYPE)); \
|
||||
return (TYPE *)buf; \
|
||||
#define wapp_array(ELEM_TYPE, ARRAY_TYPE, ...) ([&]() { \
|
||||
wapp_persist ELEM_TYPE items[sizeof(ELEM_TYPE) == sizeof(*((ARRAY_TYPE{}).items)) ? \
|
||||
_calc_array_capacity(ELEM_TYPE, __VA_ARGS__) : -1 \
|
||||
] = {__VA_ARGS__}; \
|
||||
\
|
||||
return ARRAY_TYPE{ \
|
||||
WAPP_ARRAY_MAGIC, \
|
||||
_calc_array_count(ELEM_TYPE, __VA_ARGS__), \
|
||||
_calc_array_capacity(ELEM_TYPE, __VA_ARGS__), \
|
||||
sizeof(ELEM_TYPE), \
|
||||
items, \
|
||||
}; \
|
||||
}())
|
||||
#define wapp_array_with_capacity(TYPE, CAPACITY) ([&]() { \
|
||||
wapp_persist u8 array[ \
|
||||
sizeof(ArrayHeader) + CAPACITY * sizeof(TYPE) \
|
||||
] = {0}; \
|
||||
ArrayHeader *header = (ArrayHeader *)array; \
|
||||
header->magic = WAPP_ARRAY_MAGIC; \
|
||||
header->count = 0; \
|
||||
header->capacity = CAPACITY; \
|
||||
header->item_size = sizeof(TYPE); \
|
||||
\
|
||||
return (TYPE *)(header + 1); \
|
||||
#define wapp_array_with_capacity(ELEM_TYPE, ARRAY_TYPE, CAPACITY) ([&]() { \
|
||||
wapp_persist ELEM_TYPE items[sizeof(ELEM_TYPE) == sizeof(*((ARRAY_TYPE{}).items)) ? \
|
||||
CAPACITY : -1] = {}; \
|
||||
\
|
||||
return ARRAY_TYPE{ \
|
||||
WAPP_ARRAY_MAGIC, \
|
||||
0, \
|
||||
CAPACITY, \
|
||||
sizeof(ELEM_TYPE), \
|
||||
items, \
|
||||
}; \
|
||||
}())
|
||||
#define wapp_array_pop(TYPE, ARRAY_PTR) ([&]() { \
|
||||
if (ARRAY_PTR == NULL || _array_count((u8 *)ARRAY_PTR) == 0) { \
|
||||
TYPE result{}; \
|
||||
return result; \
|
||||
} \
|
||||
\
|
||||
return *((TYPE *)_array_pop((u8 *)ARRAY_PTR, sizeof(TYPE))); \
|
||||
#define wapp_array_pop(ELEM_TYPE, ARRAY_PTR) ([&]() { \
|
||||
if (ARRAY_PTR == NULL || (ARRAY_PTR)->count == 0) { \
|
||||
ELEM_TYPE result{}; \
|
||||
return result; \
|
||||
} \
|
||||
\
|
||||
return *((ELEM_TYPE *)_array_pop((Array *)ARRAY_PTR, sizeof(ELEM_TYPE))); \
|
||||
}())
|
||||
#else
|
||||
#define wapp_array(ELEM_TYPE, ARRAY_TYPE, ...) \
|
||||
|
||||
Reference in New Issue
Block a user