Chromium Code Reviews| 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 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 277 struct PairHash | 277 struct PairHash |
| 278 : PairHashImpl<T, | 278 : PairHashImpl<T, |
| 279 U, | 279 U, |
| 280 std::is_integral<T>::value && std::is_integral<U>::value> {}; | 280 std::is_integral<T>::value && std::is_integral<U>::value> {}; |
| 281 | 281 |
| 282 template <typename T, typename U> | 282 template <typename T, typename U> |
| 283 struct DefaultHash<std::pair<T, U>> { | 283 struct DefaultHash<std::pair<T, U>> { |
| 284 using Hash = PairHash<T, U>; | 284 using Hash = PairHash<T, U>; |
| 285 }; | 285 }; |
| 286 | 286 |
| 287 template <typename T, typename U, typename V> | |
| 288 struct TupleHash { | |
|
Nico
2017/04/11 15:41:05
If we must have a TupleHash, consider making it a
msarett1
2017/04/11 20:52:05
Seems fine to write a custom hashing implementatio
| |
| 289 static unsigned GetHash(const std::tuple<T, U, V>& p) { | |
| 290 return HashInts(HashInts(DefaultHash<T>::Hash::GetHash(std::get<0>(p)), | |
| 291 DefaultHash<U>::Hash::GetHash(std::get<1>(p))), | |
| 292 DefaultHash<V>::Hash::GetHash(std::get<2>(p))); | |
| 293 } | |
| 294 static bool Equal(const std::tuple<T, U, V>& a, | |
| 295 const std::tuple<T, U, V>& b) { | |
| 296 return DefaultHash<T>::Hash::Equal(std::get<0>(a), std::get<0>(b)) && | |
| 297 DefaultHash<U>::Hash::Equal(std::get<1>(a), std::get<1>(b)) && | |
| 298 DefaultHash<V>::Hash::Equal(std::get<2>(a), std::get<2>(b)); | |
| 299 } | |
| 300 static const bool safe_to_compare_to_empty_or_deleted = | |
| 301 DefaultHash<T>::Hash::safe_to_compare_to_empty_or_deleted && | |
| 302 DefaultHash<U>::Hash::safe_to_compare_to_empty_or_deleted && | |
| 303 DefaultHash<V>::Hash::safe_to_compare_to_empty_or_deleted; | |
| 304 }; | |
| 305 | |
| 306 template <typename T, typename U, typename V> | |
| 307 struct DefaultHash<std::tuple<T, U, V>> { | |
| 308 using Hash = TupleHash<T, U, V>; | |
| 309 }; | |
| 310 | |
| 287 } // namespace WTF | 311 } // namespace WTF |
| 288 | 312 |
| 289 using WTF::DefaultHash; | 313 using WTF::DefaultHash; |
| 290 using WTF::IntHash; | 314 using WTF::IntHash; |
| 291 using WTF::PtrHash; | 315 using WTF::PtrHash; |
| 292 | 316 |
| 293 #endif // WTF_HashFunctions_h | 317 #endif // WTF_HashFunctions_h |
| OLD | NEW |