From 7c91e1cc5be01dcbd06e0806781a9c15480a4a91 Mon Sep 17 00:00:00 2001 From: q66 Date: Sat, 23 May 2015 18:55:22 +0100 Subject: [PATCH] implement random access requirements on MapRange --- octa/algorithm.h | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/octa/algorithm.h b/octa/algorithm.h index a2b5b96..f85c66a 100644 --- a/octa/algorithm.h +++ b/octa/algorithm.h @@ -388,7 +388,7 @@ namespace octa { template struct MapRange: InputRange< - MapRange, InputRangeTag, RangeValue, RangeValue, RangeSize + MapRange, RangeCategory, RangeValue, RangeValue, RangeSize > { private: T p_range; @@ -413,10 +413,22 @@ namespace octa { } bool empty() const { return p_range.empty(); } + RangeSize length() const { return p_range.length(); } + void pop_first() { p_range.pop_first(); } + void pop_last() { p_range.pop_last(); } + RangeSize pop_first_n(RangeSize n) { p_range.pop_first_n(n); } + RangeSize pop_last_n(RangeSize n) { p_range.pop_last_n(n); } RangeValue first() { return p_func(p_range.first()); } + RangeValue last() { return p_func(p_range.last()); } + + RangeValue operator[](RangeSize idx) { return p_func(p_range[idx]); } + + MapRange slice(RangeSize start, RangeSize end) { + return MapRange(p_range.slice(start, end), p_func); + } bool operator==(const MapRange &v) const { return (p_range == v.p_range) && (p_func == v.p_func);