Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
att
GitHub Repository: att/ast
Path: blob/master/src/lib/libast/include/fnv.h
1810 views
1
/***********************************************************************
2
* *
3
* This software is part of the ast package *
4
* Copyright (c) 1985-2011 AT&T Intellectual Property *
5
* and is licensed under the *
6
* Eclipse Public License, Version 1.0 *
7
* by AT&T Intellectual Property *
8
* *
9
* A copy of the License is available at *
10
* http://www.eclipse.org/org/documents/epl-v10.html *
11
* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
12
* *
13
* Information and Software Systems Research *
14
* AT&T Research *
15
* Florham Park NJ *
16
* *
17
* Glenn Fowler <[email protected]> *
18
* David Korn <[email protected]> *
19
* Phong Vo <[email protected]> *
20
* *
21
***********************************************************************/
22
#pragma prototyped
23
/*
24
* Glenn Fowler
25
* Landon Kurt Knoll
26
* Phong Vo
27
*
28
* FNV-1 linear congruent checksum/hash/PRNG
29
* see http://www.isthe.com/chongo/tech/comp/fnv/
30
*/
31
32
#ifndef _FNV_H
33
#define _FNV_H
34
35
#include <ast_common.h>
36
37
#define FNV_INIT 0x811c9dc5L
38
#define FNV_MULT 0x01000193L
39
40
#define FNVINIT(h) (h = FNV_INIT)
41
#define FNVPART(h,c) (h = (h) * FNV_MULT ^ (c))
42
#define FNVSUM(h,s,n) do { \
43
register size_t _i_ = 0; \
44
while (_i_ < n) \
45
FNVPART(h, ((unsigned char*)s)[_i_++]); \
46
} while (0)
47
48
#if _typ_int64_t
49
50
#ifdef _ast_LL
51
52
#define FNV_INIT64 0xcbf29ce484222325LL
53
#define FNV_MULT64 0x00000100000001b3LL
54
55
#else
56
57
#define FNV_INIT64 ((int64_t)0xcbf29ce484222325)
58
#define FNV_MULT64 ((int64_t)0x00000100000001b3)
59
60
#endif
61
62
#define FNVINIT64(h) (h = FNV_INIT64)
63
#define FNVPART64(h,c) (h = (h) * FNV_MULT64 ^ (c))
64
#define FNVSUM64(h,s,n) do { \
65
register int _i_ = 0; \
66
while (_i_ < n) \
67
FNVPART64(h, ((unsigned char*)s)[_i_++]); \
68
} while (0)
69
70
#endif
71
72
#endif
73
74