in common/generator.h [141:208]
inline void ___example_of_generator____()
{
class example_generator1 : public Generator<example_generator1, int>
{
public:
int n;
example_generator1(int N) : n(N) { }
bool has_next(const Iterator* it) const
{
return it->i < n;
}
void next(Iterator* it) const
{
assert(has_next(it));
// it->i++; // i will be increased automatically
}
int get(const Iterator* it) const
{
return it->i;
}
};
{
int i = 0; (void)i;
for (auto x: example_generator1(10))
{
assert(x == i); i++;
(void)x;
}
}
class example_generator2;
struct IteratorPayload
{
int I = 0;
IteratorPayload(const example_generator2*) { } // for begin()
IteratorPayload() { } // for end()
};
class example_generator2 : public Generator<example_generator2, int, IteratorPayload>
{
public:
int n;
example_generator2(int N) : n(N) { }
bool payload_has_next(const IteratorPayload& payload) const
{
return payload.I < n;
}
void payload_next(IteratorPayload& payload) const
{
assert(payload_has_next(payload));
payload.I++;
}
int payload_get(const IteratorPayload& payload) const
{
return payload.I;
}
};
{
int i = 0; (void)i;
for (auto x: example_generator2(10))
{
assert(x == i); i++;
(void)x;
}
}
}