From 5719ed1860a475ddfcf3d7119027e4bd7910b0a9 Mon Sep 17 00:00:00 2001 From: Philip Trettner <Philip.Trettner@rwth-aachen.de> Date: Mon, 23 Nov 2020 13:39:51 +0100 Subject: [PATCH] fixed smart range where --- src/polymesh/iterators.hh | 6 ++++++ src/polymesh/ranges.hh | 2 ++ 2 files changed, 8 insertions(+) diff --git a/src/polymesh/iterators.hh b/src/polymesh/iterators.hh index 5ffc7e1..75fcac9 100644 --- a/src/polymesh/iterators.hh +++ b/src/polymesh/iterators.hh @@ -102,6 +102,12 @@ struct attribute_iterator : smart_iterator<attribute_iterator<AttributeT>> template <class IteratorT, class PredT> struct filtering_iterator final : smart_iterator<filtering_iterator<IteratorT, PredT>> { + filtering_iterator(IteratorT it, PredT p) : it(std::forward<IteratorT>(it)), pred(std::forward<PredT>(p)) + { + if (it.is_valid()) + advance(); // skip initially false elements + } + IteratorT it; PredT pred; diff --git a/src/polymesh/ranges.hh b/src/polymesh/ranges.hh index 9a6b7be..27f392c 100644 --- a/src/polymesh/ranges.hh +++ b/src/polymesh/ranges.hh @@ -185,6 +185,8 @@ struct filtered_range : smart_range<filtered_range<ElementT, RangeT, PredT>, Ele { using IteratorT = decltype(std::declval<RangeT>().begin()); + filtered_range(IteratorT it, PredT p) : it_begin(std::forward<IteratorT>(it)), pred(std::forward<PredT>(p)) {} + filtering_iterator<IteratorT, PredT> begin() const { return {it_begin, pred}; } end_iterator end() const { return {}; } -- GitLab