From 087a940fbe61286caf78b1630a74b1e25bbf28ec Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Sun, 3 Jun 2018 14:09:33 +1000 Subject: [PATCH] Add 'skip(size_t)' range utility to skip a number of elements --- src/ranges.hh | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) 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())); template using ValueOf = typename Range::value_type; +template +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>{std::forward(range), count}; + }); +} + template struct FilterView {