From 0c4d88baccd3d253479ac94f444b0f3c621807a2 Mon Sep 17 00:00:00 2001
From: Geza Lore <gezalore@gmail.com>
Date: Sun, 13 Jun 2021 20:04:26 +0100
Subject: [PATCH] Fix V3Hash when building -m32

---
 src/V3Hash.h | 24 +++++++++++-------------
 1 file changed, 11 insertions(+), 13 deletions(-)

diff --git a/src/V3Hash.h b/src/V3Hash.h
index b28b3bf1..06223567 100644
--- a/src/V3Hash.h
+++ b/src/V3Hash.h
@@ -26,6 +26,10 @@
 class V3Hash final {
     uint32_t m_value;  // The 32-bit hash value.

+    inline static uint32_t combine(uint32_t a, uint32_t b) {
+        return a ^ (b + 0x9e3779b9 + (a << 6) + (a >> 2));
+    }
+
 public:
     // CONSTRUCTORS
     V3Hash()
@@ -34,8 +38,10 @@ public:
         : m_value{val} {}
     explicit V3Hash(int32_t val)
         : m_value{static_cast<uint32_t>(val)} {}
-    explicit V3Hash(size_t val)
-        : m_value{static_cast<uint32_t>(val)} {}
+    explicit V3Hash(uint64_t val)
+        : m_value{combine(static_cast<uint32_t>(val), static_cast<uint32_t>(val >> 32))} {}
+    explicit V3Hash(int64_t val)
+        : m_value{combine(static_cast<uint32_t>(val), static_cast<uint32_t>(val >> 32))} {}
     explicit V3Hash(const std::string& val);

     // METHODS
@@ -48,20 +54,12 @@ public:
     bool operator<(const V3Hash& rh) const { return m_value < rh.m_value; }

     // '+' combines hashes
-    V3Hash operator+(const V3Hash& that) const {
-        return V3Hash(m_value ^ (that.m_value + 0x9e3779b9 + (m_value << 6) + (m_value >> 2)));
+    template <class T> V3Hash operator+(T that) const {
+        return V3Hash(combine(m_value, V3Hash(that).m_value));
     }
-    V3Hash operator+(uint32_t value) const { return *this + V3Hash(value); }
-    V3Hash operator+(int32_t value) const { return *this + V3Hash(value); }
-    V3Hash operator+(size_t value) const { return *this + V3Hash(value); }
-    V3Hash operator+(const std::string& value) const { return *this + V3Hash(value); }

     // '+=' combines in place
-    V3Hash& operator+=(const V3Hash& that) { return *this = *this + that; }
-    V3Hash& operator+=(uint32_t value) { return *this += V3Hash(value); }
-    V3Hash& operator+=(int32_t value) { return *this += V3Hash(value); }
-    V3Hash& operator+=(size_t value) { return *this += V3Hash(value); }
-    V3Hash& operator+=(const std::string& that) { return *this += V3Hash(that); }
+    template <class T> V3Hash& operator+=(T that) { return *this = *this + that; }
 };

 std::ostream& operator<<(std::ostream& os, const V3Hash& rhs);
--
2.32.0

