13#ifndef dealii_filtered_iterator_h
14#define dealii_filtered_iterator_h
29#ifdef DEAL_II_HAVE_CXX20
67 template <
class Iterator>
87 template <
class Iterator>
107 template <
class Iterator>
134 template <
class Iterator>
169 template <
class Iterator>
199 template <
class Iterator>
219 template <
class Iterator>
256 template <
class Iterator>
301 template <
class Iterator>
329 template <
class Iterator>
361 template <
class Iterator>
399 template <
class Iterator>
632template <
typename BaseIterator>
647 template <
typename Predicate>
670 template <
typename Predicate>
807 <<
"The element " << arg1
808 <<
" with which you want to compare or which you want to"
809 <<
" assign from is invalid since it does not satisfy the predicate.");
847 template <
typename Predicate>
889template <
typename BaseIterator,
typename Predicate>
903 namespace FilteredIteratorImplementation
909 template <
typename BaseIterator,
typename TypeList>
912 template <
typename BaseIterator,
typename Predicate>
918 template <
typename BaseIterator,
typename Predicate,
typename... Targs>
923 std::tuple<Targs...>>::type>;
982template <
typename BaseIterator,
typename Predicate>
1053template <
typename BaseIterator,
typename Predicate,
typename... Targs>
1056 typename internal::FilteredIteratorImplementation::
1057 NestFilteredIterators<
BaseIterator, std::tuple<Predicate, Targs...>>::
1060 const Targs... args)
1129template <
typename BaseIterator,
typename Predicate>
1142template <
typename BaseIterator>
1143template <
typename Predicate>
1151template <
typename BaseIterator>
1152template <
typename Predicate>
1160 set_to_next_positive(bi);
1165template <
typename BaseIterator>
1173 , predicate(fi.predicate)
1178template <
typename BaseIterator>
1188 return operator=(bi);
1193template <
typename BaseIterator>
1198 ExcInvalidElement(bi));
1199 BaseIterator::operator=(bi);
1205template <
typename BaseIterator>
1209 BaseIterator::operator=(bi);
1211 BaseIterator::operator++();
1218template <
typename BaseIterator>
1222 BaseIterator::operator=(bi);
1224 BaseIterator::operator--();
1231template <
typename BaseIterator>
1241template <
typename BaseIterator>
1251template <
typename BaseIterator>
1261template <
typename BaseIterator>
1265 return (
static_cast<const BaseIterator &
>(*
this) == bi);
1270template <
typename BaseIterator>
1274 return (
static_cast<const BaseIterator &
>(*
this) != bi);
1279template <
typename BaseIterator>
1283 return (
static_cast<const BaseIterator &
>(*
this) < bi);
1287template <
typename BaseIterator>
1293 BaseIterator::operator++();
1300template <
typename BaseIterator>
1308 BaseIterator::operator++();
1315template <
typename BaseIterator>
1321 BaseIterator::operator--();
1328template <
typename BaseIterator>
1336 BaseIterator::operator--();
1343template <
typename BaseIterator>
1344template <
typename Predicate>
1346 Predicate>::PredicateTemplate(
const Predicate &predicate)
1347 : predicate(predicate)
1352template <
typename BaseIterator>
1353template <
typename Predicate>
1367 template <
class Iterator>
1369 Active::operator()(
const Iterator &i)
const
1371 return i->is_active();
1377 template <
class Iterator>
1379 UserFlagSet::operator()(
const Iterator &i)
const
1381 return (i->user_flag_set());
1387 template <
class Iterator>
1389 UserFlagNotSet::operator()(
const Iterator &i)
const
1391 return (!i->user_flag_set());
1396 inline LevelEqualTo::LevelEqualTo(
const unsigned int level)
1402 template <
class Iterator>
1406 return (
static_cast<unsigned int>(i->level()) ==
level);
1414 : subdomain_id(subdomain_id)
1419 template <
class Iterator>
1430 template <
class Iterator>
1434 return (i->is_locally_owned());
1440 template <
class Iterator>
1444 return (i->is_locally_owned_on_level());
1452 const bool only_locally_owned)
1453 : material_ids{material_id}
1454 , only_locally_owned(only_locally_owned)
1460 const std::set<types::material_id> &material_ids,
1461 const bool only_locally_owned)
1462 : material_ids(material_ids)
1463 , only_locally_owned(only_locally_owned)
1468 template <
class Iterator>
1474 i->is_locally_owned()) :
1482 const unsigned int active_fe_index,
1483 const bool only_locally_owned)
1484 : active_fe_indices{active_fe_index}
1485 , only_locally_owned(only_locally_owned)
1491 const std::set<unsigned int> &active_fe_indices,
1492 const bool only_locally_owned)
1493 : active_fe_indices(active_fe_indices)
1494 , only_locally_owned(only_locally_owned)
1499 template <
class Iterator>
1504 (i->is_locally_owned() &&
1515 template <
class Iterator>
1519 return (i->at_boundary());
1527 : boundary_ids{boundary_id}
1533 const std::set<types::boundary_id> &boundary_ids)
1534 : boundary_ids(boundary_ids)
1539 template <
class Iterator>
1551 : manifold_ids{manifold_id}
1557 const std::set<types::manifold_id> &manifold_ids)
1558 : manifold_ids(manifold_ids)
1563 template <
class Iterator>
virtual ~PredicateBase()=default
virtual bool operator()(const BaseIterator &bi) const =0
virtual bool operator()(const BaseIterator &bi) const override
const Predicate predicate
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(Predicate p)
bool operator<(const FilteredIterator &fi) const
std::shared_ptr< const PredicateBase > predicate
FilteredIterator & operator=(const FilteredIterator &fi)
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
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
FilteredIterator< BaseIterator > make_filtered_iterator(const BaseIterator &i, const Predicate &p)
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.