forked from GitHub/gf-core
initial import of the C runtime
This commit is contained in:
35
src/runtime/c/gu/enum.h
Normal file
35
src/runtime/c/gu/enum.h
Normal file
@@ -0,0 +1,35 @@
|
||||
#ifndef GU_ENUM_H_
|
||||
#define GU_ENUM_H_
|
||||
|
||||
#include <gu/mem.h>
|
||||
|
||||
typedef struct GuEnum GuEnum;
|
||||
|
||||
struct GuEnum {
|
||||
void (*next)(GuEnum* self, void* to, GuPool* pool);
|
||||
};
|
||||
|
||||
void
|
||||
gu_enum_next(GuEnum* en, void* to, GuPool* pool);
|
||||
|
||||
#ifdef GU_GNUC
|
||||
|
||||
#define gu_next(ENUM, T, POOL) \
|
||||
({ \
|
||||
T gu_next_tmp_; \
|
||||
gu_enum_next((ENUM), &gu_next_tmp_, (POOL)); \
|
||||
gu_next_tmp_; \
|
||||
})
|
||||
#else
|
||||
static inline void*
|
||||
gu_enum_next_(GuEnum* en, void* to, GuPool* pool)
|
||||
{
|
||||
gu_enum_next(en, to, pool);
|
||||
return to;
|
||||
}
|
||||
#define gu_next(ENUM, T, POOL) \
|
||||
(*(T*)gu_enum_next_((ENUM), &(T){0}, (POOL)))
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* GU_ENUM_H_ */
|
||||
Reference in New Issue
Block a user