Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2005, 2006, 2007, 2008, 2011 Apple Inc. All rights reserved. | 2 * Copyright (C) 2005, 2006, 2007, 2008, 2011 Apple Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * This library is free software; you can redistribute it and/or | 4 * This library is free software; you can redistribute it and/or |
| 5 * modify it under the terms of the GNU Library General Public | 5 * modify it under the terms of the GNU Library General Public |
| 6 * License as published by the Free Software Foundation; either | 6 * License as published by the Free Software Foundation; either |
| 7 * version 2 of the License, or (at your option) any later version. | 7 * version 2 of the License, or (at your option) any later version. |
| 8 * | 8 * |
| 9 * This library is distributed in the hope that it will be useful, | 9 * This library 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 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 119 AddResult set(KeyPeekInType, MappedPassInType); | 119 AddResult set(KeyPeekInType, MappedPassInType); |
| 120 | 120 |
| 121 // does nothing if key is already present | 121 // does nothing if key is already present |
| 122 // return value is a pair of the iterator to the key location, | 122 // return value is a pair of the iterator to the key location, |
| 123 // and a boolean that's true if a new value was actually added | 123 // and a boolean that's true if a new value was actually added |
| 124 AddResult add(KeyPeekInType, MappedPassInType); | 124 AddResult add(KeyPeekInType, MappedPassInType); |
| 125 | 125 |
| 126 void remove(KeyPeekInType); | 126 void remove(KeyPeekInType); |
| 127 void remove(iterator); | 127 void remove(iterator); |
| 128 void clear(); | 128 void clear(); |
| 129 template<typename Collection> | |
| 130 void removeAll(const Collection& other); | |
| 129 | 131 |
| 130 MappedPassOutType take(KeyPeekInType); // efficient combination of get w ith remove | 132 MappedPassOutType take(KeyPeekInType); // efficient combination of get w ith remove |
| 131 | 133 |
| 132 // An alternate version of find() that finds the object by hashing and c omparing | 134 // An alternate version of find() that finds the object by hashing and c omparing |
| 133 // with some other type, to avoid the cost of type conversion. HashTrans lator | 135 // with some other type, to avoid the cost of type conversion. HashTrans lator |
| 134 // must have the following function members: | 136 // must have the following function members: |
| 135 // static unsigned hash(const T&); | 137 // static unsigned hash(const T&); |
| 136 // static bool equal(const ValueType&, const T&); | 138 // static bool equal(const ValueType&, const T&); |
| 137 template<typename HashTranslator, typename T> iterator find(const T&); | 139 template<typename HashTranslator, typename T> iterator find(const T&); |
| 138 template<typename HashTranslator, typename T> const_iterator find(const T&) const; | 140 template<typename HashTranslator, typename T> const_iterator find(const T&) const; |
| (...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 405 remove(find(key)); | 407 remove(find(key)); |
| 406 } | 408 } |
| 407 | 409 |
| 408 template<typename T, typename U, typename V, typename W, typename X, typenam e Y> | 410 template<typename T, typename U, typename V, typename W, typename X, typenam e Y> |
| 409 inline void HashMap<T, U, V, W, X, Y>::clear() | 411 inline void HashMap<T, U, V, W, X, Y>::clear() |
| 410 { | 412 { |
| 411 m_impl.clear(); | 413 m_impl.clear(); |
| 412 } | 414 } |
| 413 | 415 |
| 414 template<typename T, typename U, typename V, typename W, typename X, typenam e Y> | 416 template<typename T, typename U, typename V, typename W, typename X, typenam e Y> |
| 417 template<typename Collection> | |
| 418 inline void HashMap<T, U, V, W, X, Y>::removeAll(const Collection& other) | |
|
Mikhail
2014/04/25 11:02:26
I'm a bit concerned that this code is repeated at
Erik Corry
2014/04/25 12:00:31
Done.
| |
| 419 { | |
| 420 if (other.isEmpty() || isEmpty()) | |
| 421 return; | |
| 422 typedef typename Collection::const_iterator CollectionIterator; | |
| 423 CollectionIterator otherEnd(other.end()); | |
| 424 for (CollectionIterator it(other.begin()); it != otherEnd; ++it) | |
| 425 remove(*it); | |
| 426 } | |
| 427 | |
| 428 template<typename T, typename U, typename V, typename W, typename X, typenam e Y> | |
| 415 typename HashMap<T, U, V, W, X, Y>::MappedPassOutType | 429 typename HashMap<T, U, V, W, X, Y>::MappedPassOutType |
| 416 HashMap<T, U, V, W, X, Y>::take(KeyPeekInType key) | 430 HashMap<T, U, V, W, X, Y>::take(KeyPeekInType key) |
| 417 { | 431 { |
| 418 iterator it = find(key); | 432 iterator it = find(key); |
| 419 if (it == end()) | 433 if (it == end()) |
| 420 return MappedTraits::passOut(MappedTraits::emptyValue()); | 434 return MappedTraits::passOut(MappedTraits::emptyValue()); |
| 421 MappedPassOutType result = MappedTraits::passOut(it->value); | 435 MappedPassOutType result = MappedTraits::passOut(it->value); |
| 422 remove(it); | 436 remove(it); |
| 423 return result; | 437 return result; |
| 424 } | 438 } |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 507 iterator end = collection.end().values(); | 521 iterator end = collection.end().values(); |
| 508 for (unsigned i = 0; it != end; ++it, ++i) | 522 for (unsigned i = 0; it != end; ++it, ++i) |
| 509 vector[i] = *it; | 523 vector[i] = *it; |
| 510 } | 524 } |
| 511 | 525 |
| 512 } // namespace WTF | 526 } // namespace WTF |
| 513 | 527 |
| 514 using WTF::HashMap; | 528 using WTF::HashMap; |
| 515 | 529 |
| 516 #endif /* WTF_HashMap_h */ | 530 #endif /* WTF_HashMap_h */ |
| OLD | NEW |