00001 #ifndef __generator_h__
00002 #define __generator_h__
00003
00004
00005
00006
00007
00008
00009 struct _generator
00010 {
00011 int _line;
00012 _generator():_line(0) {}
00013 };
00014
00015 #define $generator(NAME) struct NAME : public _generator
00016
00017 #define $emit(T) bool operator()(T& _rv) { \
00018 switch(_line) { case 0:;
00019
00020 #define $stop } _line = 0; return false; }
00021
00022 #define $yield(V) \
00023 do {\
00024 _line=__LINE__;\
00025 _rv = (V); return true; case __LINE__:;\
00026 } while (0)
00027 #endif