Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(107)

Side by Side Diff: third_party/WebKit/Source/wtf/HashFunctions.h

Issue 2687923002: WTF: Support enums in DefaultHash and HashTraits by casting to integral types. (Closed)
Patch Set: . Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 return a == b.get(); 191 return a == b.get();
192 } 192 }
193 }; 193 };
194 194
195 // Default hash function for each type. 195 // Default hash function for each type.
196 template <typename T> 196 template <typename T>
197 struct DefaultHash; 197 struct DefaultHash;
198 198
199 // Actual implementation of DefaultHash. 199 // Actual implementation of DefaultHash.
200 // 200 //
201 // The case of |isIntegral| == false is not implemented. If you see a compile 201 // The case of |isIntegralOrEnum| == false is not implemented. If you see a
202 // error saying DefaultHashImpl<T, false> is not defined, that's because the 202 // compile error saying DefaultHashImpl<T, false> is not defined, that's because
203 // default hash functions for T are not defined. You need to implement them 203 // the default hash functions for T are not defined. You need to implement them
204 // yourself. 204 // yourself.
205 template <typename T, bool isIntegral> 205 template <typename T, bool isIntegralOrEnum>
206 struct DefaultHashImpl; 206 struct DefaultHashImpl;
207 207
208 template <typename T> 208 template <typename T>
209 struct DefaultHashImpl<T, true> { 209 struct DefaultHashImpl<T, true> {
210 using Hash = IntHash<typename std::make_unsigned<T>::type>; 210 using Hash = IntHash<T>;
211 }; 211 };
212 212
213 // Canonical implementation of DefaultHash. 213 // Canonical implementation of DefaultHash.
214 template <typename T> 214 template <typename T>
215 struct DefaultHash : DefaultHashImpl<T, std::is_integral<T>::value> {}; 215 struct DefaultHash
216 : DefaultHashImpl<T, std::is_integral<T>::value || std::is_enum<T>::value> {
217 };
216 218
217 // Specializations of DefaultHash follow. 219 // Specializations of DefaultHash follow.
218 template <> 220 template <>
219 struct DefaultHash<float> { 221 struct DefaultHash<float> {
220 using Hash = FloatHash<float>; 222 using Hash = FloatHash<float>;
221 }; 223 };
222 template <> 224 template <>
223 struct DefaultHash<double> { 225 struct DefaultHash<double> {
224 using Hash = FloatHash<double>; 226 using Hash = FloatHash<double>;
225 }; 227 };
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 using Hash = PairHash<T, U>; 284 using Hash = PairHash<T, U>;
283 }; 285 };
284 286
285 } // namespace WTF 287 } // namespace WTF
286 288
287 using WTF::DefaultHash; 289 using WTF::DefaultHash;
288 using WTF::IntHash; 290 using WTF::IntHash;
289 using WTF::PtrHash; 291 using WTF::PtrHash;
290 292
291 #endif // WTF_HashFunctions_h 293 #endif // WTF_HashFunctions_h
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/platform/weborigin/SchemeRegistry.cpp ('k') | third_party/WebKit/Source/wtf/HashTraits.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698