Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wine-mirror
GitHub Repository: wine-mirror/wine
Path: blob/master/libs/xml2/include/private/dict.h
4394 views
1
#ifndef XML_DICT_H_PRIVATE__
2
#define XML_DICT_H_PRIVATE__
3
4
#include <libxml/dict.h>
5
6
/*
7
* Values are ANDed with 0xFFFFFFFF to support platforms where
8
* unsigned is larger than 32 bits. With 32-bit unsigned values,
9
* modern compilers should optimize the operation away.
10
*/
11
12
#define HASH_ROL(x,n) ((x) << (n) | ((x) & 0xFFFFFFFF) >> (32 - (n)))
13
#define HASH_ROR(x,n) (((x) & 0xFFFFFFFF) >> (n) | (x) << (32 - (n)))
14
15
/*
16
* GoodOAAT: One of a smallest non-multiplicative One-At-a-Time functions
17
* that passes SMHasher.
18
*
19
* Author: Sokolov Yura aka funny-falcon
20
*/
21
22
#define HASH_INIT(h1, h2, seed) \
23
do { \
24
h1 = seed ^ 0x3b00; \
25
h2 = HASH_ROL(seed, 15); \
26
} while (0)
27
28
#define HASH_UPDATE(h1, h2, ch) \
29
do { \
30
h1 += ch; \
31
h1 += h1 << 3; \
32
h2 += h1; \
33
h2 = HASH_ROL(h2, 7); \
34
h2 += h2 << 2; \
35
} while (0)
36
37
/* Result is in h2 */
38
#define HASH_FINISH(h1, h2) \
39
do { \
40
h1 ^= h2; \
41
h1 += HASH_ROL(h2, 14); \
42
h2 ^= h1; h2 += HASH_ROR(h1, 6); \
43
h1 ^= h2; h1 += HASH_ROL(h2, 5); \
44
h2 ^= h1; h2 += HASH_ROR(h1, 8); \
45
h2 &= 0xFFFFFFFF; \
46
} while (0)
47
48
typedef struct {
49
unsigned hashValue;
50
const xmlChar *name;
51
} xmlHashedString;
52
53
XML_HIDDEN void
54
xmlInitDictInternal(void);
55
XML_HIDDEN void
56
xmlCleanupDictInternal(void);
57
58
XML_HIDDEN unsigned
59
xmlDictComputeHash(const xmlDict *dict, const xmlChar *string);
60
XML_HIDDEN unsigned
61
xmlDictCombineHash(unsigned v1, unsigned v2);
62
XML_HIDDEN xmlHashedString
63
xmlDictLookupHashed(xmlDictPtr dict, const xmlChar *name, int len);
64
65
XML_HIDDEN void
66
xmlInitRandom(void);
67
XML_HIDDEN void
68
xmlCleanupRandom(void);
69
XML_HIDDEN unsigned
70
xmlRandom(void);
71
72
#endif /* XML_DICT_H_PRIVATE__ */
73
74