A lightweight object that gives access to all strict descendants of a given packet.
More...
template<bool const_>
class regina::PacketDescendants< const_ >
A lightweight object that gives access to all strict descendants of a given packet.
The purpose of this class is to support iteration through all strict descendants of a packet p using C++11 range-based for loops:
std::shared_ptr<Packet> parent = ...;
Represents a packet of information that may be individually edited or operated upon.
Definition: packet.h:219
PacketDescendants< false > descendants()
Returns a lightweight object for iterating through all strict descendants of this packet in the packe...
Definition: packet.h:4009
In Python, PacketDescendants is an iterable object:
parent = ...
for desc in parent.descendants():
...
Each object of this class will hold a std::shared_ptr to the packet whose descendants it gives access to. This guarantees that the packet will not be destroyed during iteration, but it also means that you must ensure that you dispose of these objects once you are finished with them.
These are lightweight objects, small enough to pass by value and swap with std::swap(), with no need for any specialised move operations or swap functions. Copies of a PacketDescendants will iterate over the descendants of the same underlying packet.
- Template Parameters
-
| const_ | Indicates whether this iterator should offer const or non-const access to the packet tree. |
- Python
- Instead of the C++ interface described here, in Python the classes PacketDescendants and SubtreeIterator together implement the Python iterable/iterator interface. The class PacketDescendants has just the single function
iter(), which returns a SubtreeIterator; then SubtreeIterator implements next(), which either returns the next descendant packet in the iteration or else throws a StopException if there are no more children to return. All iteration in Python is non-const (i.e., Python exclusively uses the classes where const_ is false).