20 while (!this->node_it.is_end() && !this->node_it.get_current_node().is_leaf())
26 if (this->node_it.is_end())
28 this->tmp_values.clear();
29 this->node_it.idx = UINT64_MAX;
30 this->tmp_idx = UINT32_MAX;
35 this->tmp_values.clear();
36 LEAF_CONTAINER &cont = (*this->ref)[this->node_it.get_current_node().get_leaf_container_index()];
38 for (
const VALUE it : cont)
40 this->tmp_values.push_back(it);
54 std::vector<uint64_t> tmp_values;
55 std::vector<LEAF_CONTAINER> *ref =
nullptr;
58 using iterator_category = std::bidirectional_iterator_tag;
59 using difference_type = std::ptrdiff_t;
63 this->tmp_values.clear();
65 this->ref =
const_cast<std::vector<LEAF_CONTAINER> *
>(_ref);
68 _root->copy_to(this->node_it);
69 if (this->node_it.is_end())
71 this->node_it.idx = UINT64_MAX;
72 this->tmp_idx = UINT32_MAX;
81 this->node_it.idx = UINT64_MAX;
82 this->tmp_idx = UINT32_MAX;
87 if (this->node_it.idx != other.node_it.idx)
89 if (this->node_it.idx < other.node_it.idx)
100 if (this->tmp_idx != other.tmp_idx)
102 if (this->tmp_idx < other.tmp_idx)
118 VALUE operator*()
const
120 if (this->node_it.is_end())
122 throw std::runtime_error(
"Error:BPValueForwardIterator");
126 return this->tmp_values[this->tmp_idx];
131 return this->tmp_idx == UINT32_MAX;
136 if (this->tmp_idx + 1 < this->tmp_values.size())
140 else if (this->tmp_idx + 1 == this->tmp_values.size())
147 throw std::runtime_error(
"Error:BPValueForwardIterator");