File: hash.h

package info (click to toggle)
crawl 2%3A0.23.0-1
  • links: PTS
  • area: main
  • in suites: buster
  • size: 55,948 kB
  • sloc: cpp: 303,973; ansic: 28,797; python: 4,074; perl: 3,247; makefile: 1,632; java: 792; sh: 327; objc: 250; xml: 32; cs: 15; sed: 9; lisp: 3
file content (26 lines) | stat: -rw-r--r-- 702 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#pragma once

static inline uint64_t hash3(uint64_t x, uint64_t y, uint64_t z)
{
    // Some compilers choke on big unsigneds, need to give them in hex.
    uint64_t hash=0xcbf29ce484222325ULL; // 14695981039346656037
    #define FNV64 1099511628211ULL
    hash^=x;
    hash*=FNV64;
    hash^=y;
    hash*=FNV64;
    hash^=z;
    hash*=FNV64;
    x=hash ^ (hash >> 27) ^ (hash << 24) ^ (hash >> 48);
    return x;
}

// TODO Figure out MSVC compatability with
// PURE definitions in this and geom2d.h

#ifdef TARGET_COMPILER_VC
uint32_t hash32(const void *data, int len);
#else
uint32_t hash32(const void *data, int len) PURE;
#endif
unsigned int hash_with_seed(int x, uint32_t seed, uint32_t id = 0);