diff --git a/octa/range.h b/octa/range.h index 44d46a7..3e97b8a 100644 --- a/octa/range.h +++ b/octa/range.h @@ -125,6 +125,11 @@ namespace octa { return p_range[length() - i - 1]; } + ReverseRange slice(size_t start, size_t end) { + size_t len = p_range.length(); + return ReverseRange(p_range.slice(len - end, len - start)); + } + private: T p_range; }; @@ -182,6 +187,10 @@ namespace octa { return move(p_range[i]); } + MoveRange slice(size_t start, size_t end) { + return MoveRange(p_range.slice(start, end)); + } + private: T p_range; }; diff --git a/octa/vector.h b/octa/vector.h index d3ddc2c..2b6d9f5 100644 --- a/octa/vector.h +++ b/octa/vector.h @@ -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]; }