mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
FOREACH_BEGIN / VECEACH replaced by FOREACH / FOREACH_IDX
This commit is contained in:
@@ -317,18 +317,16 @@ static inline void* expand_(void *vec, size_t element_size)
|
||||
|
||||
#define CONCAT_INNER(a, b) a ## b
|
||||
#define CONCAT(a, b) CONCAT_INNER(a, b)
|
||||
#define VECEACH(_vec, _index) \
|
||||
for (unsigned (_index) = 0, CONCAT(__vecsize_, __LINE__) = vec_size(_vec); (_index) < CONCAT(__vecsize_, __LINE__); (_index)++)
|
||||
#define foreach(type__, vec__) \
|
||||
type__* foreach_vec__ = vec__; unsigned foreach_len__ = vec_size(foreach_vec__); \
|
||||
type__ val; if (foreach_vec__) val = foreach_vec__[0]; \
|
||||
for (unsigned foreach_index = 0; foreach_index < foreach_len__; val = foreach_vec__[++foreach_index])
|
||||
|
||||
#define FOREACH_BEGIN_IDX(idx__, decl__, vec__) \
|
||||
;void* CONCAT(foreach_vec_, __LINE__) = (vec__); unsigned CONCAT(foreach_len_, __LINE__) = vec_size(CONCAT(foreach_vec_, __LINE__)); \
|
||||
for (unsigned idx__ = 0; idx__ < CONCAT(foreach_len_, __LINE__); idx__++) { decl__ = ((void**)CONCAT(foreach_vec_, __LINE__))[idx__];
|
||||
#define FOREACH_END() } do {} while (0)
|
||||
#define FOREACH_BEGIN(decl__, vec__) FOREACH_BEGIN_IDX(CONCAT(idx__, __LINE__), decl__, vec__)
|
||||
#define FOREACH(type__, name__, vec__) \
|
||||
type__* CONCAT(foreach_vec_, __LINE__) = (vec__); type__* CONCAT(foreach_vecend_, __LINE__) = CONCAT(foreach_vec_, __LINE__) + vec_size(CONCAT(foreach_vec_, __LINE__)); \
|
||||
type__* CONCAT(foreach_it_, __LINE__) = CONCAT(foreach_vec_, __LINE__); \
|
||||
for (type__ name__ ; CONCAT(foreach_it_, __LINE__) < CONCAT(foreach_vecend_, __LINE__) ? (name__ = *CONCAT(foreach_it_, __LINE__), true) : false; CONCAT(foreach_it_, __LINE__)++)
|
||||
|
||||
#define FOREACH_IDX(idx__, type__, name__, vec__) \
|
||||
type__* CONCAT(foreach_vec_, __LINE__) = (vec__); uint32_t CONCAT(foreach_vecsize_, __LINE__) = vec_size(CONCAT(foreach_vec_, __LINE__)); \
|
||||
uint32_t idx__ = 0; \
|
||||
for (type__ name__ ; idx__ < CONCAT(foreach_vecsize_, __LINE__) ? (name__ = CONCAT(foreach_vec_, __LINE__)[idx__], true) : false; idx__++)
|
||||
|
||||
#define VECNEW(_type, _capacity) ((_type *)(vec_new_(sizeof(_type), _capacity) + 1))
|
||||
#define vec_add(vec_, value_) do { \
|
||||
|
||||
Reference in New Issue
Block a user