From dc2dacaf5d7aa4a3103e268080a0e1ed82ce54e7 Mon Sep 17 00:00:00 2001 From: q66 Date: Sat, 18 Apr 2015 22:05:24 +0100 Subject: [PATCH] add slicing for finite random access ranges --- octa/range.h | 9 +++++++++ octa/vector.h | 4 ++++ 2 files changed, 13 insertions(+) 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]; }