18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2007 Apple Inc. All rights reserved. 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef WTF_HashIterators_h 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define WTF_HashIterators_h 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WTF { 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename HashTableType, typename KeyType, typename MappedType> struct HashTableConstKeysIterator; 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename HashTableType, typename KeyType, typename MappedType> struct HashTableConstValuesIterator; 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename HashTableType, typename KeyType, typename MappedType> struct HashTableKeysIterator; 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename HashTableType, typename KeyType, typename MappedType> struct HashTableValuesIterator; 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename HashTableType, typename KeyType, typename MappedType> struct HashTableConstIteratorAdapter<HashTableType, std::pair<KeyType, MappedType> > { 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project private: 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project typedef std::pair<KeyType, MappedType> ValueType; 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project public: 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project typedef HashTableConstKeysIterator<HashTableType, KeyType, MappedType> Keys; 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project typedef HashTableConstValuesIterator<HashTableType, KeyType, MappedType> Values; 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HashTableConstIteratorAdapter(const typename HashTableType::const_iterator& impl) : m_impl(impl) {} 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const ValueType* get() const { return (const ValueType*)m_impl.get(); } 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const ValueType& operator*() const { return *get(); } 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const ValueType* operator->() const { return get(); } 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HashTableConstIteratorAdapter& operator++() { ++m_impl; return *this; } 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // postfix ++ intentionally omitted 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Keys keys() { return Keys(*this); } 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Values values() { return Values(*this); } 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project typename HashTableType::const_iterator m_impl; 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }; 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename HashTableType, typename KeyType, typename MappedType> struct HashTableIteratorAdapter<HashTableType, std::pair<KeyType, MappedType> > { 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project private: 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project typedef std::pair<KeyType, MappedType> ValueType; 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project public: 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project typedef HashTableKeysIterator<HashTableType, KeyType, MappedType> Keys; 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project typedef HashTableValuesIterator<HashTableType, KeyType, MappedType> Values; 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HashTableIteratorAdapter(const typename HashTableType::iterator& impl) : m_impl(impl) {} 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ValueType* get() const { return (ValueType*)m_impl.get(); } 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ValueType& operator*() const { return *get(); } 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ValueType* operator->() const { return get(); } 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HashTableIteratorAdapter& operator++() { ++m_impl; return *this; } 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // postfix ++ intentionally omitted 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project operator HashTableConstIteratorAdapter<HashTableType, ValueType>() { 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project typename HashTableType::const_iterator i = m_impl; 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return i; 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Keys keys() { return Keys(*this); } 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Values values() { return Values(*this); } 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project typename HashTableType::iterator m_impl; 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }; 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename HashTableType, typename KeyType, typename MappedType> struct HashTableConstKeysIterator { 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project private: 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project typedef HashTableConstIteratorAdapter<HashTableType, std::pair<KeyType, MappedType> > ConstIterator; 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project public: 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HashTableConstKeysIterator(const ConstIterator& impl) : m_impl(impl) {} 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const KeyType* get() const { return &(m_impl.get()->first); } 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const KeyType& operator*() const { return *get(); } 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const KeyType* operator->() const { return get(); } 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HashTableConstKeysIterator& operator++() { ++m_impl; return *this; } 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // postfix ++ intentionally omitted 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ConstIterator m_impl; 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }; 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename HashTableType, typename KeyType, typename MappedType> struct HashTableConstValuesIterator { 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project private: 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project typedef HashTableConstIteratorAdapter<HashTableType, std::pair<KeyType, MappedType> > ConstIterator; 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project public: 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HashTableConstValuesIterator(const ConstIterator& impl) : m_impl(impl) {} 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const MappedType* get() const { return &(m_impl.get()->second); } 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const MappedType& operator*() const { return *get(); } 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const MappedType* operator->() const { return get(); } 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HashTableConstValuesIterator& operator++() { ++m_impl; return *this; } 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // postfix ++ intentionally omitted 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ConstIterator m_impl; 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }; 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename HashTableType, typename KeyType, typename MappedType> struct HashTableKeysIterator { 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project private: 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project typedef HashTableIteratorAdapter<HashTableType, std::pair<KeyType, MappedType> > Iterator; 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project typedef HashTableConstIteratorAdapter<HashTableType, std::pair<KeyType, MappedType> > ConstIterator; 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project public: 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HashTableKeysIterator(const Iterator& impl) : m_impl(impl) {} 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project KeyType* get() const { return &(m_impl.get()->first); } 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project KeyType& operator*() const { return *get(); } 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project KeyType* operator->() const { return get(); } 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HashTableKeysIterator& operator++() { ++m_impl; return *this; } 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // postfix ++ intentionally omitted 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project operator HashTableConstKeysIterator<HashTableType, KeyType, MappedType>() { 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ConstIterator i = m_impl; 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return i; 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Iterator m_impl; 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }; 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename HashTableType, typename KeyType, typename MappedType> struct HashTableValuesIterator { 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project private: 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project typedef HashTableIteratorAdapter<HashTableType, std::pair<KeyType, MappedType> > Iterator; 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project typedef HashTableConstIteratorAdapter<HashTableType, std::pair<KeyType, MappedType> > ConstIterator; 1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project public: 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HashTableValuesIterator(const Iterator& impl) : m_impl(impl) {} 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project MappedType* get() const { return &(m_impl.get()->second); } 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project MappedType& operator*() const { return *get(); } 1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project MappedType* operator->() const { return get(); } 1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HashTableValuesIterator& operator++() { ++m_impl; return *this; } 1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // postfix ++ intentionally omitted 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project operator HashTableConstValuesIterator<HashTableType, KeyType, MappedType>() { 1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ConstIterator i = m_impl; 1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return i; 1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Iterator m_impl; 1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }; 1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename T, typename U, typename V> 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project inline bool operator==(const HashTableConstKeysIterator<T, U, V>& a, const HashTableConstKeysIterator<T, U, V>& b) 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return a.m_impl == b.m_impl; 1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename T, typename U, typename V> 1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project inline bool operator!=(const HashTableConstKeysIterator<T, U, V>& a, const HashTableConstKeysIterator<T, U, V>& b) 1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return a.m_impl != b.m_impl; 1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename T, typename U, typename V> 1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project inline bool operator==(const HashTableConstValuesIterator<T, U, V>& a, const HashTableConstValuesIterator<T, U, V>& b) 1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return a.m_impl == b.m_impl; 1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename T, typename U, typename V> 1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project inline bool operator!=(const HashTableConstValuesIterator<T, U, V>& a, const HashTableConstValuesIterator<T, U, V>& b) 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return a.m_impl != b.m_impl; 1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename T, typename U, typename V> 1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project inline bool operator==(const HashTableKeysIterator<T, U, V>& a, const HashTableKeysIterator<T, U, V>& b) 1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return a.m_impl == b.m_impl; 1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename T, typename U, typename V> 1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project inline bool operator!=(const HashTableKeysIterator<T, U, V>& a, const HashTableKeysIterator<T, U, V>& b) 1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return a.m_impl != b.m_impl; 1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename T, typename U, typename V> 2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project inline bool operator==(const HashTableValuesIterator<T, U, V>& a, const HashTableValuesIterator<T, U, V>& b) 2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return a.m_impl == b.m_impl; 2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename T, typename U, typename V> 2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project inline bool operator!=(const HashTableValuesIterator<T, U, V>& a, const HashTableValuesIterator<T, U, V>& b) 2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return a.m_impl != b.m_impl; 2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WTF 2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // WTF_HashIterators_h 217