15#ifndef dealii_tria_iterator_h
16#define dealii_tria_iterator_h
34template <
int dim,
int spacedim>
37template <
int,
int,
int>
219template <
typename Accessor>
259 template <
typename OtherAccessor>
271 const typename AccessorType::AccessorData *local_data =
nullptr);
282 template <
typename OtherAccessor>
293 Accessor::space_dimension> &tria_accessor,
294 const typename Accessor::AccessorData *local_data);
300 template <
typename OtherAccessor>
307 template <
typename OtherAccessor>
370 template <
typename OtherAccessor = Accessor>
371 std::enable_if_t<std::is_convertible_v<OtherAccessor, Accessor>,
bool>
470 template <
typename StreamType>
472 print(StreamType &out)
const;
502 <<
"You tried to dereference a cell iterator for which this "
503 <<
"is not possible. More information on this iterator: "
504 <<
"level=" << arg1.level() <<
", index=" << arg1.index()
517 <<
"You tried to dereference an iterator for which this "
518 <<
"is not possible. More information on this iterator: "
519 <<
"index=" << arg1.index() <<
", state="
550 template <
typename SomeAccessor>
552 template <
typename SomeAccessor>
554 template <
typename SomeAccessor>
566template <
typename Accessor>
605 const typename Accessor::AccessorData *local_data =
nullptr);
611 template <
typename OtherAccessor>
623 template <
typename OtherAccessor>
633 Accessor::space_dimension> &tria_accessor,
634 const typename Accessor::AccessorData *local_data);
641 template <
typename OtherAccessor>
648 template <
typename OtherAccessor>
668 template <
class OtherAccessor>
677 template <
class OtherAccessor>
747template <
typename Accessor>
797 const typename Accessor::AccessorData *local_data =
nullptr);
808 template <
typename OtherAccessor>
819 Accessor::space_dimension> &tria_accessor,
820 const typename Accessor::AccessorData *local_data);
833 template <
typename OtherAccessor>
860 template <
class OtherAccessor>
869 template <
class OtherAccessor>
878 template <
class OtherAccessor>
941template <
typename Accessor>
948template <
typename Accessor>
949template <
typename OtherAccessor>
956template <
typename Accessor>
957template <
typename OtherAccessor>
960 : accessor(i.accessor)
965template <
typename Accessor>
966template <
typename OtherAccessor>
969 : accessor(i.accessor)
974template <
typename Accessor>
975template <
typename OtherAccessor>
978 : accessor(i.accessor)
983template <
typename Accessor>
987 Assert(Accessor::structure_dimension != Accessor::dimension ||
989 ExcDereferenceInvalidCell(accessor));
990 Assert(Accessor::structure_dimension == Accessor::dimension ||
992 ExcDereferenceInvalidObject(accessor));
999template <
typename Accessor>
1000inline const Accessor &
1008template <
typename Accessor>
1009inline const Accessor *
1017template <
typename Accessor>
1026template <
typename Accessor>
1030 return accessor.state();
1035template <
typename Accessor>
1041 ExcDereferenceInvalidObject(accessor));
1043 ExcDereferenceInvalidObject(other.
accessor));
1045 Assert(&accessor.get_triangulation() == &other.
accessor.get_triangulation(),
1046 ExcInvalidComparison());
1054 return ((**
this) < (*other));
1059template <
typename Accessor>
1064 return (other < *
this);
1069template <
typename Accessor>
1081template <
typename Accessor>
1093template <
typename Accessor>
1094template <
typename StreamType>
1098 if (Accessor::structure_dimension == Accessor::dimension)
1099 out << accessor.level() <<
'.' << accessor.index();
1101 out << accessor.index();
1106template <
typename Accessor>
1115template <
typename Accessor>
1116template <
typename OtherAccessor>
1124template <
typename Accessor>
1125template <
typename OtherAccessor>
1133template <
typename Accessor>
1134template <
typename OtherAccessor>
1151template <
typename Accessor>
1152template <
typename OtherAccessor>
1168template <
typename Accessor>
1169template <
typename OtherAccessor>
1177template <
typename Accessor>
1178template <
typename OtherAccessor>
1203template <
typename Accessor>
1204inline std::ostream &
1218template <
typename Accessor>
1219inline std::ostream &
1233template <
typename Accessor>
1234inline std::ostream &
1247template <
typename Accessor>
1249 : accessor(nullptr, -2, -2, nullptr)
1253template <
typename Accessor>
1256 : accessor(i.accessor)
1261template <
typename Accessor>
1266 const typename Accessor::AccessorData *local_data)
1271template <
typename Accessor>
1274 Accessor::dimension,
1275 Accessor::space_dimension> &tria_accessor,
1276 const typename Accessor::AccessorData *local_data)
1277 : accessor(nullptr, -2, -2, local_data)
1279 accessor.copy_from(tria_accessor);
1283template <
typename Accessor>
1294template <
typename Accessor>
1295template <
typename OtherAccessor>
1296inline std::enable_if_t<std::is_convertible_v<OtherAccessor, Accessor>,
bool>
1304template <
typename Accessor>
1309 return !(*
this == other);
1313template <
typename Accessor>
1324template <
typename Accessor>
1338template <
typename Accessor>
1344template <
typename Accessor>
1350template <
typename Accessor>
1362 Assert(this->accessor.used(), ExcAssignmentOfUnusedObject());
1367template <
typename Accessor>
1372 const typename Accessor::AccessorData *local_data)
1383 Assert(this->accessor.used(), ExcAssignmentOfUnusedObject());
1388template <
typename Accessor>
1391 Accessor::dimension,
1392 Accessor::space_dimension> &tria_accessor,
1393 const typename Accessor::AccessorData *local_data)
1404 Assert(this->accessor.used(), ExcAssignmentOfUnusedObject());
1409template <
typename Accessor>
1413 this->accessor.copy_from(i.
accessor);
1418template <
typename Accessor>
1419template <
typename OtherAccessor>
1423 this->accessor.copy_from(i.
accessor);
1428template <
typename Accessor>
1432 this->accessor.copy_from(i.
accessor);
1441 Assert(this->accessor.used(), ExcAssignmentOfUnusedObject());
1447template <
typename Accessor>
1448template <
typename OtherAccessor>
1452 this->accessor.copy_from(i.
accessor);
1461 Assert(this->accessor.used(), ExcAssignmentOfUnusedObject());
1467template <
typename Accessor>
1473 if (this->accessor.used() ==
true)
1479template <
typename Accessor>
1490template <
typename Accessor>
1496 if (this->accessor.used() ==
true)
1502template <
typename Accessor>
1516template <
typename Accessor>
1522template <
typename Accessor>
1529template <
typename Accessor>
1542 Assert(this->accessor.has_children() ==
false,
1543 ExcAssignmentOfInactiveObject());
1548template <
typename Accessor>
1561 Assert(this->accessor.has_children() ==
false,
1562 ExcAssignmentOfInactiveObject());
1567template <
typename Accessor>
1572 const typename Accessor::AccessorData *local_data)
1583 Assert(this->accessor.has_children() ==
false,
1584 ExcAssignmentOfInactiveObject());
1589template <
typename Accessor>
1592 Accessor::dimension,
1593 Accessor::space_dimension> &tria_accessor,
1594 const typename Accessor::AccessorData *local_data)
1605 Assert(this->accessor.has_children() ==
false,
1606 ExcAssignmentOfInactiveObject());
1611template <
typename Accessor>
1615 this->accessor.copy_from(i.
accessor);
1620template <
typename Accessor>
1621template <
class OtherAccessor>
1626 this->accessor.copy_from(i.
accessor);
1631template <
typename Accessor>
1635 this->accessor.copy_from(i.
accessor);
1644 Assert(this->accessor.used() && this->accessor.has_children() ==
false,
1645 ExcAssignmentOfInactiveObject());
1651template <
typename Accessor>
1652template <
class OtherAccessor>
1656 this->accessor.copy_from(i.
accessor);
1665 Assert(this->accessor.used() && this->accessor.has_children() ==
false,
1666 ExcAssignmentOfInactiveObject());
1672template <
typename Accessor>
1673template <
class OtherAccessor>
1677 this->accessor.copy_from(i.
accessor);
1686 Assert(this->accessor.has_children() ==
false,
1687 ExcAssignmentOfInactiveObject());
1693template <
typename Accessor>
1697 this->accessor.copy_from(i.
accessor);
1706 Assert(this->accessor.has_children() ==
false,
1707 ExcAssignmentOfInactiveObject());
1713template <
typename Accessor>
1719 if (this->accessor.has_children() ==
false)
1725template <
typename Accessor>
1736template <
typename Accessor>
1742 if (this->accessor.has_children() ==
false)
1748template <
typename Accessor>
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
#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)
SynchronousIterators< Iterators > & operator++(SynchronousIterators< Iterators > &a)
std::ostream & operator<<(std::ostream &out, const TriaRawIterator< Accessor > &i)