| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * This file is part of Adblock Plus <https://adblockplus.org/>, | 2  * This file is part of Adblock Plus <https://adblockplus.org/>, | 
| 3  * Copyright (C) 2006-present eyeo GmbH | 3  * Copyright (C) 2006-present eyeo GmbH | 
| 4  * | 4  * | 
| 5  * Adblock Plus is free software: you can redistribute it and/or modify | 5  * Adblock Plus is free software: you can redistribute it and/or modify | 
| 6  * it under the terms of the GNU General Public License version 3 as | 6  * it under the terms of the GNU General Public License version 3 as | 
| 7  * published by the Free Software Foundation. | 7  * published by the Free Software Foundation. | 
| 8  * | 8  * | 
| 9  * Adblock Plus is distributed in the hope that it will be useful, | 9  * Adblock Plus is distributed in the hope that it will be useful, | 
| 10  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 138       } | 138       } | 
| 139     } | 139     } | 
| 140 | 140 | 
| 141     void resize(size_type bucketCount) | 141     void resize(size_type bucketCount) | 
| 142     { | 142     { | 
| 143       std::unique_ptr<entry_type[]> oldBuckets(std::move(mBuckets)); | 143       std::unique_ptr<entry_type[]> oldBuckets(std::move(mBuckets)); | 
| 144       size_type oldCount = mBucketCount; | 144       size_type oldCount = mBucketCount; | 
| 145 | 145 | 
| 146       mEntryCount = 0; | 146       mEntryCount = 0; | 
| 147       mBucketCount = bucketCount; | 147       mBucketCount = bucketCount; | 
| 148       mBuckets.reset(new entry_type[mBucketCount]); | 148       allocate(); | 
| 149       // Working around https://github.com/waywardmonkeys/emscripten-trace-colle
     ctor/issues/2 here |  | 
| 150       annotate_address(reinterpret_cast<size_type*>(mBuckets.get()) - 1, "Hash t
     able buffer"); |  | 
| 151 | 149 | 
| 152       // Copy old entries into the new buffer | 150       // Copy old entries into the new buffer | 
| 153       for (size_type i = 0; i < oldCount; i++) | 151       for (size_type i = 0; i < oldCount; i++) | 
| 154       { | 152       { | 
| 155         entry_type& entry = oldBuckets[i]; | 153         entry_type& entry = oldBuckets[i]; | 
| 156         if (!entry.is_invalid() && !entry.is_deleted()) | 154         if (!entry.is_invalid() && !entry.is_deleted()) | 
| 157         { | 155         { | 
| 158           *find_bucket(entry.first) = entry; | 156           *find_bucket(entry.first) = entry; | 
| 159           mEntryCount++; | 157           mEntryCount++; | 
| 160         } | 158         } | 
| (...skipping 11 matching lines...) Expand all  Loading... | 
| 172         } | 170         } | 
| 173         mEntryCount++; | 171         mEntryCount++; | 
| 174 #if defined(DEBUG) | 172 #if defined(DEBUG) | 
| 175         mInsertCounter++; | 173         mInsertCounter++; | 
| 176 #endif | 174 #endif | 
| 177       } | 175       } | 
| 178       *existing = entry; | 176       *existing = entry; | 
| 179       return existing; | 177       return existing; | 
| 180     } | 178     } | 
| 181 | 179 | 
|  | 180     void allocate() | 
|  | 181     { | 
|  | 182       mBuckets.reset(new entry_type[mBucketCount]); | 
|  | 183       // Working around https://github.com/waywardmonkeys/emscripten-trace-colle
     ctor/issues/2 here | 
|  | 184       annotate_address(reinterpret_cast<size_type*>(mBuckets.get()) - 1, "Hash t
     able buffer"); | 
|  | 185     } | 
|  | 186 | 
| 182   public: | 187   public: | 
| 183     explicit HashContainer(size_type expectedEntries = 0) | 188     explicit HashContainer(size_type expectedEntries = 0) | 
| 184         : mEntryCount(0) | 189         : mEntryCount(0) | 
| 185     { | 190     { | 
| 186       expectedEntries = ceil(expectedEntries / LOAD_FACTOR); | 191       expectedEntries = ceil(expectedEntries / LOAD_FACTOR); | 
| 187       mBucketCount = MIN_BUCKETS; | 192       mBucketCount = MIN_BUCKETS; | 
| 188       while (mBucketCount < expectedEntries) | 193       while (mBucketCount < expectedEntries) | 
| 189         mBucketCount <<= 1; | 194         mBucketCount <<= 1; | 
| 190 | 195 | 
| 191       mBuckets.reset(new entry_type[mBucketCount]); | 196       allocate(); | 
| 192       // Working around https://github.com/waywardmonkeys/emscripten-trace-colle
     ctor/issues/2 here | 197     } | 
| 193       annotate_address(reinterpret_cast<size_type*>(mBuckets.get()) - 1, "Hash t
     able buffer"); | 198 | 
|  | 199     void clear() | 
|  | 200     { | 
|  | 201       mEntryCount = 0; | 
|  | 202       allocate(); | 
| 194     } | 203     } | 
| 195 | 204 | 
| 196     void insert(const entry_type& entry) | 205     void insert(const entry_type& entry) | 
| 197     { | 206     { | 
| 198       assign(find_bucket(entry.first), entry); | 207       assign(find_bucket(entry.first), entry); | 
| 199     } | 208     } | 
| 200 | 209 | 
| 201     bool erase(const key_type& key) | 210     bool erase(const key_type& key) | 
| 202     { | 211     { | 
| 203       entry_type* entry = find_bucket(key); | 212       entry_type* entry = find_bucket(key); | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 216     const_iterator begin() const | 225     const_iterator begin() const | 
| 217     { | 226     { | 
| 218       return const_iterator(&mBuckets[0], &mBuckets[mBucketCount]); | 227       return const_iterator(&mBuckets[0], &mBuckets[mBucketCount]); | 
| 219     } | 228     } | 
| 220 | 229 | 
| 221     const_iterator end() const | 230     const_iterator end() const | 
| 222     { | 231     { | 
| 223       return const_iterator(&mBuckets[mBucketCount], &mBuckets[mBucketCount]); | 232       return const_iterator(&mBuckets[mBucketCount], &mBuckets[mBucketCount]); | 
| 224     } | 233     } | 
| 225 | 234 | 
|  | 235     bool empty() const | 
|  | 236     { | 
|  | 237       return mEntryCount == 0; | 
|  | 238     } | 
|  | 239 | 
| 226     size_type size() const | 240     size_type size() const | 
| 227     { | 241     { | 
| 228       return mEntryCount; | 242       return mEntryCount; | 
| 229     } | 243     } | 
| 230   }; | 244   }; | 
| 231 | 245 | 
| 232   template<typename Entry> | 246   template<typename Entry> | 
| 233   struct MapReference : public HashContainerReference<Entry> | 247   struct MapReference : public HashContainerReference<Entry> | 
| 234   { | 248   { | 
| 235     typedef HashContainerReference<Entry> super; | 249     typedef HashContainerReference<Entry> super; | 
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 310   const_reference find(const key_type& key) const | 324   const_reference find(const key_type& key) const | 
| 311   { | 325   { | 
| 312     return super::find(key); | 326     return super::find(key); | 
| 313   } | 327   } | 
| 314 | 328 | 
| 315   reference find(const key_type& key) | 329   reference find(const key_type& key) | 
| 316   { | 330   { | 
| 317     return reference(this, key, super::find_bucket(key)); | 331     return reference(this, key, super::find_bucket(key)); | 
| 318   } | 332   } | 
| 319 }; | 333 }; | 
| OLD | NEW | 
|---|