Regina 7.0 Calculation Engine
Public Types | Public Member Functions | List of all members
regina::ChildIterator< const_ > Class Template Reference

A forward iterator for iterating through all immediate children of a given packet. More...

#include <packet/packet.h>

Public Types

using value_type = typename std::conditional< const_, const Packet, Packet >::type
 Indicates what the iterator points to. More...
 
using iterator_category = std::forward_iterator_tag
 Declares this to be a forward iterator type. More...
 
using difference_type = ptrdiff_t
 The type obtained by subtracting iterators. More...
 
using pointer = value_type *
 A pointer to value_type. More...
 
using reference = value_type &
 A reference to value_type. More...
 

Public Member Functions

 ChildIterator ()=default
 Creates a past-the-end iterator. More...
 
 ChildIterator (const ChildIterator &)=default
 Default copy constructor. More...
 
 ChildIterator (std::shared_ptr< value_type > current)
 Creates a new iterator pointing to the given child packet. More...
 
ChildIteratoroperator= (const ChildIterator &)=default
 Default copy assignment operator. More...
 
bool operator== (const ChildIterator &rhs) const
 Tests whether this and the given iterator are equal. More...
 
bool operator!= (const ChildIterator &rhs) const
 Tests whether this and the given iterator are different. More...
 
ChildIteratoroperator++ ()
 Preincrement operator. More...
 
ChildIterator operator++ (int)
 Postincrement operator. More...
 
value_typeoperator* () const
 Returns the packet that this iterator is currently pointing to. More...
 
 operator bool () const
 Identifies whether this iterator is dereferencable. More...
 

Detailed Description

template<bool const_>
class regina::ChildIterator< const_ >

A forward iterator for iterating through all immediate children of a given packet.

Each iterator will hold a std::shared_ptr to the packet whose children it is iterating over. This guarantees that the packet will not be destroyed mid-iteration, but it also means that you must ensure that you dispose of your iterators once you are finished with them.

Template Parameters
const_Indicates whether this iterator should offer const or non-const access to the child packets.
Python
Instead of the C++ interface described here, in Python the classes PacketChildren and ChildIterator together implement the Python iterable/iterator interface. The class PacketChildren has just the single function iter(), which returns a ChildIterator; then ChildIterator implements next(), which either returns the next child 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).

Member Typedef Documentation

◆ difference_type

template<bool const_>
using regina::ChildIterator< const_ >::difference_type = ptrdiff_t

The type obtained by subtracting iterators.

◆ iterator_category

template<bool const_>
using regina::ChildIterator< const_ >::iterator_category = std::forward_iterator_tag

Declares this to be a forward iterator type.

◆ pointer

template<bool const_>
using regina::ChildIterator< const_ >::pointer = value_type*

A pointer to value_type.

◆ reference

template<bool const_>
using regina::ChildIterator< const_ >::reference = value_type&

A reference to value_type.

◆ value_type

template<bool const_>
using regina::ChildIterator< const_ >::value_type = typename std::conditional<const_, const Packet, Packet>::type

Indicates what the iterator points to.

This is either Packet or const Packet, according to the template argument const_.

Constructor & Destructor Documentation

◆ ChildIterator() [1/3]

template<bool const_>
regina::ChildIterator< const_ >::ChildIterator ( )
default

Creates a past-the-end iterator.

Python
Not present. The only way to create a ChildIterator is via Packet::children().

◆ ChildIterator() [2/3]

template<bool const_>
regina::ChildIterator< const_ >::ChildIterator ( const ChildIterator< const_ > &  )
default

Default copy constructor.

Python
Not present. The only way to create a ChildIterator is via Packet::children().

◆ ChildIterator() [3/3]

template<bool const_>
regina::ChildIterator< const_ >::ChildIterator ( std::shared_ptr< value_type current)
inline

Creates a new iterator pointing to the given child packet.

Python
Not present. The only way to create a ChildIterator is via Packet::children().
Parameters
currentthe child packet that the new iterator should point to, or null if the new iterator should be past-the-end.

Member Function Documentation

◆ operator bool()

template<bool const_>
regina::ChildIterator< const_ >::operator bool
inline

Identifies whether this iterator is dereferencable.

Python
Not present; instead this class implements next(), which either returns the current child packet and increments the iterator, or else throws a StopIteration exception if the iterator is not dereferencable.
Returns
true if and only if this is dereferencable (i.e., not past-the-end).

◆ operator!=()

template<bool const_>
bool regina::ChildIterator< const_ >::operator!= ( const ChildIterator< const_ > &  rhs) const
inline

Tests whether this and the given iterator are different.

Returns
true if and only if the two iterators are different.

◆ operator*()

template<bool const_>
ChildIterator< const_ >::value_type & regina::ChildIterator< const_ >::operator*
inline

Returns the packet that this iterator is currently pointing to.

Python
Not present; instead this class implements next(), which either returns the current child packet and increments the iterator, or else throws a StopIteration exception if the iterator is past-the-end.
Returns
the current packet.

◆ operator++() [1/2]

template<bool const_>
ChildIterator< const_ > & regina::ChildIterator< const_ >::operator++
inline

Preincrement operator.

Python
Not present; instead this class implements next(), which either returns the current child packet and increments the iterator, or else throws a StopIteration exception if the iterator is past-the-end.
Returns
a reference to this iterator.

◆ operator++() [2/2]

template<bool const_>
ChildIterator< const_ > regina::ChildIterator< const_ >::operator++ ( int  )
inline

Postincrement operator.

Python
Not present; instead this class implements next(), which either returns the current child packet and increments the iterator, or else throws a StopIteration exception if the iterator is past-the-end.
Returns
a a copy of this iterator before it was incremented.

◆ operator=()

template<bool const_>
ChildIterator & regina::ChildIterator< const_ >::operator= ( const ChildIterator< const_ > &  )
default

Default copy assignment operator.

◆ operator==()

template<bool const_>
bool regina::ChildIterator< const_ >::operator== ( const ChildIterator< const_ > &  rhs) const
inline

Tests whether this and the given iterator are equal.

Returns
true if and only if the two iterators are equal.

The documentation for this class was generated from the following file:

Copyright © 1999-2021, The Regina development team
This software is released under the GNU General Public License, with some additional permissions; see the source code for details.
For further information, or to submit a bug or other problem, please contact Ben Burton (bab@maths.uq.edu.au).