From 2eee382a62a909d5a3f2f5eda94f30fe68fd5335 Mon Sep 17 00:00:00 2001 From: "kr.angelov" Date: Fri, 20 Jan 2012 13:41:10 +0000 Subject: initial import of the C runtime --- src/runtime/c/gu/enum.h | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/runtime/c/gu/enum.h (limited to 'src/runtime/c/gu/enum.h') diff --git a/src/runtime/c/gu/enum.h b/src/runtime/c/gu/enum.h new file mode 100644 index 000000000..88cd5ba6a --- /dev/null +++ b/src/runtime/c/gu/enum.h @@ -0,0 +1,35 @@ +#ifndef GU_ENUM_H_ +#define GU_ENUM_H_ + +#include + +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_ */ -- cgit v1.2.3