8000 Backport: Add inline murmurhash32(uint32) function. · SoapMaker101/postgres@c0fda30 · GitHub
[go: up one dir, main page]

Skip to content

Commit c0fda30

Browse files
committed
Backport: 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 https://postgr.es/m/15ae5ae2-bc74-ebef-f9d6-34b16423cc04@blackducksoftware.com Original-Commit: 791961f
1 parent 1b2a386 commit c0fda30

File tree

2 files changed

+29
-18
lines changed

2 files changed

+29
-18
lines changed

src/backend/nodes/tidbitmap.c

Lines changed: 2 additions & 18 deletions
< 8000 td data-grid-cell-id="diff-cc8cf787e17bd5f9b971bdc3d5aa5707619cbffd75b34d0ac1a8b5096567934d-242-240-0" data-selected="false" role="gridcell" style="background-color:var(--diffBlob-deletionNum-bgColor, var(--diffBlob-deletion-bgColor-num));text-align:center" tabindex="-1" valign="top" class="focusable-grid-cell diff-line-number position-relative left-side">242
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
#include "nodes/tidbitmap.h"
4646
#include "storage/lwlock.h"
4747
#include "utils/dsa.h"
48+
#include "utils/hashutils.h"
4849

4950
/*
5051
* 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);
237238
static int tbm_shared_comparator(const void *left, const void *right,
238239
void *arg);
239240

240-
/*
241-
* Simple inline murmur hash implementation for the exact width required, for
-
* performance.
243-
*/
244-
static inline uint32
245-
hash_blockno(BlockNumber b)
246-
{
247-
uint32 h = b;
248-
249-
h ^= h >> 16;
250-
h *= 0x85ebca6b;
251-
h ^= h >> 13;
252-
h *= 0xc2b2ae35;
253-
h ^= h >> 16;
254-
return h;
255-
}
256-
257241
/* define hashtable mapping block numbers to PagetableEntry's */
258242
#define SH_USE_NONDEFAULT_ALLOCATOR
259243
#define SH_PREFIX pagetable
260244
#define SH_ELEMENT_TYPE PagetableEntry
261245
#define SH_KEY_TYPE BlockNumber
262246
#define SH_KEY blockno
263-
#define SH_HASH_KEY(tb, key) hash_blockno(key)
247+
#define 8000 SH_HASH_KEY(tb, key) murmurhash32(key)
264248
#define SH_EQUAL(tb, a, b) a == b
265249
#define SH_SCOPE static inline
266250
#define SH_DEFINE

src/include/utils/hashutils.h

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/*
2+
* Utilities for working with hash values.
3+
*
4+
* Portions Copyright (c) 2017, PostgreSQL Global Development Group
5+
*/
6+
7+
#ifndef HASHUTILS_H
8+
#define HASHUTILS_H
9+
10+
/*
11+
* Simple inline murmur hash implementation hashing a 32 bit ingeger, for
12+
* performance.
13+
*/
14+
static inline uint32
15+
murmurhash32(uint32 data)
16+
{
17+
uint32 h = data;
18+
19+
h ^= h >> 16;
20+
h *= 0x85ebca6b;
21+
h ^= h >> 13;
22+
h *= 0xc2b2ae35;
23+
h ^= h >> 16;
24+
return h;
25+
}
26+
27+
#endif /* HASHUTILS_H */

0 commit comments

Comments
 (0)
0