Microsoft Visual C++ fixes in hashlib; template specializations on int32_t and int64_t.
authorAndrei Errapart <andrei@errapartengineering.com>
Mon, 24 Aug 2015 20:49:23 +0000 (22:49 +0200)
committerClifford Wolf <clifford@clifford.at>
Tue, 1 Sep 2015 10:40:24 +0000 (12:40 +0200)
kernel/hashlib.h

index f94945ecacfa399212393250daf2ad42eb65b79f..3cc95b6e4b5fa5cc5599f7dcca4277a67a458278 100644 (file)
@@ -63,18 +63,21 @@ struct hash_int_ops {
        static inline bool cmp(T a, T b) {
                return a == b;
        }
+};
+
+template<> struct hash_ops<int32_t> : hash_int_ops
+{
        static inline unsigned int hash(int32_t a) {
                return a;
        }
+};
+template<> struct hash_ops<int64_t> : hash_int_ops
+{
        static inline unsigned int hash(int64_t a) {
                return mkhash(a, a >> 32);
        }
 };
 
-template<> struct hash_ops<int> : hash_int_ops {};
-template<> struct hash_ops<long> : hash_int_ops {};
-template<> struct hash_ops<long long> : hash_int_ops {};
-
 template<> struct hash_ops<std::string> {
        static inline bool cmp(const std::string &a, const std::string &b) {
                return a == b;
@@ -118,10 +121,9 @@ template<typename T> struct hash_ops<std::vector<T>> {
                return a == b;
        }
        static inline unsigned int hash(std::vector<T> a) {
-               hash_ops<T> t_ops;
                unsigned int h = mkhash_init;
                for (auto k : a)
-                       h = mkhash(h, t_ops.hash(k));
+                       h = mkhash(h, hash_ops<T>::hash(k));
                return h;
        }
 };