mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	Add inline murmurhash32(uint32) function.
The function already existed in tidbitmap.c but more users requiring fast hashing of 32bit ints are coming up. Author: Andres Freund Discussion: https://postgr.es/m/20170914061207.zxotvyopetm7lrrp@alap3.anarazel.de
This commit is contained in:
		@@ -45,6 +45,7 @@
 | 
			
		||||
#include "nodes/tidbitmap.h"
 | 
			
		||||
#include "storage/lwlock.h"
 | 
			
		||||
#include "utils/dsa.h"
 | 
			
		||||
#include "utils/hashutils.h"
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The maximum number of tuples per page is not large (typically 256 with
 | 
			
		||||
@@ -237,30 +238,13 @@ static int	tbm_comparator(const void *left, const void *right);
 | 
			
		||||
static int tbm_shared_comparator(const void *left, const void *right,
 | 
			
		||||
					  void *arg);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Simple inline murmur hash implementation for the exact width required, for
 | 
			
		||||
 * performance.
 | 
			
		||||
 */
 | 
			
		||||
static inline uint32
 | 
			
		||||
hash_blockno(BlockNumber b)
 | 
			
		||||
{
 | 
			
		||||
	uint32		h = b;
 | 
			
		||||
 | 
			
		||||
	h ^= h >> 16;
 | 
			
		||||
	h *= 0x85ebca6b;
 | 
			
		||||
	h ^= h >> 13;
 | 
			
		||||
	h *= 0xc2b2ae35;
 | 
			
		||||
	h ^= h >> 16;
 | 
			
		||||
	return h;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* define hashtable mapping block numbers to PagetableEntry's */
 | 
			
		||||
#define SH_USE_NONDEFAULT_ALLOCATOR
 | 
			
		||||
#define SH_PREFIX pagetable
 | 
			
		||||
#define SH_ELEMENT_TYPE PagetableEntry
 | 
			
		||||
#define SH_KEY_TYPE BlockNumber
 | 
			
		||||
#define SH_KEY blockno
 | 
			
		||||
#define SH_HASH_KEY(tb, key) hash_blockno(key)
 | 
			
		||||
#define SH_HASH_KEY(tb, key) murmurhash32(key)
 | 
			
		||||
#define SH_EQUAL(tb, a, b) a == b
 | 
			
		||||
#define SH_SCOPE static inline
 | 
			
		||||
#define SH_DEFINE
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user