diff options
| author | Maxime Coste <mawww@kakoune.org> | 2018-02-28 15:15:51 +1100 |
|---|---|---|
| committer | Maxime Coste <mawww@kakoune.org> | 2018-02-28 15:16:49 +1100 |
| commit | a6fd70c456935b47230b4de297e67d9e02bc85bc (patch) | |
| tree | 3b58ad3d82d7e35bd5a711ab1a45d17e184108f6 /src | |
| parent | edee85a8477fd719d8dc59acf24bec234a957532 (diff) | |
Ranges: Fix copiability of some range view iterators
Some iterators were refering to to their view with a const ref, this
was making them non-copiable. Change those const ref into const pointers
in order to fix that.
Diffstat (limited to 'src')
| -rw-r--r-- | src/ranges.hh | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/ranges.hh b/src/ranges.hh index a67502df..d39715c0 100644 --- a/src/ranges.hh +++ b/src/ranges.hh @@ -64,7 +64,7 @@ struct FilterView typename std::iterator_traits<RangeIt>::value_type> { Iterator(const FilterView& view, RangeIt it, RangeIt end) - : m_it{std::move(it)}, m_end{std::move(end)}, m_view{view} + : m_it{std::move(it)}, m_end{std::move(end)}, m_view{&view} { do_filter(); } @@ -88,13 +88,13 @@ struct FilterView private: void do_filter() { - while (m_it != m_end and not m_view.m_filter(*m_it)) + while (m_it != m_end and not m_view->m_filter(*m_it)) ++m_it; } RangeIt m_it; RangeIt m_end; - const FilterView& m_view; + const FilterView* m_view; }; Iterator begin() const { return {*this, std::begin(m_range), std::end(m_range)}; } @@ -122,9 +122,9 @@ struct TransformView struct Iterator : std::iterator<std::forward_iterator_tag, std::remove_reference_t<ResType>> { Iterator(const TransformView& view, RangeIt it) - : m_it{std::move(it)}, m_view{view} {} + : m_it{std::move(it)}, m_view{&view} {} - decltype(auto) operator*() { return m_view.m_transform(*m_it); } + decltype(auto) operator*() { return m_view->m_transform(*m_it); } Iterator& operator++() { ++m_it; return *this; } Iterator operator++(int) { auto copy = *this; ++m_it; return copy; } @@ -142,7 +142,7 @@ struct TransformView private: RangeIt m_it; - const TransformView& m_view; + const TransformView* m_view; }; Iterator begin() const { return {*this, std::begin(m_range)}; } |
