| 913 | const_iterator end() const { return const_iterator(); } |
| 914 | |
| 915 | void clear() { |
| 916 | for (size_type b = 0; b < num_buckets_; b++) { |
| 917 | if (TableEntryIsNonEmptyList(b)) { |
| 918 | Node* node = static_cast<Node*>(table_[b]); |
| 919 | table_[b] = NULL; |
| 920 | do { |
| 921 | Node* next = node->next; |
| 922 | DestroyNode(node); |
| 923 | node = next; |
| 924 | } while (node != NULL); |
| 925 | } else if (TableEntryIsTree(b)) { |
| 926 | Tree* tree = static_cast<Tree*>(table_[b]); |
| 927 | GOOGLE_DCHECK(table_[b] == table_[b + 1] && (b & 1) == 0); |
| 928 | table_[b] = table_[b + 1] = NULL; |
| 929 | typename Tree::iterator tree_it = tree->begin(); |
| 930 | do { |
| 931 | Node* node = NodePtrFromKeyPtr(*tree_it); |
| 932 | typename Tree::iterator next = tree_it; |
| 933 | ++next; |
| 934 | tree->erase(tree_it); |
| 935 | DestroyNode(node); |
| 936 | tree_it = next; |
| 937 | } while (tree_it != tree->end()); |
| 938 | DestroyTree(tree); |
| 939 | b++; |
| 940 | } |
| 941 | } |
| 942 | num_elements_ = 0; |
| 943 | index_of_first_non_null_ = num_buckets_; |
| 944 | } |
| 945 | |
| 946 | const hasher& hash_function() const { return *this; } |
| 947 | |