18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 2635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Copyright (C) 2005, 2006, 2008 Apple Inc. All rights reserved. 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version. 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful, 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details. 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB. If not, write to 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02110-1301, USA. 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef WTF_HashCountedSet_h 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define WTF_HashCountedSet_h 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Assertions.h" 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "HashMap.h" 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Vector.h" 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WTF { 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename Value, typename HashFunctions = typename DefaultHash<Value>::Hash, 31ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch typename Traits = HashTraits<Value> > class HashCountedSet { 32ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch WTF_MAKE_FAST_ALLOCATED; 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project private: 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project typedef HashMap<Value, unsigned, HashFunctions, Traits> ImplType; 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project public: 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project typedef Value ValueType; 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project typedef typename ImplType::iterator iterator; 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project typedef typename ImplType::const_iterator const_iterator; 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HashCountedSet() {} 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int size() const; 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int capacity() const; 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool isEmpty() const; 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 46dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Iterators iterate over pairs of values and counts. 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project iterator begin(); 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project iterator end(); 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const_iterator begin() const; 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const_iterator end() const; 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 52231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block iterator find(const ValueType&); 53231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block const_iterator find(const ValueType&) const; 54231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block bool contains(const ValueType&) const; 55231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block unsigned count(const ValueType&) const; 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 57dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Increases the count if an equal value is already present 58dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // the return value is a pair of an interator to the new value's 59dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // location, and a bool that is true if an new entry was added. 60231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block std::pair<iterator, bool> add(const ValueType&); 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 62dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Reduces the count of the value, and removes it if count 63dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // goes down to zero, returns true if the value is removed. 64dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bool remove(const ValueType&); 65dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bool remove(iterator); 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 67dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Removes the value, regardless of its count. 68231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block void removeAll(iterator); 69231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block void removeAll(const ValueType&); 70231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 71dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Clears the whole set. 72231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block void clear(); 73231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project private: 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ImplType m_impl; 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }; 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename Value, typename HashFunctions, typename Traits> 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project inline int HashCountedSet<Value, HashFunctions, Traits>::size() const 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_impl.size(); 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename Value, typename HashFunctions, typename Traits> 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project inline int HashCountedSet<Value, HashFunctions, Traits>::capacity() const 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_impl.capacity(); 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename Value, typename HashFunctions, typename Traits> 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project inline bool HashCountedSet<Value, HashFunctions, Traits>::isEmpty() const 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return size() == 0; 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename Value, typename HashFunctions, typename Traits> 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project inline typename HashCountedSet<Value, HashFunctions, Traits>::iterator HashCountedSet<Value, HashFunctions, Traits>::begin() 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_impl.begin(); 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename Value, typename HashFunctions, typename Traits> 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project inline typename HashCountedSet<Value, HashFunctions, Traits>::iterator HashCountedSet<Value, HashFunctions, Traits>::end() 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_impl.end(); 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename Value, typename HashFunctions, typename Traits> 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project inline typename HashCountedSet<Value, HashFunctions, Traits>::const_iterator HashCountedSet<Value, HashFunctions, Traits>::begin() const 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_impl.begin(); 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename Value, typename HashFunctions, typename Traits> 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project inline typename HashCountedSet<Value, HashFunctions, Traits>::const_iterator HashCountedSet<Value, HashFunctions, Traits>::end() const 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_impl.end(); 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename Value, typename HashFunctions, typename Traits> 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project inline typename HashCountedSet<Value, HashFunctions, Traits>::iterator HashCountedSet<Value, HashFunctions, Traits>::find(const ValueType& value) 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_impl.find(value); 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename Value, typename HashFunctions, typename Traits> 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project inline typename HashCountedSet<Value, HashFunctions, Traits>::const_iterator HashCountedSet<Value, HashFunctions, Traits>::find(const ValueType& value) const 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_impl.find(value); 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename Value, typename HashFunctions, typename Traits> 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project inline bool HashCountedSet<Value, HashFunctions, Traits>::contains(const ValueType& value) const 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_impl.contains(value); 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename Value, typename HashFunctions, typename Traits> 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project inline unsigned HashCountedSet<Value, HashFunctions, Traits>::count(const ValueType& value) const 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_impl.get(value); 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename Value, typename HashFunctions, typename Traits> 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project inline std::pair<typename HashCountedSet<Value, HashFunctions, Traits>::iterator, bool> HashCountedSet<Value, HashFunctions, Traits>::add(const ValueType &value) 1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project pair<iterator, bool> result = m_impl.add(value, 0); 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ++result.first->second; 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return result; 1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename Value, typename HashFunctions, typename Traits> 153dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block inline bool HashCountedSet<Value, HashFunctions, Traits>::remove(const ValueType& value) 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 155dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return remove(find(value)); 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename Value, typename HashFunctions, typename Traits> 159dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block inline bool HashCountedSet<Value, HashFunctions, Traits>::remove(iterator it) 1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (it == end()) 162dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return false; 1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsigned oldVal = it->second; 165dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ASSERT(oldVal); 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsigned newVal = oldVal - 1; 167dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (newVal) { 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project it->second = newVal; 169dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return false; 170dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 171dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 172dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_impl.remove(it); 173dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return true; 1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename Value, typename HashFunctions, typename Traits> 177231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block inline void HashCountedSet<Value, HashFunctions, Traits>::removeAll(const ValueType& value) 178231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 179231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block removeAll(find(value)); 180231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 181231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 182231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block template<typename Value, typename HashFunctions, typename Traits> 183231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block inline void HashCountedSet<Value, HashFunctions, Traits>::removeAll(iterator it) 184231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 185231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (it == end()) 186231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 187231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 188231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block m_impl.remove(it); 189231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 190231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 191231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block template<typename Value, typename HashFunctions, typename Traits> 1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project inline void HashCountedSet<Value, HashFunctions, Traits>::clear() 1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_impl.clear(); 1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename Value, typename HashFunctions, typename Traits, typename VectorType> 1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project inline void copyToVector(const HashCountedSet<Value, HashFunctions, Traits>& collection, VectorType& vector) 1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project typedef typename HashCountedSet<Value, HashFunctions, Traits>::const_iterator iterator; 2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project vector.resize(collection.size()); 2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project iterator it = collection.begin(); 2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project iterator end = collection.end(); 2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (unsigned i = 0; it != end; ++it, ++i) 2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project vector[i] = *it; 2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project template<typename Value, typename HashFunctions, typename Traits> 2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project inline void copyToVector(const HashCountedSet<Value, HashFunctions, Traits>& collection, Vector<Value>& vector) 2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project typedef typename HashCountedSet<Value, HashFunctions, Traits>::const_iterator iterator; 2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project vector.resize(collection.size()); 2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project iterator it = collection.begin(); 2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project iterator end = collection.end(); 2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (unsigned i = 0; it != end; ++it, ++i) 2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project vector[i] = (*it).first; 2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace khtml 2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing WTF::HashCountedSet; 2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif /* WTF_HashCountedSet_h */ 229