Fixed hashlib for 64 bit int keys
authorClifford Wolf <clifford@clifford.at>
Wed, 12 Aug 2015 11:37:09 +0000 (13:37 +0200)
committerClifford Wolf <clifford@clifford.at>
Wed, 12 Aug 2015 11:37:09 +0000 (13:37 +0200)
kernel/hashlib.h

index 2f8479502cb8e7f65d5f6c2311687fc4c9c9094f..f94945ecacfa399212393250daf2ad42eb65b79f 100644 (file)
@@ -58,17 +58,23 @@ template<typename T> struct hash_ops {
        }
 };
 
-template<> struct hash_ops<int> {
+struct hash_int_ops {
        template<typename T>
        static inline bool cmp(T a, T b) {
                return a == b;
        }
-       template<typename T>
-       static inline unsigned int hash(T a) {
+       static inline unsigned int hash(int32_t a) {
                return a;
        }
+       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;