13#ifndef dealii_tria_iterator_h
14#define dealii_tria_iterator_h
32template <
int dim,
int spacedim>
35template <
int,
int,
int>
217template <
typename Accessor>
257 template <
typename OtherAccessor>
269 const typename AccessorType::AccessorData *local_data =
nullptr);
280 template <
typename OtherAccessor>
291 Accessor::space_dimension> &tria_accessor,
292 const typename Accessor::AccessorData *local_data);
298 template <
typename OtherAccessor>
305 template <
typename OtherAccessor>
368 template <
typename OtherAccessor = Accessor>
369 std::enable_if_t<std::is_convertible_v<OtherAccessor, Accessor>,
bool>
468 template <
typename StreamType>
470 print(StreamType &out)
const;
500 <<
"You tried to dereference a cell iterator for which this "
501 <<
"is not possible. More information on this iterator: "
502 <<
"level=" << arg1.level() <<
", index=" << arg1.index()
515 <<
"You tried to dereference an iterator for which this "
516 <<
"is not possible. More information on this iterator: "
517 <<
"index=" << arg1.index() <<
", state="
548 template <
typename SomeAccessor>
550 template <
typename SomeAccessor>
552 template <
typename SomeAccessor>
564template <
typename Accessor>
603 const typename Accessor::AccessorData *local_data =
nullptr);
609 template <
typename OtherAccessor>
621 template <
typename OtherAccessor>
631 Accessor::space_dimension> &tria_accessor,
632 const typename Accessor::AccessorData *local_data);
639 template <
typename OtherAccessor>
646 template <
typename OtherAccessor>
666 template <
class OtherAccessor>
675 template <
class OtherAccessor>
745template <
typename Accessor>
795 const typename Accessor::AccessorData *local_data =
nullptr);
806 template <
typename OtherAccessor>
817 Accessor::space_dimension> &tria_accessor,
818 const typename Accessor::AccessorData *local_data);
831 template <
typename OtherAccessor>
858 template <
class OtherAccessor>
867 template <
class OtherAccessor>
876 template <
class OtherAccessor>
939template <
typename Accessor>
946template <
typename Accessor>
947template <
typename OtherAccessor>
954template <
typename Accessor>
955template <
typename OtherAccessor>
958 : accessor(i.accessor)
963template <
typename Accessor>
964template <
typename OtherAccessor>
967 : accessor(i.accessor)
972template <
typename Accessor>
973template <
typename OtherAccessor>
976 : accessor(i.accessor)
981template <
typename Accessor>
985 Assert(Accessor::structure_dimension != Accessor::dimension ||
987 ExcDereferenceInvalidCell(accessor));
988 Assert(Accessor::structure_dimension == Accessor::dimension ||
990 ExcDereferenceInvalidObject(accessor));
997template <
typename Accessor>
998inline const Accessor &
1006template <
typename Accessor>
1007inline const Accessor *
1015template <
typename Accessor>
1024template <
typename Accessor>
1028 return accessor.state();
1033template <
typename Accessor>
1039 ExcDereferenceInvalidObject(accessor));
1041 ExcDereferenceInvalidObject(other.
accessor));
1043 Assert(&accessor.get_triangulation() == &other.
accessor.get_triangulation(),
1044 ExcInvalidComparison());
1052 return ((**
this) < (*other));
1057template <
typename Accessor>
1062 return (other < *
this);
1067template <
typename Accessor>
1079template <
typename Accessor>
1091template <
typename Accessor>
1092template <
typename StreamType>
1096 if (Accessor::structure_dimension == Accessor::dimension)
1097 out << accessor.level() <<
'.' << accessor.index();
1099 out << accessor.index();
1104template <
typename Accessor>
1113template <
typename Accessor>
1114template <
typename OtherAccessor>
1122template <
typename Accessor>
1123template <
typename OtherAccessor>
1131template <
typename Accessor>
1132template <
typename OtherAccessor>
1150template <
typename Accessor>
1151template <
typename OtherAccessor>
1168template <
typename Accessor>
1169template <
typename OtherAccessor>
1177template <
typename Accessor>
1178template <
typename OtherAccessor>
1204template <
typename Accessor>
1205inline std::ostream &
1219template <
typename Accessor>
1220inline std::ostream &
1234template <
typename Accessor>
1235inline std::ostream &
1248template <
typename Accessor>
1250 : accessor(nullptr, -2, -2, nullptr)
1254template <
typename Accessor>
1257 : accessor(i.accessor)
1262template <
typename Accessor>
1267 const typename Accessor::AccessorData *local_data)
1272template <
typename Accessor>
1275 Accessor::dimension,
1276 Accessor::space_dimension> &tria_accessor,
1277 const typename Accessor::AccessorData *local_data)
1278 : accessor(nullptr, -2, -2, local_data)
1280 accessor.copy_from(tria_accessor);
1284template <
typename Accessor>
1295template <
typename Accessor>
1296template <
typename OtherAccessor>
1297inline std::enable_if_t<std::is_convertible_v<OtherAccessor, Accessor>,
bool>
1305template <
typename Accessor>
1310 return !(*
this == other);
1314template <
typename Accessor>
1325template <
typename Accessor>
1339template <
typename Accessor>
1345template <
typename Accessor>
1351template <
typename Accessor>
1364 Assert(this->accessor.used(), ExcAssignmentOfUnusedObject());
1369template <
typename Accessor>
1374 const typename Accessor::AccessorData *local_data)
1386 Assert(this->accessor.used(), ExcAssignmentOfUnusedObject());
1391template <
typename Accessor>
1394 Accessor::dimension,
1395 Accessor::space_dimension> &tria_accessor,
1396 const typename Accessor::AccessorData *local_data)
1408 Assert(this->accessor.used(), ExcAssignmentOfUnusedObject());
1413template <
typename Accessor>
1417 this->accessor.copy_from(i.
accessor);
1422template <
typename Accessor>
1423template <
typename OtherAccessor>
1427 this->accessor.copy_from(i.
accessor);
1432template <
typename Accessor>
1436 this->accessor.copy_from(i.
accessor);
1446 Assert(this->accessor.used(), ExcAssignmentOfUnusedObject());
1452template <
typename Accessor>
1453template <
typename OtherAccessor>
1457 this->accessor.copy_from(i.
accessor);
1467 Assert(this->accessor.used(), ExcAssignmentOfUnusedObject());
1473template <
typename Accessor>
1479 if (this->accessor.used() ==
true)
1485template <
typename Accessor>
1496template <
typename Accessor>
1502 if (this->accessor.used() ==
true)
1508template <
typename Accessor>
1522template <
typename Accessor>
1528template <
typename Accessor>
1535template <
typename Accessor>
1549 Assert(this->accessor.has_children() ==
false,
1550 ExcAssignmentOfInactiveObject());
1555template <
typename Accessor>
1569 Assert(this->accessor.has_children() ==
false,
1570 ExcAssignmentOfInactiveObject());
1575template <
typename Accessor>
1580 const typename Accessor::AccessorData *local_data)
1592 Assert(this->accessor.has_children() ==
false,
1593 ExcAssignmentOfInactiveObject());
1598template <
typename Accessor>
1601 Accessor::dimension,
1602 Accessor::space_dimension> &tria_accessor,
1603 const typename Accessor::AccessorData *local_data)
1615 Assert(this->accessor.has_children() ==
false,
1616 ExcAssignmentOfInactiveObject());
1621template <
typename Accessor>
1625 this->accessor.copy_from(i.
accessor);
1630template <
typename Accessor>
1631template <
class OtherAccessor>
1636 this->accessor.copy_from(i.
accessor);
1641template <
typename Accessor>
1645 this->accessor.copy_from(i.
accessor);
1655 Assert(this->accessor.used() && this->accessor.has_children() ==
false,
1656 ExcAssignmentOfInactiveObject());
1662template <
typename Accessor>
1663template <
class OtherAccessor>
1667 this->accessor.copy_from(i.
accessor);
1677 Assert(this->accessor.used() && this->accessor.has_children() ==
false,
1678 ExcAssignmentOfInactiveObject());
1684template <
typename Accessor>
1685template <
class OtherAccessor>
1689 this->accessor.copy_from(i.
accessor);
1699 Assert(this->accessor.has_children() ==
false,
1700 ExcAssignmentOfInactiveObject());
1706template <
typename Accessor>
1710 this->accessor.copy_from(i.
accessor);
1720 Assert(this->accessor.has_children() ==
false,
1721 ExcAssignmentOfInactiveObject());
1727template <
typename Accessor>
1733 if (this->accessor.has_children() ==
false)
1739template <
typename Accessor>
1750template <
typename Accessor>
1756 if (this->accessor.has_children() ==
false)
1762template <
typename Accessor>
* * iterator & operator++()
TriaActiveIterator< Accessor > & operator=(const TriaIterator< OtherAccessor > &)
TriaActiveIterator(const TriaActiveIterator< Accessor > &)
typename TriaIterator< Accessor >::reference reference
TriaActiveIterator< Accessor > & operator=(const TriaRawIterator< Accessor > &)
TriaActiveIterator< Accessor > operator--(int)
TriaActiveIterator(const TriaRawIterator< Accessor > &)
TriaActiveIterator< Accessor > & operator=(const TriaActiveIterator< Accessor > &)
typename TriaIterator< Accessor >::difference_type difference_type
typename TriaIterator< Accessor >::pointer pointer
TriaActiveIterator< Accessor > & operator=(const TriaActiveIterator< OtherAccessor > &)
TriaActiveIterator< Accessor > & operator--()
TriaActiveIterator(const TriaAccessorBase< Accessor::structure_dimension, Accessor::dimension, Accessor::space_dimension > &tria_accessor, const typename Accessor::AccessorData *local_data)
TriaActiveIterator< Accessor > & operator=(const TriaIterator< Accessor > &)
TriaActiveIterator(const Triangulation< Accessor::dimension, Accessor::space_dimension > *parent, const int level, const int index, const typename Accessor::AccessorData *local_data=nullptr)
TriaActiveIterator< Accessor > & operator++()
TriaActiveIterator< Accessor > & operator=(const TriaRawIterator< OtherAccessor > &)
typename TriaIterator< Accessor >::iterator_category iterator_category
TriaActiveIterator< Accessor > operator++(int)
typename TriaIterator< Accessor >::value_type value_type
TriaActiveIterator(const TriaIterator< Accessor > &)
typename TriaRawIterator< Accessor >::pointer pointer
TriaIterator(const TriaIterator< Accessor > &)
TriaIterator< Accessor > & operator++()
TriaIterator< Accessor > operator--(int)
typename TriaRawIterator< Accessor >::iterator_category iterator_category
TriaIterator< Accessor > & operator=(const TriaRawIterator< OtherAccessor > &)
typename TriaRawIterator< Accessor >::value_type value_type
TriaIterator< Accessor > operator++(int)
TriaIterator< Accessor > & operator=(const TriaIterator< Accessor > &)
typename TriaRawIterator< Accessor >::difference_type difference_type
TriaIterator< Accessor > & operator=(const TriaRawIterator< Accessor > &)
TriaIterator(const TriaAccessorBase< Accessor::structure_dimension, Accessor::dimension, Accessor::space_dimension > &tria_accessor, const typename Accessor::AccessorData *local_data)
typename TriaRawIterator< Accessor >::reference reference
TriaIterator< Accessor > & operator--()
TriaIterator(const Triangulation< Accessor::dimension, Accessor::space_dimension > *parent, const int level, const int index, const typename Accessor::AccessorData *local_data=nullptr)
TriaIterator< Accessor > & operator=(const TriaIterator< OtherAccessor > &)
TriaIterator(const TriaRawIterator< Accessor > &)
const Accessor * operator->() const
TriaRawIterator & operator=(const TriaRawIterator &)
bool operator>(const TriaRawIterator &) const
std::size_t memory_consumption() const
TriaRawIterator(const Triangulation< Accessor::dimension, Accessor::space_dimension > *parent, const int level, const int index, const typename AccessorType::AccessorData *local_data=nullptr)
TriaRawIterator(const TriaAccessorBase< Accessor::structure_dimension, Accessor::dimension, Accessor::space_dimension > &tria_accessor, const typename Accessor::AccessorData *local_data)
bool operator<(const TriaRawIterator &) const
TriaRawIterator(const TriaRawIterator &)
IteratorState::IteratorStates state() const
Accessor operator*() const
std::enable_if_t< std::is_convertible_v< OtherAccessor, Accessor >, bool > operator==(const TriaRawIterator< OtherAccessor > &) const
void print(StreamType &out) const
friend class TriaRawIterator
bool operator!=(const TriaRawIterator &) const
TriaRawIterator operator++(int)
std::bidirectional_iterator_tag iterator_category
TriaRawIterator & operator++()
const Accessor & access_any() const
TriaRawIterator & operator--()
TriaRawIterator operator--(int)
#define DEAL_II_NAMESPACE_OPEN
constexpr bool running_in_debug_mode()
#define DEAL_II_CXX20_REQUIRES(condition)
#define DEAL_II_NAMESPACE_CLOSE
static ::ExceptionBase & ExcAssignmentOfUnusedObject()
#define DeclException0(Exception0)
static ::ExceptionBase & ExcAssignmentOfInactiveObject()
#define Assert(cond, exc)
static ::ExceptionBase & ExcAdvanceInvalidObject()
static ::ExceptionBase & ExcInvalidComparison()
#define DeclException1(Exception1, type1, outsequence)
static ::ExceptionBase & ExcDereferenceInvalidObject(Accessor arg1)
static ::ExceptionBase & ExcDereferenceInvalidCell(Accessor arg1)
@ past_the_end
Iterator reached end of container.
@ valid
Iterator points to a valid object.
@ invalid
Iterator is invalid, probably due to an error.
SynchronousIterators< Iterators > & operator--(SynchronousIterators< Iterators > &a)
std::ostream & operator<<(std::ostream &out, const TriaRawIterator< Accessor > &i)