summaryrefslogtreecommitdiff
path: root/src/ranges.hh
diff options
context:
space:
mode:
authorMaxime Coste <mawww@kakoune.org>2018-06-03 14:09:33 +1000
committerMaxime Coste <mawww@kakoune.org>2018-07-05 07:54:28 +1000
commit087a940fbe61286caf78b1630a74b1e25bbf28ec (patch)
tree6be73a69542de44dc60d998a5b729be53b28c9a3 /src/ranges.hh
parent9387abed81ba6d510d43b2cc5c7f5c8f3ec4bcd1 (diff)
Add 'skip(size_t)' range utility to skip a number of elements
Diffstat (limited to 'src/ranges.hh')
-rw-r--r--src/ranges.hh18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/ranges.hh b/src/ranges.hh
index 1da0fe71..e7fd8cb6 100644
--- a/src/ranges.hh
+++ b/src/ranges.hh
@@ -56,6 +56,24 @@ using IteratorOf = decltype(std::begin(std::declval<Range>()));
template<typename Range>
using ValueOf = typename Range::value_type;
+template<typename Range>
+struct SkipView
+{
+ auto begin() const { return std::next(std::begin(m_range), m_skip_count); }
+ auto end() const { return std::end(m_range); }
+
+ Range m_range;
+ size_t m_skip_count;
+};
+
+inline auto skip(size_t count)
+{
+ return make_view_factory([count](auto&& range) {
+ using Range = decltype(range);
+ return SkipView<decay_range<Range>>{std::forward<Range>(range), count};
+ });
+}
+
template<typename Range, typename Filter>
struct FilterView
{