21 while (!this->node_it.is_end() && !this->node_it.get_current_node().is_leaf())
27 if (this->node_it.is_end())
29 this->tmp_values.clear();
30 this->node_it.idx = UINT64_MAX;
31 this->tmp_idx = UINT32_MAX;
36 this->tmp_values.clear();
37 LEAF_CONTAINER &cont = (*this->ref)[this->node_it.get_current_node().get_leaf_container_index()];
39 for (
const VALUE it : cont)
41 this->tmp_values.push_back(it);
55 std::vector<uint64_t> tmp_values;
56 std::vector<LEAF_CONTAINER> *ref =
nullptr;
59 using iterator_category = std::bidirectional_iterator_tag;
60 using difference_type = std::ptrdiff_t;
64 this->tmp_values.clear();
66 this->ref =
const_cast<std::vector<LEAF_CONTAINER> *
>(_ref);
69 _root->copy_to(this->node_it);
70 if (this->node_it.is_end())
72 this->node_it.idx = UINT64_MAX;
73 this->tmp_idx = UINT32_MAX;
82 this->node_it.idx = UINT64_MAX;
83 this->tmp_idx = UINT32_MAX;
88 if (this->node_it.idx != other.node_it.idx)
90 if (this->node_it.idx < other.node_it.idx)
101 if (this->tmp_idx != other.tmp_idx)
103 if (this->tmp_idx < other.tmp_idx)
119 VALUE operator*()
const
121 if (this->node_it.is_end())
123 throw std::runtime_error(
"Error:BPValueForwardIterator");
127 return this->tmp_values[this->tmp_idx];
132 return this->tmp_idx == UINT32_MAX;
137 if (this->tmp_idx + 1 < this->tmp_values.size())
141 else if (this->tmp_idx + 1 == this->tmp_values.size())
148 throw std::runtime_error(
"Error:BPValueForwardIterator");