19 explicit RangeIter(T end) : incr(0), cur(end), fin(end) {}
22 RangeIter(T start, T end)
23 : incr(start <= end ? 1 : -1), cur(start), fin(
static_cast<T
>(end + incr)) {}
24 RangeIter begin()
const {
return *
this; }
25 RangeIter end()
const {
return RangeIter(fin); }
26 T operator*()
const {
return cur; }
27 bool operator==(
const RangeIter &a)
const {
return cur == a.cur; }
28 bool operator!=(
const RangeIter &a)
const {
return cur != a.cur; }
29 RangeIter &operator++() {
30 cur =
static_cast<T
>(cur + incr);
34 friend std::ostream &operator<<(std::ostream &,
const RangeIter<U> &);
42static inline RangeIter<T> Range(std::pair<T, T> p) {
43 return RangeIter<T>(p.first, p.second);
46static inline RangeIter<T> ReverseRange(std::pair<T, T> p) {
51std::ostream &operator<<(std::ostream &out,
const RangeIter<T> &r) {
53 if (r.cur + r.incr != r.fin) out <<
".." << (r.fin - r.incr);
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:13