From bd82d030011cd8b9655e5ded6b6df9343b42a6bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Frings-F=C3=BCrst?= Date: Wed, 4 Feb 2015 14:09:54 +0100 Subject: Imported Upstream version 3.22 --- doc/generator.cpp | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 doc/generator.cpp (limited to 'doc/generator.cpp') diff --git a/doc/generator.cpp b/doc/generator.cpp new file mode 100644 index 0000000..6c64f80 --- /dev/null +++ b/doc/generator.cpp @@ -0,0 +1,43 @@ +/* + * sample. + * + * Something more or less like Python generators. + */ +#include +#include +template class fi /* filler_iterator */ { + private: + base &parent; + public: + fi(base &p) : parent(p) {}; + bool operator!=(const fi &) { return parent.has_more(); }; + const fi &operator++(void) { return *this; }; + int operator*(void) { return parent.yield(); }; +}; + +class rdgen { + private: + unsigned int remaining; + + public: + rdgen(unsigned int x) { + remaining = x; + }; + bool has_more(void) { + return remaining > 0; + }; + int yield(void) { + --remaining; + return rand(); + }; + + fi begin(void) { return fi(*this); }; + fi end(void) { return fi(*this); }; +}; + +int main(int argc, const char **argv) +{ + for (auto x : rdgen(argc)) + printf("%d\n", x); + return 0; +} -- cgit v1.2.3