44 template<
typename NODE,
typename TREE_MODEL>
50 void begin(NODE* node =
nullptr);
55 unsigned depth()
const;
59 std::queue<NODE*> m_levelNodes;
68 template<
typename NODE,
typename TREE_MODEL>
76 template<
typename NODE,
typename TREE_MODEL>
79 while (!m_levelNodes.empty())
85 TREE_MODEL::enqueueChildren(
cpp::pusher(m_levelNodes), node);
87 m_levelNodes.push(node);
93 template<
typename NODE,
typename TREE_MODEL>
96 if (m_levelNodes.empty()) {
101 const NODE* previous = m_current;
103 m_current = m_levelNodes.front();
106 if (previous !=
nullptr
107 && m_current !=
nullptr
108 && TREE_MODEL::isDeeper(m_current, previous))
113 if (m_current !=
nullptr)
114 TREE_MODEL::enqueueChildren(
cpp::pusher(m_levelNodes), m_current);
118 template<
typename NODE,
typename TREE_MODEL>
121 return m_current ==
nullptr;
125 template<
typename NODE,
typename TREE_MODEL>
132 template<
typename NODE,
typename TREE_MODEL>
unsigned depth() const
Depth of the current tree node.
Definition: tree_bfs_explorer.h:133
Definition: basic_shared_pointer.h:20
void begin(NODE *node=nullptr)
Prepares exploration to start from tree node.
Definition: tree_bfs_explorer.h:77
TreeBfsExplorer()
Definition: tree_bfs_explorer.h:69
void goNext()
Move exploration to the next tree node.
Definition: tree_bfs_explorer.h:94
Definition: tree_bfs_explorer.h:45
bool atEnd() const
Is exploration beyond the last tree node (ended) ?
Definition: tree_bfs_explorer.h:119
NODE * current() const
Current explored tree node.
Definition: tree_bfs_explorer.h:126
push_iterator< CONTAINER > pusher(CONTAINER &x)
Constructs a push_iterator that pushes new elements into x.
Definition: pusher.h:85