diff options
| author | Maxime Coste <mawww@kakoune.org> | 2018-06-03 14:09:33 +1000 |
|---|---|---|
| committer | Maxime Coste <mawww@kakoune.org> | 2018-07-05 07:54:28 +1000 |
| commit | 087a940fbe61286caf78b1630a74b1e25bbf28ec (patch) | |
| tree | 6be73a69542de44dc60d998a5b729be53b28c9a3 /src | |
| parent | 9387abed81ba6d510d43b2cc5c7f5c8f3ec4bcd1 (diff) | |
Add 'skip(size_t)' range utility to skip a number of elements
Diffstat (limited to 'src')
| -rw-r--r-- | src/ranges.hh | 18 |
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 { |
