add slicing for finite random access ranges

master
Daniel Kolesa 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];
}
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:
T p_range;
};
@ -182,6 +187,10 @@ namespace octa {
return move(p_range[i]);
}
MoveRange<T> slice(size_t start, size_t end) {
return MoveRange<T>(p_range.slice(start, end));
}
private:
T p_range;
};

View File

@ -55,6 +55,10 @@ namespace octa {
/* satisfy RandomAccessRange */
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]; }
const T &operator[](size_t i) const { return p_beg[i]; }