16 #ifndef dealii_filtered_iterator_h
17 #define dealii_filtered_iterator_h
31 #ifdef DEAL_II_HAVE_CXX20
69 template <
class Iterator>
89 template <
class Iterator>
109 template <
class Iterator>
136 template <
class Iterator>
171 template <
class Iterator>
201 template <
class Iterator>
221 template <
class Iterator>
258 template <
class Iterator>
304 template <
class Iterator>
332 template <
class Iterator>
364 template <
class Iterator>
402 template <
class Iterator>
632 template <
typename BaseIterator>
645 template <
typename Predicate>
666 template <
typename Predicate>
803 <<
"The element " << arg1
804 <<
" with which you want to compare or which you want to"
805 <<
" assign from is invalid since it does not satisfy the predicate.");
837 virtual std::unique_ptr<PredicateBase>
850 template <
typename Predicate>
869 virtual std::unique_ptr<PredicateBase>
870 clone()
const override;
897 template <
typename BaseIterator,
typename Predicate>
911 namespace FilteredIteratorImplementation
917 template <
typename BaseIterator,
typename TypeList>
920 template <
typename BaseIterator,
typename Predicate>
926 template <
typename BaseIterator,
typename Predicate,
typename... Targs>
931 std::tuple<Targs...>>
::type>;
988 template <
typename BaseIterator,
typename Predicate>
1057 template <
typename BaseIterator,
typename Predicate,
typename... Targs>
1060 typename internal::FilteredIteratorImplementation::
1061 NestFilteredIterators<
BaseIterator, std::tuple<Predicate, Targs...>>::
1063 const Predicate & p,
1064 const Targs... args)
1131 template <
typename BaseIterator,
typename Predicate>
1144 template <
typename BaseIterator>
1145 template <
typename Predicate>
1153 template <
typename BaseIterator>
1154 template <
typename Predicate>
1162 set_to_next_positive(bi);
1167 template <
typename BaseIterator>
1175 , predicate(fi.predicate->clone())
1180 template <
typename BaseIterator>
1190 return operator=(bi);
1195 template <
typename BaseIterator>
1200 ExcInvalidElement(bi));
1201 BaseIterator::operator=(bi);
1207 template <
typename BaseIterator>
1211 BaseIterator::operator=(bi);
1220 template <
typename BaseIterator>
1224 BaseIterator::operator=(bi);
1226 BaseIterator::operator--();
1233 template <
typename BaseIterator>
1243 template <
typename BaseIterator>
1253 template <
typename BaseIterator>
1263 template <
typename BaseIterator>
1267 return (
static_cast<const BaseIterator &
>(*
this) == bi);
1272 template <
typename BaseIterator>
1276 return (
static_cast<const BaseIterator &
>(*
this) != bi);
1281 template <
typename BaseIterator>
1285 return (
static_cast<const BaseIterator &
>(*
this) < bi);
1289 template <
typename BaseIterator>
1302 template <
typename BaseIterator>
1317 template <
typename BaseIterator>
1323 BaseIterator::operator--();
1330 template <
typename BaseIterator>
1338 BaseIterator::operator--();
1345 template <
typename BaseIterator>
1346 template <
typename Predicate>
1349 : predicate(predicate)
1354 template <
typename BaseIterator>
1355 template <
typename Predicate>
1365 template <
typename BaseIterator>
1366 template <
typename Predicate>
1367 std::unique_ptr<typename FilteredIterator<BaseIterator>::PredicateBase>
1370 return std::make_unique<PredicateTemplate>(
predicate);
1379 template <
class Iterator>
1381 Active::operator()(
const Iterator &i)
const
1383 return i->is_active();
1389 template <
class Iterator>
1391 UserFlagSet::operator()(
const Iterator &i)
const
1393 return (i->user_flag_set());
1399 template <
class Iterator>
1401 UserFlagNotSet::operator()(
const Iterator &i)
const
1403 return (!i->user_flag_set());
1408 inline LevelEqualTo::LevelEqualTo(
const unsigned int level)
1414 template <
class Iterator>
1418 return (
static_cast<unsigned int>(i->level()) ==
level);
1431 template <
class Iterator>
1442 template <
class Iterator>
1446 return (i->is_locally_owned());
1452 template <
class Iterator>
1456 return (i->is_locally_owned_on_level());
1464 const bool only_locally_owned)
1466 , only_locally_owned(only_locally_owned)
1472 const std::set<types::material_id> &material_ids,
1473 const bool only_locally_owned)
1474 : material_ids(material_ids)
1475 , only_locally_owned(only_locally_owned)
1480 template <
class Iterator>
1486 i->is_locally_owned()) :
1494 const unsigned int active_fe_index,
1495 const bool only_locally_owned)
1496 : active_fe_indices{active_fe_index}
1497 , only_locally_owned(only_locally_owned)
1503 const std::set<unsigned int> &active_fe_indices,
1504 const bool only_locally_owned)
1505 : active_fe_indices(active_fe_indices)
1506 , only_locally_owned(only_locally_owned)
1511 template <
class Iterator>
1516 (i->is_locally_owned() &&
1527 template <
class Iterator>
1531 return (i->at_boundary());
1545 const std::set<types::boundary_id> &boundary_ids)
1546 : boundary_ids(boundary_ids)
1551 template <
class Iterator>
1569 const std::set<types::manifold_id> &manifold_ids)
1570 : manifold_ids(manifold_ids)
1575 template <
class Iterator>
virtual std::unique_ptr< PredicateBase > clone() const =0
virtual ~PredicateBase()=default
virtual bool operator()(const BaseIterator &bi) 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
const std::set< types::boundary_id > boundary_ids
BoundaryIdEqualTo(const types::boundary_id boundary_id)
bool operator()(const Iterator &i) const
LevelEqualTo(const unsigned int level)
bool operator()(const Iterator &i) const
bool operator()(const Iterator &i) const
bool operator()(const Iterator &i) const
ManifoldIdEqualTo(const types::manifold_id manifold_id)
const std::set< types::manifold_id > manifold_ids
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
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_CXX20_REQUIRES(condition)
#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)
IteratorRange< FilteredIterator< BaseIterator > > operator|(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)