| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2005, 2006, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2005, 2006, 2008 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 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 136 static const bool safeToCompareToEmptyOrDeleted = true; | 136 static const bool safeToCompareToEmptyOrDeleted = true; |
| 137 }; | 137 }; |
| 138 template<typename P> struct PtrHash<RefPtr<P> > : PtrHash<P*> { | 138 template<typename P> struct PtrHash<RefPtr<P> > : PtrHash<P*> { |
| 139 using PtrHash<P*>::hash; | 139 using PtrHash<P*>::hash; |
| 140 static unsigned hash(const RefPtr<P>& key) { return hash(key.get()); } | 140 static unsigned hash(const RefPtr<P>& key) { return hash(key.get()); } |
| 141 using PtrHash<P*>::equal; | 141 using PtrHash<P*>::equal; |
| 142 static bool equal(const RefPtr<P>& a, const RefPtr<P>& b) { return a ==
b; } | 142 static bool equal(const RefPtr<P>& a, const RefPtr<P>& b) { return a ==
b; } |
| 143 static bool equal(P* a, const RefPtr<P>& b) { return a == b; } | 143 static bool equal(P* a, const RefPtr<P>& b) { return a == b; } |
| 144 static bool equal(const RefPtr<P>& a, P* b) { return a == b; } | 144 static bool equal(const RefPtr<P>& a, P* b) { return a == b; } |
| 145 }; | 145 }; |
| 146 template<typename P> struct PtrHash<RawPtr<P> > : PtrHash<P*> { |
| 147 using PtrHash<P*>::hash; |
| 148 static unsigned hash(const RawPtr<P>& key) { return hash(key.get()); } |
| 149 using PtrHash<P*>::equal; |
| 150 static bool equal(const RawPtr<P>& a, const RawPtr<P>& b) { return a ==
b; } |
| 151 static bool equal(P* a, const RawPtr<P>& b) { return a == b; } |
| 152 static bool equal(const RawPtr<P>& a, P* b) { return a == b; } |
| 153 }; |
| 146 | 154 |
| 147 // default hash function for each type | 155 // default hash function for each type |
| 148 | 156 |
| 149 template<typename T> struct DefaultHash; | 157 template<typename T> struct DefaultHash; |
| 150 | 158 |
| 151 template<typename T, typename U> struct PairHash { | 159 template<typename T, typename U> struct PairHash { |
| 152 static unsigned hash(const std::pair<T, U>& p) | 160 static unsigned hash(const std::pair<T, U>& p) |
| 153 { | 161 { |
| 154 return pairIntHash(DefaultHash<T>::Hash::hash(p.first), DefaultHash<
U>::Hash::hash(p.second)); | 162 return pairIntHash(DefaultHash<T>::Hash::hash(p.first), DefaultHash<
U>::Hash::hash(p.second)); |
| 155 } | 163 } |
| (...skipping 26 matching lines...) Expand all Loading... |
| 182 template<> struct DefaultHash<wchar_t> { typedef IntHash<wchar_t> Hash; }; | 190 template<> struct DefaultHash<wchar_t> { typedef IntHash<wchar_t> Hash; }; |
| 183 #endif | 191 #endif |
| 184 | 192 |
| 185 template<> struct DefaultHash<float> { typedef FloatHash<float> Hash; }; | 193 template<> struct DefaultHash<float> { typedef FloatHash<float> Hash; }; |
| 186 template<> struct DefaultHash<double> { typedef FloatHash<double> Hash; }; | 194 template<> struct DefaultHash<double> { typedef FloatHash<double> Hash; }; |
| 187 | 195 |
| 188 // make PtrHash the default hash function for pointer types that don't speci
alize | 196 // make PtrHash the default hash function for pointer types that don't speci
alize |
| 189 | 197 |
| 190 template<typename P> struct DefaultHash<P*> { typedef PtrHash<P*> Hash; }; | 198 template<typename P> struct DefaultHash<P*> { typedef PtrHash<P*> Hash; }; |
| 191 template<typename P> struct DefaultHash<RefPtr<P> > { typedef PtrHash<RefPtr
<P> > Hash; }; | 199 template<typename P> struct DefaultHash<RefPtr<P> > { typedef PtrHash<RefPtr
<P> > Hash; }; |
| 200 template<typename P> struct DefaultHash<RawPtr<P> > { typedef PtrHash<RawPtr
<P> > Hash; }; |
| 192 | 201 |
| 193 // make IntPairHash the default hash function for pairs of (at most) 32-bit
integers. | 202 // make IntPairHash the default hash function for pairs of (at most) 32-bit
integers. |
| 194 | 203 |
| 195 template<> struct DefaultHash<std::pair<short, short> > { typedef IntPairHas
h<short, short> Hash; }; | 204 template<> struct DefaultHash<std::pair<short, short> > { typedef IntPairHas
h<short, short> Hash; }; |
| 196 template<> struct DefaultHash<std::pair<short, unsigned short> > { typedef I
ntPairHash<short, unsigned short> Hash; }; | 205 template<> struct DefaultHash<std::pair<short, unsigned short> > { typedef I
ntPairHash<short, unsigned short> Hash; }; |
| 197 template<> struct DefaultHash<std::pair<short, int> > { typedef IntPairHash<
short, int> Hash; }; | 206 template<> struct DefaultHash<std::pair<short, int> > { typedef IntPairHash<
short, int> Hash; }; |
| 198 template<> struct DefaultHash<std::pair<short, unsigned> > { typedef IntPair
Hash<short, unsigned> Hash; }; | 207 template<> struct DefaultHash<std::pair<short, unsigned> > { typedef IntPair
Hash<short, unsigned> Hash; }; |
| 199 template<> struct DefaultHash<std::pair<unsigned short, short> > { typedef I
ntPairHash<unsigned short, short> Hash; }; | 208 template<> struct DefaultHash<std::pair<unsigned short, short> > { typedef I
ntPairHash<unsigned short, short> Hash; }; |
| 200 template<> struct DefaultHash<std::pair<unsigned short, unsigned short> > {
typedef IntPairHash<unsigned short, unsigned short> Hash; }; | 209 template<> struct DefaultHash<std::pair<unsigned short, unsigned short> > {
typedef IntPairHash<unsigned short, unsigned short> Hash; }; |
| 201 template<> struct DefaultHash<std::pair<unsigned short, int> > { typedef Int
PairHash<unsigned short, int> Hash; }; | 210 template<> struct DefaultHash<std::pair<unsigned short, int> > { typedef Int
PairHash<unsigned short, int> Hash; }; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 213 | 222 |
| 214 template<typename T, typename U> struct DefaultHash<std::pair<T, U> > { type
def PairHash<T, U> Hash; }; | 223 template<typename T, typename U> struct DefaultHash<std::pair<T, U> > { type
def PairHash<T, U> Hash; }; |
| 215 | 224 |
| 216 } // namespace WTF | 225 } // namespace WTF |
| 217 | 226 |
| 218 using WTF::DefaultHash; | 227 using WTF::DefaultHash; |
| 219 using WTF::IntHash; | 228 using WTF::IntHash; |
| 220 using WTF::PtrHash; | 229 using WTF::PtrHash; |
| 221 | 230 |
| 222 #endif // WTF_HashFunctions_h | 231 #endif // WTF_HashFunctions_h |
| OLD | NEW |