#include #include "range.h" using namespace std; /***************************************************** * support for range class ****************************************************/ range::range(int start) : _start(start), _stop(start+1), _stride(1) { } // supports construction such as range(3,6), which includes values {3, 4, 5} range::range(int start, int stop) : _start(start), _stop(stop), _stride(1) { } // supports construction such as range(3,2,8), which includes values {3, 5, 7} range::range(int start, int stride, int stop) : _start(start), _stop(stop), _stride(stride) { if (stride < 1) throw invalid_argument("stride must be positive."); } // Returns starting index int range::start() const { return _start; } // Returns stopping index int range::stop() const { return _stop; } // Returns stopping index int range::stride() const { return _stride; } // Returns the number of values included within the range int range::size() const { // partials strides should count as one. e.g. range(1,2,4).size() should be 2 return (_stop - _start + _stride - 1) / _stride; // trucates properly }