16#ifndef dealii_filtered_iterator_h
17# define dealii_filtered_iterator_h
64 template <
class Iterator>
84 template <
class Iterator>
104 template <
class Iterator>
131 template <
class Iterator>
166 template <
class Iterator>
196 template <
class Iterator>
216 template <
class Iterator>
253 template <
class Iterator>
299 template <
class Iterator>
327 template <
class Iterator>
523template <
typename BaseIterator>
536 template <
typename Predicate>
556 template <
typename Predicate>
692 <<
"The element " << arg1
693 <<
" with which you want to compare or which you want to"
694 <<
" assign from is invalid since it does not satisfy the predicate.");
726 virtual std::unique_ptr<PredicateBase>
739 template <
typename Predicate>
758 virtual std::unique_ptr<PredicateBase>
759 clone()
const override;
786template <
typename BaseIterator,
typename Predicate>
799 namespace FilteredIteratorImplementation
805 template <
typename BaseIterator,
typename TypeList>
808 template <
typename BaseIterator,
typename Predicate>
814 template <
typename BaseIterator,
typename Predicate,
typename... Targs>
819 std::tuple<Targs...>>::type>;
858template <
typename BaseIterator,
typename Predicate>
906template <
typename BaseIterator,
typename Predicate,
typename... Targs>
908 typename internal::FilteredIteratorImplementation::
909 NestFilteredIterators<
BaseIterator, std::tuple<Predicate, Targs...>>::type>
923template <
typename BaseIterator>
924template <
typename Predicate>
931template <
typename BaseIterator>
932template <
typename Predicate>
944template <
typename BaseIterator>
952 , predicate(fi.predicate->clone())
957template <
typename BaseIterator>
967 return operator=(bi);
972template <
typename BaseIterator>
977 ExcInvalidElement(bi));
978 BaseIterator::operator=(bi);
984template <
typename BaseIterator>
988 BaseIterator::operator=(bi);
997template <
typename BaseIterator>
1001 BaseIterator::operator=(bi);
1003 BaseIterator::operator--();
1010template <
typename BaseIterator>
1020template <
typename BaseIterator>
1030template <
typename BaseIterator>
1040template <
typename BaseIterator>
1044 return (
static_cast<const BaseIterator &
>(*
this) == bi);
1049template <
typename BaseIterator>
1053 return (
static_cast<const BaseIterator &
>(*
this) != bi);
1058template <
typename BaseIterator>
1062 return (
static_cast<const BaseIterator &
>(*
this) < bi);
1066template <
typename BaseIterator>
1079template <
typename BaseIterator>
1094template <
typename BaseIterator>
1100 BaseIterator::operator--();
1107template <
typename BaseIterator>
1115 BaseIterator::operator--();
1122template <
typename BaseIterator>
1123template <
typename Predicate>
1125 Predicate>::PredicateTemplate(
const Predicate &predicate)
1126 : predicate(predicate)
1131template <
typename BaseIterator>
1132template <
typename Predicate>
1142template <
typename BaseIterator>
1143template <
typename Predicate>
1144std::unique_ptr<typename FilteredIterator<BaseIterator>::PredicateBase>
1147 return std::make_unique<PredicateTemplate>(
predicate);
1156 template <
class Iterator>
1158 Active::operator()(
const Iterator &i)
const
1160 return i->is_active();
1166 template <
class Iterator>
1168 UserFlagSet::operator()(
const Iterator &i)
const
1170 return (i->user_flag_set());
1176 template <
class Iterator>
1178 UserFlagNotSet::operator()(
const Iterator &i)
const
1180 return (!i->user_flag_set());
1185 inline LevelEqualTo::LevelEqualTo(
const unsigned int level)
1191 template <
class Iterator>
1195 return (
static_cast<unsigned int>(i->level()) ==
level);
1208 template <
class Iterator>
1219 template <
class Iterator>
1223 return (i->is_locally_owned());
1229 template <
class Iterator>
1233 return (i->is_locally_owned_on_level());
1241 const bool only_locally_owned)
1243 , only_locally_owned(only_locally_owned)
1249 const std::set<types::material_id> &material_ids,
1250 const bool only_locally_owned)
1251 : material_ids(material_ids)
1252 , only_locally_owned(only_locally_owned)
1257 template <
class Iterator>
1263 i->is_locally_owned()) :
1271 const unsigned int active_fe_index,
1272 const bool only_locally_owned)
1273 : active_fe_indices{active_fe_index}
1274 , only_locally_owned(only_locally_owned)
1280 const std::set<unsigned int> &active_fe_indices,
1281 const bool only_locally_owned)
1282 : active_fe_indices(active_fe_indices)
1283 , only_locally_owned(only_locally_owned)
1288 template <
class Iterator>
1295 i->is_locally_owned()) :
1304 template <
class Iterator>
1308 return (i->at_boundary());
virtual ~PredicateBase()=default
virtual bool operator()(const BaseIterator &bi) const =0
virtual std::unique_ptr< PredicateBase > clone() const =0
virtual bool operator()(const BaseIterator &bi) const override
PredicateTemplate(const Predicate &predicate)
const Predicate predicate
virtual std::unique_ptr< PredicateBase > clone() const override
FilteredIterator & set_to_next_positive(const BaseIterator &bi)
FilteredIterator & set_to_previous_positive(const BaseIterator &bi)
FilteredIterator & operator--()
typename BaseIterator::AccessorType AccessorType
bool operator==(const FilteredIterator &fi) const
bool operator!=(const FilteredIterator &fi) const
FilteredIterator< BaseIterator > make_filtered_iterator(const BaseIterator &i, const Predicate &p)
FilteredIterator(Predicate p)
bool operator<(const FilteredIterator &fi) const
FilteredIterator & operator=(const FilteredIterator &fi)
std::unique_ptr< const PredicateBase > predicate
FilteredIterator & operator++()
const bool only_locally_owned
bool operator()(const Iterator &i) const
const std::set< unsigned int > active_fe_indices
ActiveFEIndexEqualTo(const unsigned int active_fe_index, const bool only_locally_owned=false)
bool operator()(const Iterator &i) const
bool operator()(const Iterator &i) const
bool operator()(const Iterator &i) const
LevelEqualTo(const unsigned int level)
bool operator()(const Iterator &i) const
bool operator()(const Iterator &i) const
const bool only_locally_owned
bool operator()(const Iterator &i) const
MaterialIdEqualTo(const types::material_id material_id, const bool only_locally_owned=false)
const std::set< types::material_id > material_ids
SubdomainEqualTo(const types::subdomain_id subdomain_id)
bool operator()(const Iterator &i) const
const types::subdomain_id subdomain_id
bool operator()(const Iterator &i) const
bool operator()(const Iterator &i) const
IteratorOverIterators end() const
IteratorOverIterators begin()
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
IteratorRange< typename internal::FilteredIteratorImplementation::NestFilteredIterators< BaseIterator, std::tuple< Predicate, Targs... > >::type > filter_iterators(IteratorRange< BaseIterator > i, const Predicate &p, const Targs... args)
IteratorRange< FilteredIterator< BaseIterator > > filter_iterators(IteratorRange< BaseIterator > i, const Predicate &p)
static ::ExceptionBase & ExcInvalidElement(BaseIterator arg1)
#define Assert(cond, exc)
#define DeclException1(Exception1, type1, outsequence)
@ valid
Iterator points to a valid object.
unsigned int subdomain_id
SynchronousIterators< Iterators > operator++(SynchronousIterators< Iterators > &a)