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