inline void ___example_of_generator____()

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;
        }
    }
}