//
// This file contains code generated by Pyxie - http://www.sparkslabs.com/pyxie
//
// This file contains parts of code derived from Pyxie itself. It may be used
// under the following terms:
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the Software
// is furnished to do so, subject to the following conditions:
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// For more information see: http://www.sparkslabs.com/pyxie/COPYING.output.md
//

#include "iterators.hpp"

struct range : public Generator<int> {
    int start;
    int end;
    int step;

    int index;

    range() :                                start(0),     end(0),   step(1), index(0)            {     };
    range(int end) :                         start(0),     end(end), step(1), index(0)            {     };
    range(int start, int end)     :          start(start), end(end), step(1), index(start)        {     };
    range(int start, int end, int stepsize): start(start), end(end), step(stepsize), index(start) {     };
    ~range() {     };

    virtual int next() {
        GENERATOR_START

        while ( step>0  ? index < end : index > end) {
            YIELD(index);
            index = index + step;
        }

        GENERATOR_END
    }
};
