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 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
143 // new value was actually added | 143 // new value was actually added |
144 template <typename IncomingKeyType, typename IncomingMappedType> | 144 template <typename IncomingKeyType, typename IncomingMappedType> |
145 AddResult set(IncomingKeyType&&, IncomingMappedType&&); | 145 AddResult set(IncomingKeyType&&, IncomingMappedType&&); |
146 | 146 |
147 // does nothing if key is already present return value is a pair of the | 147 // does nothing if key is already present return value is a pair of the |
148 // iterator to the key location, and a boolean that's true if a new value | 148 // iterator to the key location, and a boolean that's true if a new value |
149 // was actually added | 149 // was actually added |
150 template <typename IncomingKeyType, typename IncomingMappedType> | 150 template <typename IncomingKeyType, typename IncomingMappedType> |
151 AddResult insert(IncomingKeyType&&, IncomingMappedType&&); | 151 AddResult insert(IncomingKeyType&&, IncomingMappedType&&); |
152 | 152 |
153 // TODO(pilgrim) remove remove() method once all references migrated to | |
154 // erase() | |
155 // https://crbug.com/662431 | |
156 void remove(KeyPeekInType); | |
157 void erase(KeyPeekInType); | 153 void erase(KeyPeekInType); |
158 void remove(iterator); | 154 void erase(iterator); |
159 void clear(); | 155 void clear(); |
160 template <typename Collection> | 156 template <typename Collection> |
161 void removeAll(const Collection& toBeRemoved) { | 157 void removeAll(const Collection& toBeRemoved) { |
162 WTF::removeAll(*this, toBeRemoved); | 158 WTF::removeAll(*this, toBeRemoved); |
163 } | 159 } |
164 | 160 |
165 MappedType take(KeyPeekInType); // efficient combination of get with remove | 161 MappedType take(KeyPeekInType); // efficient combination of get with remove |
166 | 162 |
167 // An alternate version of find() that finds the object by hashing and | 163 // An alternate version of find() that finds the object by hashing and |
168 // comparing with some other type, to avoid the cost of type | 164 // comparing with some other type, to avoid the cost of type |
(...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
601 return MappedTraits::peek(MappedTraits::emptyValue()); | 597 return MappedTraits::peek(MappedTraits::emptyValue()); |
602 return MappedTraits::peek(entry->value); | 598 return MappedTraits::peek(entry->value); |
603 } | 599 } |
604 | 600 |
605 template <typename T, | 601 template <typename T, |
606 typename U, | 602 typename U, |
607 typename V, | 603 typename V, |
608 typename W, | 604 typename W, |
609 typename X, | 605 typename X, |
610 typename Y> | 606 typename Y> |
611 inline void HashMap<T, U, V, W, X, Y>::remove(iterator it) { | 607 inline void HashMap<T, U, V, W, X, Y>::erase(iterator it) { |
612 m_impl.remove(it.m_impl); | 608 m_impl.remove(it.m_impl); |
613 } | 609 } |
614 | 610 |
615 template <typename T, | 611 template <typename T, |
616 typename U, | 612 typename U, |
617 typename V, | 613 typename V, |
618 typename W, | 614 typename W, |
619 typename X, | 615 typename X, |
620 typename Y> | 616 typename Y> |
621 inline void HashMap<T, U, V, W, X, Y>::remove(KeyPeekInType key) { | |
622 remove(find(key)); | |
623 } | |
624 | |
625 template <typename T, | |
626 typename U, | |
627 typename V, | |
628 typename W, | |
629 typename X, | |
630 typename Y> | |
631 inline void HashMap<T, U, V, W, X, Y>::erase(KeyPeekInType key) { | 617 inline void HashMap<T, U, V, W, X, Y>::erase(KeyPeekInType key) { |
632 remove(find(key)); | 618 erase(find(key)); |
633 } | 619 } |
634 | 620 |
635 template <typename T, | 621 template <typename T, |
636 typename U, | 622 typename U, |
637 typename V, | 623 typename V, |
638 typename W, | 624 typename W, |
639 typename X, | 625 typename X, |
640 typename Y> | 626 typename Y> |
641 inline void HashMap<T, U, V, W, X, Y>::clear() { | 627 inline void HashMap<T, U, V, W, X, Y>::clear() { |
642 m_impl.clear(); | 628 m_impl.clear(); |
643 } | 629 } |
644 | 630 |
645 template <typename T, | 631 template <typename T, |
646 typename U, | 632 typename U, |
647 typename V, | 633 typename V, |
648 typename W, | 634 typename W, |
649 typename X, | 635 typename X, |
650 typename Y> | 636 typename Y> |
651 auto HashMap<T, U, V, W, X, Y>::take(KeyPeekInType key) -> MappedType { | 637 auto HashMap<T, U, V, W, X, Y>::take(KeyPeekInType key) -> MappedType { |
652 iterator it = find(key); | 638 iterator it = find(key); |
653 if (it == end()) | 639 if (it == end()) |
654 return MappedTraits::emptyValue(); | 640 return MappedTraits::emptyValue(); |
655 MappedType result = std::move(it->value); | 641 MappedType result = std::move(it->value); |
656 remove(it); | 642 erase(it); |
657 return result; | 643 return result; |
658 } | 644 } |
659 | 645 |
660 template <typename T, | 646 template <typename T, |
661 typename U, | 647 typename U, |
662 typename V, | 648 typename V, |
663 typename W, | 649 typename W, |
664 typename X, | 650 typename X, |
665 typename Y> | 651 typename Y> |
666 inline bool HashMap<T, U, V, W, X, Y>::isValidKey(KeyPeekInType key) { | 652 inline bool HashMap<T, U, V, W, X, Y>::isValidKey(KeyPeekInType key) { |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
751 iterator end = collection.end().values(); | 737 iterator end = collection.end().values(); |
752 for (unsigned i = 0; it != end; ++it, ++i) | 738 for (unsigned i = 0; it != end; ++it, ++i) |
753 vector[i] = *it; | 739 vector[i] = *it; |
754 } | 740 } |
755 | 741 |
756 } // namespace WTF | 742 } // namespace WTF |
757 | 743 |
758 using WTF::HashMap; | 744 using WTF::HashMap; |
759 | 745 |
760 #endif // WTF_HashMap_h | 746 #endif // WTF_HashMap_h |
OLD | NEW |