deal.II version GIT relicensing-6809-ge913b9bb34 2026-09-25 17:20:01+00:00
\(\newcommand{\dealvcentcolon}{\mathrel{\mathop{:}}}\) \(\newcommand{\dealcoloneq}{\dealvcentcolon\mathrel{\mkern-1.2mu}=}\) \(\newcommand{\jump}[1]{\left[\!\left[ #1 \right]\!\right]}\) \(\newcommand{\average}[1]{\left\{\!\left\{ #1 \right\}\!\right\}}\)
Loading...
Searching...
No Matches
tria_iterator.h
Go to the documentation of this file.
1// -----------------------------------------------------------------------------
2//
3// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception OR LGPL-2.1-or-later
4// Copyright (C) 1998 - 2025 by the deal.II authors
5//
6// This file is part of the deal.II library.
7//
8// Detailed license information governing the source code and contributions
9// can be found in LICENSE.md and CONTRIBUTING.md at the top level directory.
10//
11// -----------------------------------------------------------------------------
12
13#ifndef dealii_tria_iterator_h
14#define dealii_tria_iterator_h
15
16
17#include <deal.II/base/config.h>
18
20#include <deal.II/base/point.h>
22
24
25#include <iterator>
26#include <ostream>
27
29
30// Forward declarations
31#ifndef DOXYGEN
32template <int dim, int spacedim>
34class Triangulation;
35template <int, int, int>
37
38template <typename>
39class TriaIterator;
40template <typename>
42#endif
43
44
45
217template <typename Accessor>
219{
220public:
226 using AccessorType = Accessor;
227
233
238
251 explicit TriaRawIterator(const Accessor &a);
252
257 template <typename OtherAccessor>
258 explicit TriaRawIterator(const OtherAccessor &a);
259
267 const int level,
268 const int index,
269 const typename AccessorType::AccessorData *local_data = nullptr);
270
280 template <typename OtherAccessor>
282
289 const TriaAccessorBase<Accessor::structure_dimension,
290 Accessor::dimension,
291 Accessor::space_dimension> &tria_accessor,
292 const typename Accessor::AccessorData *local_data);
293
298 template <typename OtherAccessor>
300
305 template <typename OtherAccessor>
307
325 Accessor
326 operator*() const;
327
335 const Accessor *
336 operator->() const;
337
341 Accessor *
342 operator->();
343
344
354 const Accessor &
355 access_any() const;
356
364
368 template <typename OtherAccessor = Accessor>
369 std::enable_if_t<std::is_convertible_v<OtherAccessor, Accessor>, bool>
371
375 bool
377
403 bool
404 operator<(const TriaRawIterator &) const;
405
410 bool
411 operator>(const TriaRawIterator &) const;
412
423 operator++();
424
438
444 operator--();
445
462 state() const;
463
468 template <typename StreamType>
469 void
470 print(StreamType &out) const;
471
472
477 std::size_t
478 memory_consumption() const;
479
485 using iterator_category = std::bidirectional_iterator_tag;
486 using value_type = Accessor;
488 using pointer = Accessor *;
489 using reference = Accessor &;
490
499 Accessor,
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()
503 << ", state="
504 << (arg1.state() == IteratorState::valid ?
505 "valid" :
506 (arg1.state() == IteratorState::past_the_end ?
507 "past_the_end" :
508 "invalid")));
509
514 Accessor,
515 << "You tried to dereference an iterator for which this "
516 << "is not possible. More information on this iterator: "
517 << "index=" << arg1.index() << ", state="
518 << (arg1.state() == IteratorState::valid ?
519 "valid" :
520 (arg1.state() == IteratorState::past_the_end ?
521 "past_the_end" :
522 "invalid")));
523
532
534protected:
538 Accessor accessor;
539
540
541 // Make all other iterator class templates friends of this class. This is
542 // necessary for the implementation of conversion constructors.
543 //
544 // In fact, we would not need them to be friends if they were for different
545 // dimensions, but the compiler dislikes giving a fixed dimension and
546 // variable accessor since then it says that would be a partial
547 // specialization.
548 template <typename SomeAccessor>
549 friend class TriaRawIterator;
550 template <typename SomeAccessor>
551 friend class TriaIterator;
552 template <typename SomeAccessor>
553 friend class TriaActiveIterator;
554};
555
556
564template <typename Accessor>
565class TriaIterator : public TriaRawIterator<Accessor>
566{
567public:
573
578
589
601 const int level,
602 const int index,
603 const typename Accessor::AccessorData *local_data = nullptr);
604
609 template <typename OtherAccessor>
610 explicit TriaIterator(const OtherAccessor &a);
611
621 template <typename OtherAccessor>
623
629 TriaIterator(const TriaAccessorBase<Accessor::structure_dimension,
630 Accessor::dimension,
631 Accessor::space_dimension> &tria_accessor,
632 const typename Accessor::AccessorData *local_data);
633
639 template <typename OtherAccessor>
641
646 template <typename OtherAccessor>
648
654
661
666 template <class OtherAccessor>
669
675 template <class OtherAccessor>
678
690
702
709
728
733};
734
735
745template <typename Accessor>
746class TriaActiveIterator : public TriaIterator<Accessor>
747{
748public:
754
759
770
781
793 const int level,
794 const int index,
795 const typename Accessor::AccessorData *local_data = nullptr);
796
806 template <typename OtherAccessor>
808
815 const TriaAccessorBase<Accessor::structure_dimension,
816 Accessor::dimension,
817 Accessor::space_dimension> &tria_accessor,
818 const typename Accessor::AccessorData *local_data);
819
831 template <typename OtherAccessor>
833
839
846
853
858 template <class OtherAccessor>
861
867 template <class OtherAccessor>
870
876 template <class OtherAccessor>
879
887
903
910
928
933};
934
935
936/*----------------------- Inline functions -------------------*/
937
938
939template <typename Accessor>
941 : accessor(a)
942{}
943
944
945
946template <typename Accessor>
947template <typename OtherAccessor>
948inline TriaRawIterator<Accessor>::TriaRawIterator(const OtherAccessor &a)
949 : accessor(a)
950{}
951
952
953
954template <typename Accessor>
955template <typename OtherAccessor>
958 : accessor(i.accessor)
959{}
960
961
962
963template <typename Accessor>
964template <typename OtherAccessor>
967 : accessor(i.accessor)
968{}
969
970
971
972template <typename Accessor>
973template <typename OtherAccessor>
976 : accessor(i.accessor)
977{}
978
979
980
981template <typename Accessor>
982inline Accessor
984{
985 Assert(Accessor::structure_dimension != Accessor::dimension ||
986 state() == IteratorState::valid,
987 ExcDereferenceInvalidCell(accessor));
988 Assert(Accessor::structure_dimension == Accessor::dimension ||
989 state() == IteratorState::valid,
990 ExcDereferenceInvalidObject(accessor));
991
992 return accessor;
993}
994
995
996
997template <typename Accessor>
998inline const Accessor &
1000{
1001 return accessor;
1002}
1003
1004
1005
1006template <typename Accessor>
1007inline const Accessor *
1009{
1010 return &accessor;
1011}
1012
1013
1014
1015template <typename Accessor>
1016inline Accessor *
1018{
1019 return &accessor;
1020}
1021
1022
1023
1024template <typename Accessor>
1027{
1028 return accessor.state();
1029}
1030
1031
1032
1033template <typename Accessor>
1034inline bool
1036 const TriaRawIterator<Accessor> &other) const
1037{
1038 Assert(state() != IteratorState::invalid,
1039 ExcDereferenceInvalidObject(accessor));
1041 ExcDereferenceInvalidObject(other.accessor));
1042
1043 Assert(&accessor.get_triangulation() == &other.accessor.get_triangulation(),
1044 ExcInvalidComparison());
1045
1046 // Deal with iterators past end
1047 if (state() == IteratorState::past_the_end)
1048 return false;
1049 if (other.state() == IteratorState::past_the_end)
1050 return true;
1051
1052 return ((**this) < (*other));
1053}
1054
1055
1056
1057template <typename Accessor>
1058inline bool
1060 const TriaRawIterator<Accessor> &other) const
1061{
1062 return (other < *this);
1063}
1064
1065
1066
1067template <typename Accessor>
1070{
1071 Assert(state() == IteratorState::valid, ExcAdvanceInvalidObject());
1072
1073 ++accessor;
1074 return *this;
1075}
1076
1077
1078
1079template <typename Accessor>
1082{
1083 Assert(state() == IteratorState::valid, ExcAdvanceInvalidObject());
1084
1085 --accessor;
1086 return *this;
1087}
1088
1089
1090
1091template <typename Accessor>
1092template <typename StreamType>
1093inline void
1095{
1096 if (Accessor::structure_dimension == Accessor::dimension)
1097 out << accessor.level() << '.' << accessor.index();
1098 else
1099 out << accessor.index();
1100}
1101
1102
1103
1104template <typename Accessor>
1105inline std::size_t
1110
1111
1112
1113template <typename Accessor>
1114template <typename OtherAccessor>
1117 : TriaRawIterator<Accessor>(i.accessor)
1118{}
1119
1120
1121
1122template <typename Accessor>
1123template <typename OtherAccessor>
1126 : TriaRawIterator<Accessor>(i.accessor)
1127{}
1128
1129
1130
1131template <typename Accessor>
1132template <typename OtherAccessor>
1135 : TriaRawIterator<Accessor>(i.accessor)
1136{
1137 if constexpr (running_in_debug_mode())
1138 {
1139 // do this like this, because:
1140 // if we write
1141 // "Assert (IteratorState::past_the_end || used)"
1142 // used() is called anyway, even if
1143 // state==IteratorState::past_the_end, and will then
1144 // throw the exception!
1145 if (this->state() != IteratorState::past_the_end)
1147 }
1148}
1149
1150template <typename Accessor>
1151template <typename OtherAccessor>
1153 : TriaRawIterator<Accessor>(a)
1154{
1155 if constexpr (running_in_debug_mode())
1156 {
1157 // do this like this, because:
1158 // if we write
1159 // "Assert (IteratorState::past_the_end || used)"
1160 // used() is called anyway, even if
1161 // state==IteratorState::past_the_end, and will then
1162 // throw the exception!
1163 if (this->state() != IteratorState::past_the_end)
1165 }
1166}
1167
1168template <typename Accessor>
1169template <typename OtherAccessor>
1174
1175
1176
1177template <typename Accessor>
1178template <typename OtherAccessor>
1181 : TriaIterator<Accessor>(i)
1182{
1183 if constexpr (running_in_debug_mode())
1184 {
1185 // do this like this, because:
1186 // if we write
1187 // "Assert (IteratorState::past_the_end || !has_children())"
1188 // has_children() is called anyway, even if
1189 // state==IteratorState::past_the_end, and will then
1190 // throw the exception!
1191 if (this->state() != IteratorState::past_the_end)
1192 Assert(this->accessor.has_children() == false,
1194 }
1195}
1196
1197
1198
1204template <typename Accessor>
1205inline std::ostream &
1206operator<<(std::ostream &out, const TriaRawIterator<Accessor> &i)
1207{
1208 i.print(out);
1209 return out;
1210}
1211
1212
1213
1219template <typename Accessor>
1220inline std::ostream &
1221operator<<(std::ostream &out, const TriaIterator<Accessor> &i)
1222{
1223 i.print(out);
1224 return out;
1225}
1226
1227
1228
1234template <typename Accessor>
1235inline std::ostream &
1236operator<<(std::ostream &out, const TriaActiveIterator<Accessor> &i)
1237{
1238 i.print(out);
1239 return out;
1240}
1241
1242
1243#ifndef DOXYGEN
1244
1245/*------------------------ Functions: TriaRawIterator ------------------*/
1246
1247
1248template <typename Accessor>
1250 : accessor(nullptr, -2, -2, nullptr)
1251{}
1252
1253
1254template <typename Accessor>
1257 : accessor(i.accessor)
1258{}
1259
1260
1261
1262template <typename Accessor>
1265 const int level,
1266 const int index,
1267 const typename Accessor::AccessorData *local_data)
1268 : accessor(parent, level, index, local_data)
1269{}
1270
1271
1272template <typename Accessor>
1274 const TriaAccessorBase<Accessor::structure_dimension,
1275 Accessor::dimension,
1276 Accessor::space_dimension> &tria_accessor,
1277 const typename Accessor::AccessorData *local_data)
1278 : accessor(nullptr, -2, -2, local_data)
1279{
1280 accessor.copy_from(tria_accessor);
1281}
1282
1283
1284template <typename Accessor>
1287{
1288 accessor.copy_from(i.accessor);
1289
1290 return *this;
1291}
1292
1293
1294
1295template <typename Accessor>
1296template <typename OtherAccessor>
1297inline std::enable_if_t<std::is_convertible_v<OtherAccessor, Accessor>, bool>
1299 const TriaRawIterator<OtherAccessor> &other) const
1300{
1301 return accessor == other.accessor;
1302}
1303
1304
1305template <typename Accessor>
1306inline bool
1308 const TriaRawIterator<Accessor> &other) const
1309{
1310 return !(*this == other);
1311}
1312
1313
1314template <typename Accessor>
1317{
1318 TriaRawIterator<Accessor> tmp(*this);
1319 operator++();
1320
1321 return tmp;
1322}
1323
1324
1325template <typename Accessor>
1328{
1329 TriaRawIterator<Accessor> tmp(*this);
1330 operator--();
1331
1332 return tmp;
1333}
1334
1335
1336/*----------------------- functions: TriaIterator ---------------*/
1337
1338
1339template <typename Accessor>
1341 : TriaRawIterator<Accessor>()
1342{}
1343
1344
1345template <typename Accessor>
1347 : TriaRawIterator<Accessor>(i.accessor)
1348{}
1349
1350
1351template <typename Accessor>
1353 : TriaRawIterator<Accessor>(i.accessor)
1354{
1355 if constexpr (running_in_debug_mode())
1356 {
1357 // do this like this, because:
1358 // if we write
1359 // "Assert (IteratorState::past_the_end || used)"
1360 // used() is called anyway, even if
1361 // state==IteratorState::past_the_end, and will then
1362 // throw the exception!
1363 if (this->state() != IteratorState::past_the_end)
1364 Assert(this->accessor.used(), ExcAssignmentOfUnusedObject());
1365 }
1366}
1367
1368
1369template <typename Accessor>
1372 const int level,
1373 const int index,
1374 const typename Accessor::AccessorData *local_data)
1375 : TriaRawIterator<Accessor>(parent, level, index, local_data)
1376{
1377 if constexpr (running_in_debug_mode())
1378 {
1379 // do this like this, because:
1380 // if we write
1381 // "Assert (IteratorState::past_the_end || used)"
1382 // used() is called anyway, even if
1383 // state==IteratorState::past_the_end, and will then
1384 // throw the exception!
1385 if (this->state() != IteratorState::past_the_end)
1386 Assert(this->accessor.used(), ExcAssignmentOfUnusedObject());
1387 }
1388}
1389
1390
1391template <typename Accessor>
1393 const TriaAccessorBase<Accessor::structure_dimension,
1394 Accessor::dimension,
1395 Accessor::space_dimension> &tria_accessor,
1396 const typename Accessor::AccessorData *local_data)
1397 : TriaRawIterator<Accessor>(tria_accessor, local_data)
1398{
1399 if constexpr (running_in_debug_mode())
1400 {
1401 // do this like this, because:
1402 // if we write
1403 // "Assert (IteratorState::past_the_end || used)"
1404 // used() is called anyway, even if
1405 // state==IteratorState::past_the_end, and will then
1406 // throw the exception!
1407 if (this->state() != IteratorState::past_the_end)
1408 Assert(this->accessor.used(), ExcAssignmentOfUnusedObject());
1409 }
1410}
1411
1412
1413template <typename Accessor>
1416{
1417 this->accessor.copy_from(i.accessor);
1418 return *this;
1419}
1420
1421
1422template <typename Accessor>
1423template <typename OtherAccessor>
1426{
1427 this->accessor.copy_from(i.accessor);
1428 return *this;
1429}
1430
1431
1432template <typename Accessor>
1435{
1436 this->accessor.copy_from(i.accessor);
1437 if constexpr (running_in_debug_mode())
1438 {
1439 // do this like this, because:
1440 // if we write
1441 // "Assert (IteratorState::past_the_end || used)"
1442 // used() is called anyway, even if
1443 // state==IteratorState::past_the_end, and will then
1444 // throw the exception!
1445 if (this->state() != IteratorState::past_the_end)
1446 Assert(this->accessor.used(), ExcAssignmentOfUnusedObject());
1447 }
1448 return *this;
1449}
1450
1451
1452template <typename Accessor>
1453template <typename OtherAccessor>
1456{
1457 this->accessor.copy_from(i.accessor);
1458 if constexpr (running_in_debug_mode())
1459 {
1460 // do this like this, because:
1461 // if we write
1462 // "Assert (IteratorState::past_the_end || used)"
1463 // used() is called anyway, even if
1464 // state==IteratorState::past_the_end, and will then
1465 // throw the exception!
1466 if (this->state() != IteratorState::past_the_end)
1467 Assert(this->accessor.used(), ExcAssignmentOfUnusedObject());
1468 }
1469 return *this;
1470}
1471
1472
1473template <typename Accessor>
1476{
1478 (this->state() == IteratorState::valid))
1479 if (this->accessor.used() == true)
1480 return *this;
1481 return *this;
1482}
1483
1484
1485template <typename Accessor>
1488{
1489 TriaIterator<Accessor> tmp(*this);
1490 operator++();
1491
1492 return tmp;
1493}
1494
1495
1496template <typename Accessor>
1499{
1501 (this->state() == IteratorState::valid))
1502 if (this->accessor.used() == true)
1503 return *this;
1504 return *this;
1505}
1506
1507
1508template <typename Accessor>
1511{
1512 TriaIterator<Accessor> tmp(*this);
1513 operator--();
1514
1515 return tmp;
1516}
1517
1518
1519/*----------------------- functions: TriaActiveIterator ---------------*/
1520
1521
1522template <typename Accessor>
1524 : TriaIterator<Accessor>()
1525{}
1526
1527
1528template <typename Accessor>
1531 : TriaIterator<Accessor>(static_cast<TriaIterator<Accessor>>(i))
1532{}
1533
1534
1535template <typename Accessor>
1538 : TriaIterator<Accessor>(i)
1539{
1540 if constexpr (running_in_debug_mode())
1541 {
1542 // do this like this, because:
1543 // if we write
1544 // "Assert (IteratorState::past_the_end || !has_children())"
1545 // has_children() is called anyway, even if
1546 // state==IteratorState::past_the_end, and will then
1547 // throw the exception!
1548 if (this->state() != IteratorState::past_the_end)
1549 Assert(this->accessor.has_children() == false,
1550 ExcAssignmentOfInactiveObject());
1551 }
1552}
1553
1554
1555template <typename Accessor>
1557 const TriaIterator<Accessor> &i)
1558 : TriaIterator<Accessor>(i)
1559{
1560 if constexpr (running_in_debug_mode())
1561 {
1562 // do this like this, because:
1563 // if we write
1564 // "Assert (IteratorState::past_the_end || !has_children())"
1565 // has_children() is called anyway, even if
1566 // state==IteratorState::past_the_end, and will then
1567 // throw the exception!
1568 if (this->state() != IteratorState::past_the_end)
1569 Assert(this->accessor.has_children() == false,
1570 ExcAssignmentOfInactiveObject());
1571 }
1572}
1573
1574
1575template <typename Accessor>
1578 const int level,
1579 const int index,
1580 const typename Accessor::AccessorData *local_data)
1581 : TriaIterator<Accessor>(parent, level, index, local_data)
1582{
1583 if constexpr (running_in_debug_mode())
1584 {
1585 // do this like this, because:
1586 // if we write
1587 // "Assert (IteratorState::past_the_end || !has_children())"
1588 // has_children() is called anyway, even if
1589 // state==IteratorState::past_the_end, and will then
1590 // throw the exception!
1591 if (this->state() != IteratorState::past_the_end)
1592 Assert(this->accessor.has_children() == false,
1593 ExcAssignmentOfInactiveObject());
1594 }
1595}
1596
1597
1598template <typename Accessor>
1600 const TriaAccessorBase<Accessor::structure_dimension,
1601 Accessor::dimension,
1602 Accessor::space_dimension> &tria_accessor,
1603 const typename Accessor::AccessorData *local_data)
1604 : TriaIterator<Accessor>(tria_accessor, local_data)
1605{
1606 if constexpr (running_in_debug_mode())
1607 {
1608 // do this like this, because:
1609 // if we write
1610 // "Assert (IteratorState::past_the_end || !has_children())"
1611 // has_children() is called anyway, even if
1612 // state==IteratorState::past_the_end, and will then
1613 // throw the exception!
1614 if (this->state() != IteratorState::past_the_end)
1615 Assert(this->accessor.has_children() == false,
1616 ExcAssignmentOfInactiveObject());
1617 }
1618}
1619
1620
1621template <typename Accessor>
1624{
1625 this->accessor.copy_from(i.accessor);
1626 return *this;
1627}
1628
1629
1630template <typename Accessor>
1631template <class OtherAccessor>
1635{
1636 this->accessor.copy_from(i.accessor);
1637 return *this;
1638}
1639
1640
1641template <typename Accessor>
1644{
1645 this->accessor.copy_from(i.accessor);
1646 if constexpr (running_in_debug_mode())
1647 {
1648 // do this like this, because:
1649 // if we write
1650 // "Assert (IteratorState::past_the_end || !has_children())"
1651 // has_children() is called anyway, even if
1652 // state==IteratorState::past_the_end, and will then
1653 // throw the exception!
1654 if (this->state() != IteratorState::past_the_end)
1655 Assert(this->accessor.used() && this->accessor.has_children() == false,
1656 ExcAssignmentOfInactiveObject());
1657 }
1658 return *this;
1659}
1660
1661
1662template <typename Accessor>
1663template <class OtherAccessor>
1666{
1667 this->accessor.copy_from(i.accessor);
1668 if constexpr (running_in_debug_mode())
1669 {
1670 // do this like this, because:
1671 // if we write
1672 // "Assert (IteratorState::past_the_end || !has_children())"
1673 // has_children() is called anyway, even if
1674 // state==IteratorState::past_the_end, and will then
1675 // throw the exception!
1676 if (this->state() != IteratorState::past_the_end)
1677 Assert(this->accessor.used() && this->accessor.has_children() == false,
1678 ExcAssignmentOfInactiveObject());
1679 }
1680 return *this;
1681}
1682
1683
1684template <typename Accessor>
1685template <class OtherAccessor>
1688{
1689 this->accessor.copy_from(i.accessor);
1690 if constexpr (running_in_debug_mode())
1691 {
1692 // do this like this, because:
1693 // if we write
1694 // "Assert (IteratorState::past_the_end || !has_children())"
1695 // has_children() is called anyway, even if
1696 // state==IteratorState::past_the_end, and will then
1697 // throw the exception!
1698 if (this->state() != IteratorState::past_the_end)
1699 Assert(this->accessor.has_children() == false,
1700 ExcAssignmentOfInactiveObject());
1701 }
1702 return *this;
1703}
1704
1705
1706template <typename Accessor>
1709{
1710 this->accessor.copy_from(i.accessor);
1711 if constexpr (running_in_debug_mode())
1712 {
1713 // do this like this, because:
1714 // if we write
1715 // "Assert (IteratorState::past_the_end || !has_children())"
1716 // has_children() is called anyway, even if
1717 // state==IteratorState::past_the_end, and will then
1718 // throw the exception!
1719 if (this->state() != IteratorState::past_the_end)
1720 Assert(this->accessor.has_children() == false,
1721 ExcAssignmentOfInactiveObject());
1722 }
1723 return *this;
1724}
1725
1726
1727template <typename Accessor>
1730{
1732 (this->state() == IteratorState::valid))
1733 if (this->accessor.has_children() == false)
1734 return *this;
1735 return *this;
1736}
1737
1738
1739template <typename Accessor>
1742{
1744 operator++();
1745
1746 return tmp;
1747}
1748
1749
1750template <typename Accessor>
1753{
1755 (this->state() == IteratorState::valid))
1756 if (this->accessor.has_children() == false)
1757 return *this;
1758 return *this;
1759}
1760
1761
1762template <typename Accessor>
1765{
1767 operator--();
1768
1769 return tmp;
1770}
1771
1772#endif
1773
1775
1776#endif
*  *  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 &)
Accessor * pointer
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
Accessor AccessorType
bool operator!=(const TriaRawIterator &) const
TriaRawIterator operator++(int)
std::bidirectional_iterator_tag iterator_category
TriaRawIterator & operator++()
const Accessor & access_any() const
Accessor & reference
TriaRawIterator & operator--()
TriaRawIterator operator--(int)
#define DEAL_II_NAMESPACE_OPEN
Definition config.h:38
constexpr bool running_in_debug_mode()
Definition config.h:76
#define DEAL_II_CXX20_REQUIRES(condition)
Definition config.h:249
#define DEAL_II_NAMESPACE_CLOSE
Definition config.h:39
unsigned int level
Definition grid_out.cc:4642
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)