Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Add a hash_combine function for mixing hash values.
authorAndres Freund <andres@anarazel.de>
Tue, 22 Aug 2017 22:36:49 +0000 (15:36 -0700)
committerAndres Freund <andres@anarazel.de>
Tue, 22 Aug 2017 22:36:49 +0000 (15:36 -0700)
This hash function is derived from Boost's function of the same name.

Author: Andres Freund, Thomas Munro
Discussion: https://postgr.es/m/CAEepm%3D3rdgjfxW4cKvJ0OEmya2-34B0qHNG1xV0vK7TGPJGMUQ%40mail.gmail.com
Discussion: https://postgr.es/m/20170731210844.3cwrkmsmbbpt4rjc%40alap3.anarazel.de

src/include/utils/hashutils.h [new file with mode: 0644]

diff --git a/src/include/utils/hashutils.h b/src/include/utils/hashutils.h
new file mode 100644 (file)
index 0000000..56b7bfc
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * Utilities for working with hash values.
+ *
+ * Portions Copyright (c) 2017, PostgreSQL Global Development Group
+ */
+
+#ifndef HASHUTILS_H
+#define HASHUTILS_H
+
+/*
+ * Combine two hash values, resulting in another hash value, with decent bit
+ * mixing.
+ *
+ * Similar to boost's hash_combine().
+ */
+static inline uint32
+hash_combine(uint32 a, uint32 b)
+{
+   a ^= b + 0x9e3779b9 + (a << 6) + (a >> 2);
+   return a;
+}
+
+#endif                         /* HASHUTILS_H */