15 #ifndef BORNAGAIN_CORE_PARAMETRIZATION_NODEITERATOR_H
16 #define BORNAGAIN_CORE_PARAMETRIZATION_NODEITERATOR_H
34 const INode* getCurrent()
const {
return m_samples[m_position]; }
35 bool isEnd()
const {
return m_position >= m_samples.size(); }
36 void next() { ++m_position; }
38 friend std::ostream& operator<<(std::ostream& output_stream,
41 return output_stream <<
"memento state " << iterator_state.m_position <<
" "
42 << iterator_state.m_samples.size();
46 std::vector<const INode*> m_samples;
61 void push_state(
const IteratorState& state) { m_state_stack.push(state); }
62 void pop_state() { m_state_stack.pop(); }
64 bool empty()
const {
return m_state_stack.empty(); }
67 while (!m_state_stack.empty())
70 const INode* getCurrent() {
return m_state_stack.top().getCurrent(); }
71 void next() { m_state_stack.top().next(); }
72 size_t size()
const {
return m_state_stack.size(); }
75 std::stack<IteratorState> m_state_stack;
97 const INode* getCurrent();
104 const INode* mp_root;
107 template <
class Strategy>
114 m_memento_itor = m_strategy.first(mp_root);
119 m_strategy.next(m_memento_itor);
124 return m_memento_itor.getCurrent();
129 return m_memento_itor.size() == 0;
134 return static_cast<int>(m_memento_itor.size());
Base class for tree-like structures containing parameterized objects.
Holds all iterator states encountered for SampleTreeIterator.
Holds state of iterator at single level for SampleTreeIterator.
Iterator through INode tree of objects.