Add FlatHashTable::create_iterator private function.
This commit is contained in:
parent
d8071f458e
commit
ea52727c21
|
@ -189,7 +189,6 @@ class FlatHashTable {
|
||||||
using pointer = value_type *;
|
using pointer = value_type *;
|
||||||
using reference = value_type &;
|
using reference = value_type &;
|
||||||
|
|
||||||
friend class FlatHashTable;
|
|
||||||
Iterator &operator++() {
|
Iterator &operator++() {
|
||||||
DCHECK(it_ != nullptr);
|
DCHECK(it_ != nullptr);
|
||||||
do {
|
do {
|
||||||
|
@ -221,8 +220,7 @@ class FlatHashTable {
|
||||||
}
|
}
|
||||||
|
|
||||||
Iterator() = default;
|
Iterator() = default;
|
||||||
Iterator(NodeT *it, FlatHashTable *map)
|
Iterator(NodeT *it, NodeT *begin, NodeT *end) : it_(it), begin_(begin), start_(it), end_(end) {
|
||||||
: it_(it), begin_(map->nodes_), start_(it_), end_(map->nodes_ + map->bucket_count()) {
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -342,7 +340,7 @@ class FlatHashTable {
|
||||||
while (true) {
|
while (true) {
|
||||||
auto &node = nodes_[bucket];
|
auto &node = nodes_[bucket];
|
||||||
if (EqT()(node.key(), key)) {
|
if (EqT()(node.key(), key)) {
|
||||||
return Iterator{&node, this};
|
return create_iterator(&node);
|
||||||
}
|
}
|
||||||
if (node.empty()) {
|
if (node.empty()) {
|
||||||
return end();
|
return end();
|
||||||
|
@ -373,10 +371,10 @@ class FlatHashTable {
|
||||||
next_bucket(begin_bucket_);
|
next_bucket(begin_bucket_);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return Iterator(nodes_ + begin_bucket_, this);
|
return create_iterator(nodes_ + begin_bucket_);
|
||||||
}
|
}
|
||||||
Iterator end() {
|
Iterator end() {
|
||||||
return Iterator(nullptr, this);
|
return create_iterator(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
ConstIterator begin() const {
|
ConstIterator begin() const {
|
||||||
|
@ -405,12 +403,12 @@ class FlatHashTable {
|
||||||
while (true) {
|
while (true) {
|
||||||
auto &node = nodes_[bucket];
|
auto &node = nodes_[bucket];
|
||||||
if (EqT()(node.key(), key)) {
|
if (EqT()(node.key(), key)) {
|
||||||
return {Iterator(&node, this), false};
|
return {create_iterator(&node), false};
|
||||||
}
|
}
|
||||||
if (node.empty()) {
|
if (node.empty()) {
|
||||||
node.emplace(std::move(key), std::forward<ArgsT>(args)...);
|
node.emplace(std::move(key), std::forward<ArgsT>(args)...);
|
||||||
used_node_count_++;
|
used_node_count_++;
|
||||||
return {Iterator(&node, this), true};
|
return {create_iterator(&node), true};
|
||||||
}
|
}
|
||||||
next_bucket(bucket);
|
next_bucket(bucket);
|
||||||
}
|
}
|
||||||
|
@ -623,6 +621,10 @@ class FlatHashTable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Iterator create_iterator(NodeT *node) {
|
||||||
|
return Iterator(node, nodes_, nodes_ + bucket_count());
|
||||||
|
}
|
||||||
|
|
||||||
void invalidate_iterators() {
|
void invalidate_iterators() {
|
||||||
begin_bucket_ = INVALID_BUCKET;
|
begin_bucket_ = INVALID_BUCKET;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user