Skip to content

DIWNE::FilteredRecursiveNodeIterator

A wrapper around the RecursiveNodeIterator that also filters its output. More...

#include "DIWNE/Core/diwne_iterators.h"

Inherits from DIWNE::RecursiveNodeIteratorImpl< FilteredRecursiveNodeIterator< Node >, Node >, DIWNE::ForwardNodeIterator< Iterator, NodeType, false >, DIWNE::ForwardIteratorBase< Iterator, NodeType, IsConst >

Public Types

Name
using typename Super::shared_pointershared_pointer

Protected Types

Name
using FilteredRecursiveNodeIterator< NodeType >Iterator
using bool(*)(const Node *)Predicate
using RecursiveNodeIteratorImpl< FilteredRecursiveNodeIterator< NodeType >, NodeType >Super

Public Functions

Name
FilteredRecursiveNodeIterator()
FilteredRecursiveNodeIterator(Predicate predicate, Predicate divePredicate, typename Super::Container nodes, std::size_t idx)
FilteredRecursiveNodeIterator(Predicate predicate, typename Super::Container nodes, std::size_t idx)
voidnext()
boolvalid() const

Protected Attributes

Name
Predicate_predicate

Additional inherited members

Protected Types inherited from DIWNE::RecursiveNodeIteratorImpl< FilteredRecursiveNodeIterator< Node >, Node >

Name
using NodeIterator<>ChildNodeIterator
using NodeRange<>ChildNodeRange

Public Functions inherited from DIWNE::RecursiveNodeIteratorImpl< FilteredRecursiveNodeIterator< 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.
referencedereference() const
boolequals(const Iterator & b) const
pointerptr() const
shared_pointersharedPtr() const

Protected Attributes inherited from DIWNE::RecursiveNodeIteratorImpl< FilteredRecursiveNodeIterator< 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)
referencedereference() const
boolequals(const Iterator & b) const<br>Determines whether this iterator is pointing to the same element as another one (used by the == operator)
pointerptr() const
shared_pointersharedPtr() const

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_tdifference_type
using std::forward_iterator_tagiterator_category
using typename std::conditional< IsConst, const Value *, Value * >::typepointer
using typename std::conditional< IsConst, const Value &, Value & >::typereference
using typename std::conditional< IsConst, const Value, Value >::typevalue_type

Public Functions inherited from DIWNE::ForwardIteratorBase< Iterator, NodeType, IsConst >

Name
referenceoperator*()
Iterator &operator++()
Iteratoroperator++(int )
pointeroperator->()

Protected Functions inherited from DIWNE::ForwardIteratorBase< Iterator, NodeType, IsConst >

Name
ForwardIteratorBase()
virtual~ForwardIteratorBase() =default
referencedereference() const<br>Return a reference to the current element (reference to a value type, not a pointer).
boolequals(const Iterator & b) const<br>Determines whether this iterator is pointing to the same element as another one (used by the == operator)
pointerptr() 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.

Friends inherited from DIWNE::ForwardIteratorBase< Iterator, NodeType, IsConst >

Name
booloperator!=(const Iterator & a, const Iterator & b)
booloperator==(const Iterator & a, const Iterator & b)

Detailed Description

cpp
template <typename NodeType  =Node>
class DIWNE::FilteredRecursiveNodeIterator;
template <typename NodeType  =Node>
class DIWNE::FilteredRecursiveNodeIterator;

A wrapper around the RecursiveNodeIterator that also filters its output.

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 or the filtering condition is only passed for this subtype. Otherwise an incompatible node type gets downcasted and undefined behavior will occur (static cast is used).

See: RecursiveNodeIterator, FilteredRecursiveNodeRange

Warning: This iterator iterates to the first valid position immediately on construction. It will iterate over the whole underlying node list if no node matches its filter!

Like the regular recursive node iterator it is a forward iterator that cannot go back.

Public Types Documentation

using shared_pointer

cpp
using DIWNE::FilteredRecursiveNodeIterator< NodeType >::shared_pointer =  typename Super::shared_pointer;
using DIWNE::FilteredRecursiveNodeIterator< NodeType >::shared_pointer =  typename Super::shared_pointer;

Protected Types Documentation

using Iterator

cpp
using DIWNE::FilteredRecursiveNodeIterator< NodeType >::Iterator =  FilteredRecursiveNodeIterator<NodeType>;
using DIWNE::FilteredRecursiveNodeIterator< NodeType >::Iterator =  FilteredRecursiveNodeIterator<NodeType>;

using Predicate

cpp
using DIWNE::FilteredRecursiveNodeIterator< NodeType >::Predicate =  bool (*)(const Node*);
using DIWNE::FilteredRecursiveNodeIterator< NodeType >::Predicate =  bool (*)(const Node*);

using Super

cpp
using DIWNE::FilteredRecursiveNodeIterator< NodeType >::Super =  RecursiveNodeIteratorImpl<FilteredRecursiveNodeIterator<NodeType>, NodeType>;
using DIWNE::FilteredRecursiveNodeIterator< NodeType >::Super =  RecursiveNodeIteratorImpl<FilteredRecursiveNodeIterator<NodeType>, NodeType>;

Public Functions Documentation

function FilteredRecursiveNodeIterator

cpp
inline FilteredRecursiveNodeIterator()
inline FilteredRecursiveNodeIterator()

function FilteredRecursiveNodeIterator

cpp
inline FilteredRecursiveNodeIterator(
    Predicate predicate,
    Predicate divePredicate,
    typename Super::Container nodes,
    std::size_t idx
)
inline FilteredRecursiveNodeIterator(
    Predicate predicate,
    Predicate divePredicate,
    typename Super::Container nodes,
    std::size_t idx
)

function FilteredRecursiveNodeIterator

cpp
inline FilteredRecursiveNodeIterator(
    Predicate predicate,
    typename Super::Container nodes,
    std::size_t idx
)
inline FilteredRecursiveNodeIterator(
    Predicate predicate,
    typename Super::Container nodes,
    std::size_t idx
)

function next

cpp
inline void next()
inline void next()

function valid

cpp
inline bool valid() const
inline bool valid() const

Protected Attributes Documentation

variable _predicate

cpp
Predicate _predicate;
Predicate _predicate;

Updated on 2025-05-31 at 12:55:31 +0000