DIWNE::RecursiveNodeIterator
A complex iterator that iterates over all top level nodes as well as any child nodes that individual nodes contain. More...
#include "DIWNE/Core/diwne_iterators.h"
Inherits from DIWNE::RecursiveNodeIteratorImpl< RecursiveNodeIterator< Node >, Node >, DIWNE::ForwardNodeIterator< Iterator, NodeType, false >, DIWNE::ForwardIteratorBase< Iterator, NodeType, IsConst >
Public Types
Name | |
---|---|
using typename Super::shared_pointer | shared_pointer |
Protected Types
Name | |
---|---|
using RecursiveNodeIteratorImpl< RecursiveNodeIterator, NodeType > | Super |
Public Functions
Name | |
---|---|
RecursiveNodeIterator() | |
RecursiveNodeIterator(typename Super::Container nodes, std::size_t idx) |
Additional inherited members
Protected Types inherited from DIWNE::RecursiveNodeIteratorImpl< RecursiveNodeIterator< Node >, Node >
Name | |
---|---|
using NodeIterator<> | ChildNodeIterator |
using NodeRange<> | ChildNodeRange |
using bool(*)(const Node *) | Predicate |
Public Functions inherited from DIWNE::RecursiveNodeIteratorImpl< RecursiveNodeIterator< Node >, Node >
Name | |
---|---|
RecursiveNodeIteratorImpl() | |
RecursiveNodeIteratorImpl(Predicate divePredicate, typename Super::Container nodes, std::size_t idx) | |
RecursiveNodeIteratorImpl(typename Super::Container nodes, std::size_t idx) | |
Node * | basePtr()<br>Returns the base Node* pointer that isn't casted to the derived NodeType. |
reference | dereference() const |
bool | equals(const Iterator & b) const |
void | next() |
pointer | ptr() const |
shared_pointer | sharedPtr() const |
Protected Attributes inherited from DIWNE::RecursiveNodeIteratorImpl< RecursiveNodeIterator< Node >, Node >
Name | |
---|---|
Predicate | _divePredicate <br>Dive predicate, an additional condition required to consider diving inside node's children. |
std::stack< ChildNodeIterator, std::vector< ChildNodeIterator > > | _stack <br>A stack of child container node iterators, they store their own position at each depth level. |
Public Types inherited from DIWNE::ForwardNodeIterator< Iterator, NodeType, false >
Name | |
---|---|
using const NodeList * | Container |
Public Functions inherited from DIWNE::ForwardNodeIterator< Iterator, NodeType, false >
Name | |
---|---|
ForwardNodeIterator() | |
ForwardNodeIterator(Container nodes, std::size_t idx) | |
reference | dereference() const |
bool | equals(const Iterator & b) const<br>Determines whether this iterator is pointing to the same element as another one (used by the == operator) |
void | next()<br>Advance the iterator. |
pointer | ptr() const |
shared_pointer | sharedPtr() const |
bool | valid() const<br>Check whether the iterator is pointing at a valid element (eg. not the end of a container) |
Protected Attributes inherited from DIWNE::ForwardNodeIterator< Iterator, NodeType, false >
Name | |
---|---|
std::size_t | _idx <br>Current node index // TODO: Should probably be an int. |
Container | _nodes <br>Reference to the node list. |
Public Types inherited from DIWNE::ForwardIteratorBase< Iterator, NodeType, IsConst >
Name | |
---|---|
using std::ptrdiff_t | difference_type |
using std::forward_iterator_tag | iterator_category |
using typename std::conditional< IsConst, const Value *, Value * >::type | pointer |
using typename std::conditional< IsConst, const Value &, Value & >::type | reference |
using typename std::conditional< IsConst, const Value, Value >::type | value_type |
Public Functions inherited from DIWNE::ForwardIteratorBase< Iterator, NodeType, IsConst >
Name | |
---|---|
reference | operator*() |
Iterator & | operator++() |
Iterator | operator++(int ) |
pointer | operator->() |
Protected Functions inherited from DIWNE::ForwardIteratorBase< Iterator, NodeType, IsConst >
Name | |
---|---|
ForwardIteratorBase() | |
virtual | ~ForwardIteratorBase() =default |
reference | dereference() const<br>Return a reference to the current element (reference to a value type, not a pointer). |
bool | equals(const Iterator & b) const<br>Determines whether this iterator is pointing to the same element as another one (used by the == operator) |
void | next()<br>Advance the iterator. |
pointer | ptr() const<br>Return a raw pointer to the current element. |
Iterator * | self()<br>CRTP self pointer (pointer to the derived type) |
const Iterator * | self() const<br>CRTP const self pointer. |
std::shared_ptr< Value > | sharedPtr() const<br>Return the owning pointer to the current element. Creates a new shared pointer object. |
bool | valid() const<br>Check whether the iterator is pointing at a valid element (eg. not the end of a container) |
Friends inherited from DIWNE::ForwardIteratorBase< Iterator, NodeType, IsConst >
Name | |
---|---|
bool | operator!=(const Iterator & a, const Iterator & b) |
bool | operator==(const Iterator & a, const Iterator & b) |
Detailed Description
template <typename NodeType =Node>
class DIWNE::RecursiveNodeIterator;
template <typename NodeType =Node>
class DIWNE::RecursiveNodeIterator;
A complex iterator that iterates over all top level nodes as well as any child nodes that individual nodes contain.
Template Parameters:
- NodeType The node type returned nodes are casted to. It must be ensured that the passed node list only contains nodes of this subtype. Otherwise an incompatible node type gets downcasted and undefined behavior will occur (static cast is used).
See: RecursiveNodeRange
Child nodes of a node are specified by the INodeContainer::getNodes() method which container nodes must implement. For simplicity this iterator can only go forward and does not provide random access.
Public Types Documentation
using shared_pointer
using DIWNE::RecursiveNodeIterator< NodeType >::shared_pointer = typename Super::shared_pointer;
using DIWNE::RecursiveNodeIterator< NodeType >::shared_pointer = typename Super::shared_pointer;
Protected Types Documentation
using Super
using DIWNE::RecursiveNodeIterator< NodeType >::Super = RecursiveNodeIteratorImpl<RecursiveNodeIterator, NodeType>;
using DIWNE::RecursiveNodeIterator< NodeType >::Super = RecursiveNodeIteratorImpl<RecursiveNodeIterator, NodeType>;
Public Functions Documentation
function RecursiveNodeIterator
inline RecursiveNodeIterator()
inline RecursiveNodeIterator()
function RecursiveNodeIterator
inline RecursiveNodeIterator(
typename Super::Container nodes,
std::size_t idx
)
inline RecursiveNodeIterator(
typename Super::Container nodes,
std::size_t idx
)
Updated on 2025-05-31 at 12:55:31 +0000