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

#include <KisForest.h>

+ Inheritance diagram for KisForestDetail::CompositionIterator< T, is_const >:

Public Types

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

Public Member Functions

 CompositionIterator (NodeType *node, traversal_state state=Enter)
 
NodeTypenode () const
 
 operator CompositionIterator< T, true > () const
 
traversal_state state () const
 

Private Types

using BaseClass
 
using BaseIteratorType = typename CompositionIterator::base_type
 

Private Member Functions

void increment ()
 
bool tryJumpToPos (typename CompositionIterator::base_type it, TraversalState newState)
 

Private Attributes

traversal_state m_state = Enter
 

Friends

class boost::iterator_core_access
 

Detailed Description

template<typename T, bool is_const>
class KisForestDetail::CompositionIterator< T, is_const >

Definition at line 485 of file KisForest.h.

Member Typedef Documentation

◆ BaseClass

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

Definition at line 492 of file KisForest.h.

◆ BaseIteratorType

template<typename T , bool is_const>
using KisForestDetail::CompositionIterator< T, is_const >::BaseIteratorType = typename CompositionIterator::base_type
private

Definition at line 498 of file KisForest.h.

◆ NodeType

template<typename T , bool is_const>
using KisForestDetail::CompositionIterator< T, is_const >::NodeType = typename BaseIteratorType::NodeType

Definition at line 503 of file KisForest.h.

◆ RootNodeType

template<typename T , bool is_const>
using KisForestDetail::CompositionIterator< T, is_const >::RootNodeType = typename BaseIteratorType::RootNodeType

Definition at line 502 of file KisForest.h.

◆ traversal_state

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

Definition at line 501 of file KisForest.h.

Constructor & Destructor Documentation

◆ CompositionIterator()

template<typename T , bool is_const>
KisForestDetail::CompositionIterator< T, is_const >::CompositionIterator ( NodeType * node,
traversal_state state = Enter )
inline

Definition at line 510 of file KisForest.h.

511 : BaseClass(BaseIteratorType(node, node ? node->parent : nullptr, 0)),
513 {
514 }
typename CompositionIterator::base_type BaseIteratorType
Definition KisForest.h:498
traversal_state state() const
Definition KisForest.h:516
boost::iterator_adaptor< CompositionIterator< T, is_const >, ChildIterator< T, is_const >, boost::use_default, boost::forward_traversal_tag > BaseClass
Definition KisForest.h:492

Member Function Documentation

◆ increment()

template<typename T , bool is_const>
void KisForestDetail::CompositionIterator< T, is_const >::increment ( )
inlineprivate

Definition at line 540 of file KisForest.h.

540 {
541 switch (m_state) {
542 case Enter:
543 if (tryJumpToPos(childBegin(this->base()), Enter)) return;
544 if (tryJumpToPos(this->base(), Leave)) return;
545 break;
546 case Leave:
547 if (tryJumpToPos(std::next(this->base()), Enter)) return;
548 if (tryJumpToPos(parent(this->base()), Leave)) return;
549 break;
550 }
551
552 this->base_reference() = BaseIteratorType(nullptr, nullptr, 0);
553 }
bool tryJumpToPos(typename CompositionIterator::base_type it, TraversalState newState)
Definition KisForest.h:527
ChildIterator< value_type, is_const > childBegin(const ChildIterator< value_type, is_const > &it)
Definition KisForest.h:290
ChildIterator< value_type, is_const > parent(const ChildIterator< value_type, is_const > &it)
Definition KisForest.h:327

References KisForestDetail::childBegin(), KisForestDetail::Enter, KisForestDetail::Leave, KisForestDetail::CompositionIterator< T, is_const >::m_state, KisForestDetail::parent(), and KisForestDetail::CompositionIterator< T, is_const >::tryJumpToPos().

◆ node()

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

Definition at line 505 of file KisForest.h.

505 {
506 return this->base().node();
507 }

◆ operator CompositionIterator< T, true >()

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

Definition at line 520 of file KisForest.h.

520 {
521 return CompositionIterator<T, true>(this->m_node, this->m_state);
522 }

References KisForestDetail::CompositionIterator< T, is_const >::m_state.

◆ state()

template<typename T , bool is_const>
traversal_state KisForestDetail::CompositionIterator< T, is_const >::state ( ) const
inline

Definition at line 516 of file KisForest.h.

516 {
517 return m_state;
518 }

References KisForestDetail::CompositionIterator< T, is_const >::m_state.

◆ tryJumpToPos()

template<typename T , bool is_const>
bool KisForestDetail::CompositionIterator< T, is_const >::tryJumpToPos ( typename CompositionIterator< T, is_const >::base_type it,
TraversalState newState )
inlineprivate

Definition at line 527 of file KisForest.h.

528 {
529 bool result = false;
530
531 if (!isEnd(it)) {
532 this->base_reference() = it;
533 result = true;
534 m_state = newState;
535 }
536
537 return result;
538 }
bool isEnd(const ChildIterator< T, is_const > &it)
Definition KisForest.h:341

References KisForestDetail::isEnd(), and KisForestDetail::CompositionIterator< T, is_const >::m_state.

Friends And Related Symbol Documentation

◆ boost::iterator_core_access

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

Definition at line 525 of file KisForest.h.

Member Data Documentation

◆ m_state

template<typename T , bool is_const>
traversal_state KisForestDetail::CompositionIterator< T, is_const >::m_state = Enter
private

Definition at line 556 of file KisForest.h.


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