add slicing for finite random access ranges

This commit is contained in:
q66 2015-04-18 22:05:24 +01:00
parent cd0b6fc2fc
commit dc2dacaf5d
2 changed files with 13 additions and 0 deletions

View file

@ -125,6 +125,11 @@ namespace octa {
return p_range[length() - i - 1]; return p_range[length() - i - 1];
} }
ReverseRange<T> slice(size_t start, size_t end) {
size_t len = p_range.length();
return ReverseRange<T>(p_range.slice(len - end, len - start));
}
private: private:
T p_range; T p_range;
}; };
@ -182,6 +187,10 @@ namespace octa {
return move(p_range[i]); return move(p_range[i]);
} }
MoveRange<T> slice(size_t start, size_t end) {
return MoveRange<T>(p_range.slice(start, end));
}
private: private:
T p_range; T p_range;
}; };

View file

@ -55,6 +55,10 @@ namespace octa {
/* satisfy RandomAccessRange */ /* satisfy RandomAccessRange */
size_t length() const { return p_end - p_beg; } size_t length() const { return p_end - p_beg; }
VectorRange slice(size_t start, size_t end) {
return VectorRange(p_beg + start, p_beg + end);
}
T &operator[](size_t i) { return p_beg[i]; } T &operator[](size_t i) { return p_beg[i]; }
const T &operator[](size_t i) const { return p_beg[i]; } const T &operator[](size_t i) const { return p_beg[i]; }