Krita Source Code Documentation
Loading...
Searching...
No Matches
KisForestDetail::DepthFirstIterator< T, visit_on, is_const > Class Template Reference

#include <KisForest.h>

+ Inheritance diagram for KisForestDetail::DepthFirstIterator< T, visit_on, is_const >:

Public Types

using NodeType = typename BaseIteratorType::NodeType
 
using RootNodeType = typename BaseIteratorType::RootNodeType
 
using traversal_state = TraversalState
 

Public Member Functions

 DepthFirstIterator (NodeType *node, traversal_state state=traversal_state::Enter, bool shouldSkipToBegin=false)
 
NodeTypenode () const
 
 operator DepthFirstIterator< T, visit_on, true > () const
 

Private Types

using BaseClass
 
using BaseIteratorType = typename DepthFirstIterator::base_type
 

Private Member Functions

void increment ()
 
void skipToState (TraversalState state)
 

Friends

class boost::iterator_core_access
 

Detailed Description

template<typename T, TraversalState visit_on, bool is_const>
class KisForestDetail::DepthFirstIterator< T, visit_on, is_const >

Depth-first iterator is used to traverse entire child-subtree of the node recursively in depth-first order. Every node is entered only once. It implements standard recursion iteration:

  • DepthFirstIterator<T, Enter> implements head-recursion, that is, the node is visited before its children
  • DepthFirstIterator<T, Leave> implements tail-recursion, that is, the node is visited after its children

Use subtreeBegin() and subtreeEnd() for head-recursion and tailSubtreeBegin() and tailSubtreeEnd() for tail-recursion.

Iterator models ForwardIterator concept.

// Forest:
//
// 0 1
// 2
// 3 5 6
// 7
// 4
// 8 9
// 10
KisForest<int>::iterator it3 = findValue(forest, 3);
// iterate through all the children of '3' in head-recursive way
for (auto it = subtreeBegin(it3); it != subtreeEnd(it3); ++it) {
qDebug() << *it << it.state();
}
// prints: 3, 5, 6, 7
// iterate through all the children of '3' in tail-recursive way
for (auto it = tailSubtreeBegin(it3); it != tailSubtreeEnd(it3); ++it) {
qDebug() << *it << it.state();
}
// prints: 6, 7, 5, 3
ResultIterator subtreeBegin(Iterator it)
Definition KisForest.h:688
ResultIterator tailSubtreeBegin(Iterator it)
Definition KisForest.h:706
ResultIterator tailSubtreeEnd(Iterator it)
Definition KisForest.h:714
ResultIterator subtreeEnd(Iterator it)
Definition KisForest.h:696

WARNING: converting end() iterator to other iterator types currently leads to undefined behavior.

Definition at line 631 of file KisForest.h.

Member Typedef Documentation

◆ BaseClass

template<typename T , TraversalState visit_on, bool is_const>
using KisForestDetail::DepthFirstIterator< T, visit_on, is_const >::BaseClass
private
Initial value:
boost::iterator_adaptor<
DepthFirstIterator<T, visit_on, is_const>,
CompositionIterator<T, is_const>,
boost::use_default,
boost::forward_traversal_tag>

Definition at line 638 of file KisForest.h.

◆ BaseIteratorType

template<typename T , TraversalState visit_on, bool is_const>
using KisForestDetail::DepthFirstIterator< T, visit_on, is_const >::BaseIteratorType = typename DepthFirstIterator::base_type
private

Definition at line 644 of file KisForest.h.

◆ NodeType

template<typename T , TraversalState visit_on, bool is_const>
using KisForestDetail::DepthFirstIterator< T, visit_on, is_const >::NodeType = typename BaseIteratorType::NodeType

Definition at line 649 of file KisForest.h.

◆ RootNodeType

template<typename T , TraversalState visit_on, bool is_const>
using KisForestDetail::DepthFirstIterator< T, visit_on, is_const >::RootNodeType = typename BaseIteratorType::RootNodeType

Definition at line 648 of file KisForest.h.

◆ traversal_state

template<typename T , TraversalState visit_on, bool is_const>
using KisForestDetail::DepthFirstIterator< T, visit_on, is_const >::traversal_state = TraversalState

Definition at line 647 of file KisForest.h.

Constructor & Destructor Documentation

◆ DepthFirstIterator()

template<typename T , TraversalState visit_on, bool is_const>
KisForestDetail::DepthFirstIterator< T, visit_on, is_const >::DepthFirstIterator ( NodeType * node,
traversal_state state = traversal_state::Enter,
bool shouldSkipToBegin = false )
inline

Definition at line 651 of file KisForest.h.

655 {
656 if (shouldSkipToBegin) {
657 skipToState(visit_on);
658 }
659 }
boost::iterator_adaptor< DepthFirstIterator< T, visit_on, is_const >, CompositionIterator< T, is_const >, boost::use_default, boost::forward_traversal_tag > BaseClass
Definition KisForest.h:638
typename DepthFirstIterator::base_type BaseIteratorType
Definition KisForest.h:644
void skipToState(TraversalState state)
Definition KisForest.h:677

References KisForestDetail::DepthFirstIterator< T, visit_on, is_const >::skipToState().

Member Function Documentation

◆ increment()

template<typename T , TraversalState visit_on, bool is_const>
void KisForestDetail::DepthFirstIterator< T, visit_on, is_const >::increment ( )
inlineprivate

Definition at line 672 of file KisForest.h.

672 {
673 this->base_reference()++;
674 skipToState(visit_on);
675 }

References KisForestDetail::DepthFirstIterator< T, visit_on, is_const >::skipToState().

◆ node()

template<typename T , TraversalState visit_on, bool is_const>
NodeType * KisForestDetail::DepthFirstIterator< T, visit_on, is_const >::node ( ) const
inline

Definition at line 661 of file KisForest.h.

661 {
662 return this->base().node();
663 }

◆ operator DepthFirstIterator< T, visit_on, true >()

template<typename T , TraversalState visit_on, bool is_const>
KisForestDetail::DepthFirstIterator< T, visit_on, is_const >::operator DepthFirstIterator< T, visit_on, true > ( ) const
inline

Definition at line 665 of file KisForest.h.

665 {
666 return DepthFirstIterator<T, visit_on, true>(this->m_node, this->m_state);
667 }

◆ skipToState()

template<typename T , TraversalState visit_on, bool is_const>
void KisForestDetail::DepthFirstIterator< T, visit_on, is_const >::skipToState ( TraversalState state)
inlineprivate

Definition at line 677 of file KisForest.h.

677 {
678 while (this->base().node() && this->base().state() != state) {
679 this->base_reference()++;
680 }
681 }

References KisForestDetail::DepthFirstIterator< T, visit_on, is_const >::node().

Friends And Related Symbol Documentation

◆ boost::iterator_core_access

template<typename T , TraversalState visit_on, bool is_const>
friend class boost::iterator_core_access
friend

Definition at line 670 of file KisForest.h.


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