16 #ifndef dealii_filtered_iterator_h 17 # define dealii_filtered_iterator_h 20 # include <deal.II/base/config.h> 22 # include <deal.II/base/exceptions.h> 23 # include <deal.II/base/iterator_range.h> 24 # include <deal.II/base/std_cxx14/memory.h> 26 # include <deal.II/grid/tria_iterator_base.h> 31 DEAL_II_NAMESPACE_OPEN
65 template <
class Iterator>
85 template <
class Iterator>
105 template <
class Iterator>
132 template <
class Iterator>
167 template <
class Iterator>
197 template <
class Iterator>
217 template <
class Iterator>
240 const bool only_locally_owned =
false);
248 const bool only_locally_owned =
false);
255 template <
class Iterator>
287 const bool only_locally_owned =
false);
295 const bool only_locally_owned =
false);
302 template <
class Iterator>
331 template <
class Iterator>
528 template <
typename BaseIterator>
541 template <
typename Predicate>
561 template <
typename Predicate>
590 operator=(
const BaseIterator &fi);
601 set_to_next_positive(
const BaseIterator &bi);
612 set_to_previous_positive(
const BaseIterator &bi);
630 operator==(
const BaseIterator &fi)
const;
648 operator!=(
const BaseIterator &fi)
const;
666 operator<(
const BaseIterator &fi)
const;
702 <<
"The element " << arg1
703 <<
" with which you want to compare or which you want to" 704 <<
" assign from is invalid since it does not satisfy the predicate.");
736 virtual std::unique_ptr<PredicateBase>
749 template <
typename Predicate>
762 operator()(
const BaseIterator &bi)
const override;
768 virtual std::unique_ptr<PredicateBase>
769 clone()
const override;
796 template <
typename BaseIterator,
typename Predicate>
809 namespace FilteredIteratorImplementation
815 template <
typename BaseIterator,
typename TypeList>
816 struct NestFilteredIterators;
818 template <
typename BaseIterator,
typename Predicate>
819 struct NestFilteredIterators<BaseIterator, std::tuple<Predicate>>
824 template <
typename BaseIterator,
typename Predicate,
typename... Targs>
825 struct NestFilteredIterators<BaseIterator, std::tuple<Predicate, Targs...>>
828 typename NestFilteredIterators<BaseIterator,
829 std::tuple<Targs...>>::type>;
869 template <
typename BaseIterator,
typename Predicate>
918 template <
typename BaseIterator,
typename Predicate,
typename... Targs>
920 typename internal::FilteredIteratorImplementation::
921 NestFilteredIterators<BaseIterator, std::tuple<Predicate, Targs...>>::type>
935 template <
typename BaseIterator>
936 template <
typename Predicate>
943 template <
typename BaseIterator>
944 template <
typename Predicate>
946 const BaseIterator &bi)
956 template <
typename BaseIterator>
963 BaseIterator(*(BaseIterator *)(&fi))
969 template <
typename BaseIterator>
977 template <
typename BaseIterator>
986 const BaseIterator &bi = fi;
992 template <
typename BaseIterator>
998 BaseIterator::operator=(bi);
1004 template <
typename BaseIterator>
1008 BaseIterator::operator=(bi);
1010 BaseIterator::operator++();
1017 template <
typename BaseIterator>
1021 BaseIterator::operator=(bi);
1023 BaseIterator::operator--();
1030 template <
typename BaseIterator>
1034 return (static_cast<const BaseIterator &>(*
this) ==
1035 static_cast<const BaseIterator &>(fi));
1040 template <
typename BaseIterator>
1044 return (static_cast<const BaseIterator &>(*
this) !=
1045 static_cast<const BaseIterator &>(fi));
1050 template <
typename BaseIterator>
1054 return (static_cast<const BaseIterator &>(*
this) <
1055 static_cast<const BaseIterator &>(fi));
1060 template <
typename BaseIterator>
1064 return (static_cast<const BaseIterator &>(*
this) == bi);
1069 template <
typename BaseIterator>
1073 return (static_cast<const BaseIterator &>(*
this) != bi);
1078 template <
typename BaseIterator>
1082 return (static_cast<const BaseIterator &>(*
this) < bi);
1086 template <
typename BaseIterator>
1092 BaseIterator::operator++();
1099 template <
typename BaseIterator>
1107 BaseIterator::operator++();
1114 template <
typename BaseIterator>
1120 BaseIterator::operator--();
1127 template <
typename BaseIterator>
1135 BaseIterator::operator--();
1142 template <
typename BaseIterator>
1143 template <
typename Predicate>
1146 : predicate(predicate)
1151 template <
typename BaseIterator>
1152 template <
typename Predicate>
1162 template <
typename BaseIterator>
1163 template <
typename Predicate>
1164 std::unique_ptr<typename FilteredIterator<BaseIterator>::PredicateBase>
1167 return std_cxx14::make_unique<PredicateTemplate>(
predicate);
1176 template <
class Iterator>
1178 Active::operator()(
const Iterator &i)
const 1180 return (i->active());
1186 template <
class Iterator>
1188 UserFlagSet::operator()(
const Iterator &i)
const 1190 return (i->user_flag_set());
1196 template <
class Iterator>
1198 UserFlagNotSet::operator()(
const Iterator &i)
const 1200 return (!i->user_flag_set());
1205 inline LevelEqualTo::LevelEqualTo(
const unsigned int level)
1211 template <
class Iterator>
1215 return (static_cast<unsigned int>(i->level()) ==
level);
1223 : subdomain_id(subdomain_id)
1228 template <
class Iterator>
1239 template <
class Iterator>
1243 return (i->is_locally_owned());
1249 template <
class Iterator>
1253 return (i->is_locally_owned_on_level());
1261 const bool only_locally_owned)
1262 : material_ids{material_id}
1271 : material_ids(material_ids)
1272 , only_locally_owned(only_locally_owned)
1277 template <
class Iterator>
1283 i->is_locally_owned()) :
1291 const unsigned int active_fe_index,
1293 : active_fe_indices{active_fe_index}
1302 : active_fe_indices(active_fe_indices)
1303 , only_locally_owned(only_locally_owned)
1308 template <
class Iterator>
1315 i->is_locally_owned()) :
1324 template <
class Iterator>
1328 return (i->at_boundary());
1333 DEAL_II_NAMESPACE_CLOSE
bool operator()(const Iterator &i) const
FilteredIterator & operator++()
IteratorOverIterators begin()
const types::subdomain_id subdomain_id
FilteredIterator(Predicate p)
bool operator()(const Iterator &i) const
const bool only_locally_owned
IteratorOverIterators end()
IteratorRange< FilteredIterator< BaseIterator > > filter_iterators(IteratorRange< BaseIterator > i, const Predicate &p)
FilteredIterator & operator--()
const std::set< types::material_id > material_ids
bool operator()(const Iterator &i) const
unsigned int subdomain_id
FilteredIterator & operator=(const FilteredIterator &fi)
#define DeclException1(Exception1, type1, outsequence)
#define Assert(cond, exc)
bool operator==(const FilteredIterator &fi) const
std::unique_ptr< const PredicateBase > predicate
bool operator()(const Iterator &i) const
bool operator()(const Iterator &i) const
MaterialIdEqualTo(const types::material_id material_id, const bool only_locally_owned=false)
const Predicate predicate
const std::set< unsigned int > active_fe_indices
FilteredIterator & set_to_next_positive(const BaseIterator &bi)
SubdomainEqualTo(const types::subdomain_id subdomain_id)
bool operator<(const FilteredIterator &fi) const
static::ExceptionBase & ExcInvalidElement(BaseIterator arg1)
const bool only_locally_owned
bool operator!=(const FilteredIterator &fi) const
ActiveFEIndexEqualTo(const unsigned int active_fe_index, const bool only_locally_owned=false)
Iterator points to a valid object.
FilteredIterator & set_to_previous_positive(const BaseIterator &bi)
FilteredIterator< BaseIterator > make_filtered_iterator(const BaseIterator &i, const Predicate &p)
typename BaseIterator::AccessorType AccessorType
bool operator()(const Iterator &i) const
bool operator()(const Iterator &i) const
bool operator()(const Iterator &i) const