-
Notifications
You must be signed in to change notification settings - Fork 106
Expand file tree
/
Copy pathBaseMap.inl
More file actions
107 lines (93 loc) · 4.1 KB
/
Copy pathBaseMap.inl
File metadata and controls
107 lines (93 loc) · 4.1 KB
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
BEGIN_SE()
unsigned int Primes[290] = {
2, 3, 5, 7, 0x0B, 0x0D, 0x11, 0x13, 0x17, 0x1D, 0x1F, 0x25,
0x29, 0x2B, 0x2F, 0x35, 0x3B, 0x3D, 0x43, 0x47, 0x49, 0x4F, 0x53,
0x59, 0x61, 0x65, 0x71, 0x7F, 0x83, 0x95, 0x97, 0x0A3, 0x0AD,
0x0B5, 0x0BF, 0x0D3, 0x0DF, 0x0E9, 0x0F1, 0x0FB, 0x107, 0x10F,
0x119, 0x125, 0x133, 0x137, 0x14B, 0x15B, 0x161, 0x16F, 0x175,
0x17F, 0x18D, 0x191, 0x1A3, 0x1A5, 0x1AF, 0x1BB, 0x1C9, 0x1CD,
0x1DF, 0x1E7, 0x1EB, 0x1F7, 0x209, 0x21D, 0x22D, 0x233, 0x23B,
0x24B, 0x251, 0x259, 0x265, 0x277, 0x281, 0x28D, 0x295, 0x2A1,
0x2AB, 0x2B3, 0x2BD, 0x2CF, 0x2D7, 0x2DD, 0x2E7, 0x2EF, 0x2F9,
0x305, 0x313, 0x31D, 0x329, 0x32B, 0x335, 0x347, 0x355, 0x35F,
0x36D, 0x371, 0x38B, 0x38F, 0x3A1, 0x3A9, 0x3AD, 0x3B9, 0x3C7,
0x3CB, 0x3D7, 0x3DF, 0x3F1, 0x41B, 0x44F, 0x47F, 0x4B1, 0x4EB,
0x515, 0x5AB, 0x641, 0x679, 0x6AD, 0x6D9, 0x709, 0x79F, 0x7D3,
0x805, 0x89B, 0x8CB, 0x905, 0x92F, 0x9C7, 0x9F7, 0x0A31, 0x0A61,
0x0A93, 0x0AC1, 0x0AF1, 0x0B23, 0x0B57, 0x0B89, 0x0BB9, 0x0CB3,
0x0CE5, 0x0D1F, 0x0D4F, 0x0D81, 0x0E17, 0x0E4B, 0x0E75, 0x0F0B,
0x0F43, 0x0FD3, 0x1069, 0x109D, 0x1139, 0x1163, 0x119B, 0x122B,
0x125F, 0x128F, 0x12C1, 0x1357, 0x138B, 0x13BB, 0x13ED, 0x1421,
0x1459, 0x14E7, 0x151F, 0x15B5, 0x1645, 0x16DB, 0x170F, 0x1741,
0x1777, 0x17A5, 0x17D5, 0x1807, 0x183B, 0x1871, 0x189D, 0x18D1,
0x19CF, 0x19FD, 0x1A2D, 0x1AC9, 0x1AFB, 0x1B2F, 0x1B59, 0x1B91,
0x1BBF, 0x1BEF, 0x1C27, 0x1C55, 0x1C8B, 0x1CB7, 0x1D53, 0x1D87,
0x1DB3, 0x1E49, 0x1EDD, 0x1F0F, 0x1F49, 0x1F75, 0x1FA5, 0x20A1,
0x2135, 0x2231, 0x2263, 0x22F7, 0x2329, 0x2363, 0x238F, 0x23BF,
0x23F3, 0x2429, 0x24BB, 0x254F, 0x2581, 0x267B, 0x26AD, 0x2717,
0x2905, 0x2AFB, 0x2CEF, 0x2EE7, 0x30D7, 0x32C9, 0x34C9, 0x36B9,
0x38A7, 0x3AA5, 0x3C97, 0x3E81, 0x4087, 0x4273, 0x4465, 0x465D,
0x4847, 0x4A39, 0x4C2D, 0x4E2B, 0x501B, 0x5209, 0x53FF, 0x55F3,
0x57E5, 0x59DB, 0x5BD5, 0x5DC1, 0x5FBD, 0x61B5, 0x63B3, 0x6593,
0x6785, 0x6983, 0x6B75, 0x6D61, 0x6F61, 0x7151, 0x733D, 0x753B,
0x772D, 0x7925, 0x7B17, 0x7D03, 0x7EF7, 0x80F5, 0x82DF, 0x84E3,
0x86C5, 0x88CF, 0x8AB3, 0x8CA7, 0x8EAB, 0x908B, 0x927D, 0x947B,
0x9665, 0x986B, 0x9A4F, 0x9C49, 0x9E3B, 0x0A033, 0x0A223, 0x0A41D,
0x0A60D, 0x0A7FB, 0x0A9FD, 0x0ABF1, 0x0ADD5, 0x0AFCF
};
unsigned int GetNearestLowerPrime(unsigned int num)
{
if (num < 2) return 2;
if (num >= 45007) return 45007;
unsigned start = 0;
unsigned end = (unsigned)std::size(Primes);
while (start < end) {
auto mid = (start + end) >> 1;
auto delta = (int64_t)num - Primes[mid];
if (delta >= 0) {
if (delta == 0) {
return Primes[mid];
}
start = mid + 1;
} else {
end = (start + end) >> 1;
}
}
return Primes[start];
}
unsigned int MultiHashMapPrimes[] = {
0x35, 0x61, 0xC1, 0x185, 0x301, 0x607,
0xC07, 0x1807, 0x3001, 0x6011, 0xC005,
0x1800D, 0x30005, 0x60019, 0xC0001, 0x180005,
0x30000B, 0x60000D, 0xC00005, 0x1800013,
0x3000005, 0x6000017, 0x0C000013, 0x18000005,
0x30000059, 0x60000005, 0x400CCCCD
};
unsigned int GetNearestMultiHashMapPrime(unsigned int num)
{
for (auto i = 0; i < std::size(MultiHashMapPrimes); i++) {
if (MultiHashMapPrimes[i] >= num) {
return MultiHashMapPrimes[i];
}
}
return MultiHashMapPrimes[std::size(MultiHashMapPrimes) - 1];
}
unsigned int SmallMultiHashMapPrimes[] = {
5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47,
0x35, 0x61, 0xC1, 0x185, 0x301, 0x607,
0xC07, 0x1807, 0x3001, 0x6011, 0xC005,
0x1800D, 0x30005, 0x60019, 0xC0001, 0x180005,
0x30000B, 0x60000D, 0xC00005, 0x1800013,
0x3000005, 0x6000017, 0x0C000013, 0x18000005,
0x30000059, 0x60000005, 0x400CCCCD
};
unsigned int GetNearestSmallMultiHashMapPrime(unsigned int num)
{
for (auto i = 0; i < std::size(SmallMultiHashMapPrimes); i++) {
if (SmallMultiHashMapPrimes[i] >= num) {
return SmallMultiHashMapPrimes[i];
}
}
return SmallMultiHashMapPrimes[std::size(SmallMultiHashMapPrimes) - 1];
}
END_SE()