1
// GENERATED FILE - DO NOT EDIT.
2
// Generated by gen_builtin_symbols.py using data from builtin_variables.json and
3
// builtin_function_declarations.txt.
5
// Copyright 2020 The ANGLE Project Authors. All rights reserved.
6
// Use of this source code is governed by a BSD-style license that can be
7
// found in the LICENSE file.
9
// ImmutableString_autogen.cpp: Wrapper for static or pool allocated char arrays, that are
10
// guaranteed to be valid and unchanged for the duration of the compilation. Implements
11
// mangledNameHash using perfect hash function from gen_builtin_symbols.py
13
#include "compiler/translator/ImmutableString.h"
15
std::ostream &operator<<(std::ostream &os, const sh::ImmutableString &str)
17
return os.write(str.data(), str.length());
21
# pragma warning(disable : 4309) // truncation of constant value
27
constexpr int mangledkT1[] = {28, 3723, 1475, 371, 51, 3462, 1683, 2358, 3960, 3760,
28
2533, 2942, 2587, 1686, 466, 832, 1198, 860, 3747, 824,
29
946, 743, 1301, 3888, 1189, 1813, 3864, 248, 3590, 3448,
30
1379, 196, 1988, 2577, 1764, 270, 376};
31
constexpr int mangledkT2[] = {2798, 3904, 2564, 1178, 3278, 628, 2610, 1987, 3024, 1954,
32
2499, 12, 3392, 2914, 794, 3806, 3980, 2527, 3362, 3980,
33
1226, 3423, 713, 1825, 1062, 1687, 1758, 3010, 2151, 2612,
34
1189, 1755, 1372, 2634, 1830, 448, 2730};
35
constexpr int mangledkG[] = {
36
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
37
639, 0, 0, 0, 3989, 0, 1769, 0, 634, 1890, 0, 0, 0, 145, 0, 0,
38
0, 0, 3626, 0, 0, 0, 0, 0, 2169, 0, 0, 0, 0, 1101, 0, 0,
39
0, 0, 0, 0, 0, 2836, 0, 391, 0, 0, 0, 0, 0, 0, 0, 0,
40
0, 0, 3962, 0, 0, 0, 2256, 1708, 0, 594, 0, 0, 0, 0, 0, 557,
41
0, 0, 1169, 825, 3786, 0, 0, 1963, 0, 0, 0, 0, 0, 0, 0, 0,
42
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3407, 0,
43
2374, 0, 0, 0, 0, 0, 3517, 1263, 0, 0, 1281, 989, 3862, 3496, 1810, 0,
44
3143, 0, 0, 0, 3285, 3588, 0, 0, 0, 0, 3089, 0, 1239, 553, 3392, 0,
45
2301, 0, 0, 0, 0, 0, 0, 0, 0, 3748, 0, 0, 0, 2584, 1570, 0,
46
1139, 0, 1034, 0, 0, 0, 0, 1335, 0, 1435, 0, 3637, 0, 0, 0, 58,
47
3114, 0, 0, 0, 2043, 0, 3169, 466, 0, 495, 3598, 0, 0, 0, 0, 3506,
48
4016, 0, 0, 0, 2056, 0, 303, 3319, 0, 0, 818, 1325, 0, 0, 0, 0,
49
3622, 0, 0, 189, 3689, 0, 1735, 0, 0, 804, 0, 0, 0, 0, 3379, 0,
50
1371, 0, 3740, 0, 0, 0, 3495, 0, 0, 0, 409, 0, 0, 0, 2608, 0,
51
1229, 722, 0, 1558, 1391, 3823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
52
0, 3291, 1392, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 308, 0,
53
0, 0, 0, 0, 2436, 0, 0, 0, 743, 3009, 0, 642, 0, 0, 1176, 0,
54
0, 0, 1766, 0, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 0,
55
3422, 3236, 3990, 0, 0, 1347, 0, 0, 0, 832, 3240, 3588, 0, 0, 0, 0,
56
3033, 0, 0, 1365, 0, 0, 0, 0, 173, 3964, 0, 0, 0, 3589, 0, 0,
57
0, 3240, 332, 0, 1714, 3598, 2481, 0, 0, 0, 99, 0, 0, 0, 2221, 0,
58
3696, 0, 1195, 3618, 2753, 1278, 3651, 0, 0, 0, 3229, 0, 745, 0, 0, 1840,
59
0, 0, 1881, 0, 0, 0, 616, 0, 561, 3158, 1367, 0, 0, 0, 571, 416,
60
0, 0, 340, 3425, 1686, 286, 0, 3988, 2657, 0, 391, 280, 0, 0, 0, 0,
61
1019, 0, 0, 0, 0, 3375, 0, 0, 0, 2450, 0, 0, 776, 0, 2748, 0,
62
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 0, 1143, 0,
63
0, 0, 0, 0, 2585, 3511, 0, 311, 0, 442, 0, 0, 0, 0, 1494, 0,
64
0, 0, 0, 0, 3472, 0, 0, 719, 2609, 0, 0, 0, 2108, 2572, 0, 928,
65
2589, 0, 168, 59, 3360, 3743, 502, 0, 2702, 1842, 0, 0, 0, 553, 1072, 2774,
66
1330, 1355, 1713, 0, 231, 855, 1471, 0, 129, 0, 3926, 0, 3734, 0, 0, 0,
67
0, 0, 0, 0, 0, 0, 3430, 0, 269, 2404, 0, 0, 0, 656, 0, 687,
68
360, 2159, 1443, 0, 1863, 0, 0, 0, 0, 0, 1185, 0, 390, 0, 0, 2571,
69
1704, 452, 1997, 0, 3368, 0, 0, 2868, 0, 0, 0, 0, 843, 1996, 477, 0,
70
3539, 1077, 3406, 0, 0, 544, 0, 780, 0, 0, 0, 0, 0, 0, 3816, 617,
71
0, 0, 0, 0, 706, 0, 0, 3204, 0, 462, 0, 0, 701, 3672, 0, 637,
72
0, 0, 3916, 0, 0, 0, 535, 0, 35, 1910, 0, 1463, 619, 0, 1041, 0,
73
0, 0, 0, 0, 3359, 0, 2912, 0, 0, 0, 1118, 0, 2513, 943, 0, 0,
74
79, 0, 0, 0, 3387, 0, 3520, 1663, 0, 0, 0, 3688, 0, 0, 0, 0,
75
3911, 1979, 0, 445, 0, 0, 847, 0, 0, 0, 0, 761, 491, 3991, 185, 0,
76
0, 2133, 0, 3499, 0, 0, 0, 0, 1014, 0, 1715, 0, 483, 0, 2580, 0,
77
0, 0, 2724, 0, 0, 0, 837, 1300, 0, 0, 0, 0, 0, 0, 0, 0,
78
0, 0, 3746, 0, 0, 1613, 3425, 3798, 845, 0, 0, 1921, 0, 0, 0, 0,
79
0, 2589, 3176, 1202, 0, 62, 3823, 4019, 3057, 0, 2992, 2406, 2078, 524, 0, 286,
80
768, 0, 0, 0, 0, 0, 0, 0, 380, 0, 0, 312, 2297, 0, 3737, 0,
81
0, 0, 3915, 0, 3185, 2581, 399, 0, 0, 1023, 3133, 2633, 85, 0, 2367, 0,
82
0, 1657, 0, 0, 1075, 0, 1061, 3206, 0, 3974, 3515, 0, 1056, 0, 0, 0,
83
0, 1204, 0, 3000, 453, 0, 967, 0, 0, 726, 0, 0, 2783, 0, 0, 75,
84
0, 0, 0, 3789, 14, 0, 2026, 2458, 3987, 2971, 0, 0, 1236, 3751, 0, 0,
85
0, 3143, 3506, 0, 115, 3261, 0, 1473, 996, 1203, 1625, 3678, 0, 3327, 2648, 0,
86
0, 0, 1830, 3346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3794, 734, 0,
87
395, 0, 2327, 0, 389, 0, 0, 0, 2024, 0, 0, 0, 439, 0, 0, 0,
88
699, 154, 3658, 0, 3555, 0, 0, 0, 3248, 0, 1783, 3, 0, 0, 0, 1721,
89
913, 58, 0, 3508, 0, 0, 0, 0, 0, 3651, 0, 1914, 0, 0, 0, 1176,
90
0, 0, 2994, 723, 3523, 0, 3619, 0, 500, 0, 2073, 0, 0, 0, 2883, 0,
91
0, 0, 2713, 0, 0, 0, 3322, 0, 0, 3167, 0, 0, 0, 2981, 0, 0,
92
0, 188, 0, 768, 0, 0, 537, 0, 3180, 2744, 222, 0, 0, 0, 0, 0,
93
268, 0, 618, 489, 664, 1437, 3201, 0, 0, 3166, 720, 0, 0, 0, 3125, 797,
94
0, 3427, 0, 0, 1697, 1760, 3215, 1007, 557, 4005, 3545, 41, 0, 0, 0, 1027,
95
0, 0, 346, 3645, 0, 1686, 0, 0, 2761, 967, 0, 3673, 0, 2700, 3365, 322,
96
2043, 2449, 3552, 0, 665, 658, 1131, 1526, 938, 0, 3002, 0, 0, 0, 0, 0,
97
3204, 0, 927, 131, 2262, 1069, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
98
0, 1073, 0, 0, 0, 1128, 3127, 606, 0, 1095, 2066, 0, 0, 0, 0, 3707,
99
370, 0, 0, 0, 0, 0, 0, 0, 1404, 1451, 0, 2882, 2569, 2081, 0, 162,
100
2918, 45, 0, 1175, 399, 0, 909, 1953, 0, 0, 528, 0, 0, 1133, 0, 0,
101
0, 3194, 3323, 3206, 2011, 0, 3918, 0, 0, 1787, 0, 0, 873, 0, 0, 3693,
102
0, 1983, 1079, 0, 0, 1862, 0, 0, 1621, 0, 2582, 0, 349, 0, 0, 3230,
103
1718, 0, 2553, 0, 507, 1543, 3773, 0, 0, 2090, 919, 0, 1466, 0, 0, 1953,
104
0, 0, 0, 1709, 0, 0, 0, 1155, 1946, 0, 172, 0, 1670, 0, 0, 3933,
105
3274, 180, 510, 3384, 0, 1191, 0, 0, 0, 1140, 3400, 1716, 0, 3703, 0, 0,
106
0, 0, 229, 0, 142, 0, 3459, 0, 0, 0, 0, 1036, 0, 1537, 0, 0,
107
0, 852, 34, 0, 0, 3691, 3536, 2301, 625, 1300, 0, 506, 660, 2455, 0, 4018,
108
1901, 1275, 0, 999, 1668, 1222, 0, 1220, 1905, 640, 669, 0, 0, 1157, 0, 2267,
109
0, 3032, 0, 3875, 0, 0, 757, 2063, 452, 0, 3812, 0, 1387, 0, 0, 316,
110
331, 257, 0, 0, 0, 0, 1647, 0, 0, 3829, 304, 3164, 409, 1777, 0, 0,
111
0, 0, 1472, 0, 0, 0, 0, 1024, 0, 2852, 0, 0, 0, 0, 0, 0,
112
1337, 524, 0, 1278, 953, 199, 1077, 3940, 0, 128, 2827, 3711, 0, 2401, 33, 0,
113
0, 2638, 1153, 1652, 2102, 1568, 580, 0, 3673, 2338, 0, 3514, 3335, 1898, 735, 0,
114
0, 0, 730, 0, 1417, 2484, 282, 0, 0, 0, 0, 0, 0, 1940, 0, 0,
115
1501, 1824, 0, 1689, 0, 0, 1, 659, 0, 713, 0, 3884, 0, 3954, 0, 0,
116
3805, 0, 0, 340, 0, 2925, 0, 3874, 3525, 168, 0, 0, 1259, 0, 0, 0,
117
772, 878, 695, 0, 1385, 1331, 0, 0, 0, 0, 0, 0, 2945, 1455, 886, 620,
118
1992, 0, 0, 0, 474, 0, 3408, 0, 0, 0, 0, 0, 2544, 81, 0, 0,
119
0, 2694, 0, 0, 0, 0, 0, 0, 23, 0, 0, 1487, 1305, 1609, 0, 0,
120
0, 2720, 670, 468, 0, 0, 2669, 775, 596, 2518, 240, 3417, 581, 1629, 2339, 1773,
121
3228, 0, 3507, 0, 230, 0, 352, 0, 1551, 0, 0, 683, 2302, 0, 364, 1638,
122
0, 2956, 244, 0, 496, 3113, 0, 0, 0, 0, 1951, 0, 623, 0, 4020, 1321,
123
0, 0, 0, 0, 1996, 958, 0, 1546, 1868, 0, 1190, 0, 3783, 0, 3032, 0,
124
1695, 0, 0, 0, 0, 0, 0, 2075, 0, 0, 0, 0, 2868, 2044, 0, 0,
125
2469, 0, 3864, 0, 2981, 0, 3018, 0, 3492, 0, 3670, 0, 2655, 0, 0, 122,
126
0, 0, 532, 0, 635, 1835, 3904, 0, 0, 0, 3026, 3431, 0, 0, 471, 1132,
127
1155, 1948, 1799, 1141, 2432, 0, 0, 0, 2077, 0, 1321, 0, 963, 0, 0, 1885,
128
0, 17, 0, 0, 1618, 376, 230, 3350, 492, 2179, 0, 1267, 1652, 2937, 721, 2035,
129
2882, 0, 0, 0, 1826, 1123, 0, 1099, 0, 150, 1088, 758, 0, 3285, 0, 0,
130
115, 0, 1895, 0, 1468, 0, 0, 0, 388, 0, 0, 0, 1627, 0, 3686, 3560,
131
214, 0, 0, 0, 0, 0, 3022, 784, 0, 0, 0, 2694, 0, 0, 3024, 0,
132
0, 0, 0, 0, 0, 1871, 330, 0, 0, 0, 123, 0, 333, 0, 2609, 0,
133
742, 0, 1375, 0, 143, 1186, 191, 0, 705, 0, 215, 1871, 0, 0, 1039, 2943,
134
345, 1685, 0, 0, 2887, 0, 0, 0, 364, 0, 833, 1317, 0, 468, 3159, 0,
135
3318, 0, 0, 1207, 3879, 1740, 0, 2986, 0, 246, 2514, 0, 0, 0, 0, 0,
136
0, 0, 991, 0, 1381, 0, 1622, 1590, 345, 0, 0, 728, 0, 0, 771, 0,
137
0, 0, 583, 244, 2133, 0, 0, 0, 1918, 0, 0, 1361, 1676, 1042, 0, 0,
138
0, 1924, 2454, 1357, 0, 482, 605, 0, 0, 0, 0, 666, 530, 0, 2388, 0,
139
680, 350, 22, 502, 1177, 3063, 0, 2804, 435, 0, 0, 0, 372, 0, 0, 1602,
140
302, 0, 3456, 0, 0, 1586, 947, 2828, 0, 3397, 101, 940, 0, 2546, 0, 320,
141
0, 2286, 1359, 0, 924, 754, 1792, 0, 0, 3472, 0, 666, 925, 2824, 274, 0,
142
262, 1304, 2526, 839, 1295, 0, 1830, 0, 1638, 88, 421, 0, 440, 413, 327, 0,
143
0, 898, 0, 2271, 1435, 0, 3651, 0, 2233, 714, 1329, 458, 544, 1603, 0, 0,
144
3180, 0, 0, 2276, 0, 280, 0, 0, 2982, 998, 0, 643, 1322, 2325, 2296, 0,
145
0, 0, 1860, 0, 0, 0, 0, 0, 0, 404, 0, 999, 1751, 1388, 0, 570,
146
1268, 0, 3843, 0, 0, 1019, 2163, 3488, 0, 0, 0, 0, 2365, 0, 46, 3092,
147
3446, 0, 373, 1059, 0, 1549, 2039, 0, 3466, 0, 1657, 0, 1178, 0, 888, 0,
148
1500, 442, 0, 0, 2087, 0, 0, 0, 2065, 1097, 0, 0, 2438, 0, 585, 387,
149
1631, 184, 0, 0, 293, 3954, 0, 1047, 1526, 0, 0, 0, 0, 2000, 0, 2775,
150
0, 1642, 235, 3671, 1727, 715, 3762, 2015, 0, 991, 0, 427, 0, 0, 0, 0,
151
0, 3002, 0, 844, 0, 0, 0, 217, 3686, 3249, 3741, 0, 1763, 0, 0, 0,
152
332, 2793, 2468, 3530, 826, 0, 0, 0, 0, 1873, 0, 0, 0, 3375, 909, 0,
153
1656, 854, 0, 0, 3326, 854, 71, 3695, 188, 1502, 0, 0, 827, 0, 0, 0,
154
0, 3489, 3969, 1537, 0, 0, 602, 0, 0, 751, 3016, 0, 0, 0, 0, 0,
155
7, 3902, 1764, 3674, 0, 3507, 3007, 0, 0, 2302, 3079, 1995, 947, 3503, 3352, 1242,
156
0, 1504, 1205, 0, 0, 3631, 0, 984, 1490, 0, 0, 1471, 3727, 1306, 1051, 3583,
157
74, 0, 82, 2206, 3322, 0, 0, 304, 1905, 0, 2365, 2984, 3200, 1636, 1137, 2851,
158
0, 795, 0, 685, 0, 3407, 647, 0, 1053, 0, 3202, 0, 1385, 734, 1996, 834,
159
2557, 574, 996, 1392, 0, 0, 1985, 324, 0, 2615, 0, 507, 817, 195, 0, 0,
160
0, 2626, 0, 1150, 0, 0, 743, 0, 775, 0, 615, 3188, 863, 0, 1451, 0,
161
3296, 0, 1133, 0, 579, 1174, 736, 2205, 1151, 1716, 0, 1965, 0, 0, 176, 1428,
162
774, 1146, 2880, 0, 0, 0, 839, 806, 0, 0, 0, 0, 456, 1578, 0, 0,
163
3023, 0, 0, 816, 2369, 1826, 0, 0, 3522, 0, 2551, 0, 1172, 59, 1000, 0,
164
783, 2193, 127, 481, 0, 0, 0, 0, 326, 792, 3825, 221, 0, 904, 3019, 408,
165
1600, 0, 2395, 0, 0, 0, 2701, 2301, 3013, 2166, 2673, 3171, 0, 0, 0, 0,
166
0, 1763, 0, 0, 0, 761, 912, 1845, 0, 0, 1362, 549, 0, 989, 3912, 0,
167
602, 730, 0, 1613, 0, 2662, 31, 86, 232, 0, 0, 0, 0, 1387, 0, 0,
168
874, 1908, 2056, 0, 897, 0, 0, 0, 1731, 2716, 971, 0, 1593, 498, 2647, 653,
169
0, 1440, 434, 0, 2713, 356, 3433, 0, 0, 0, 710, 3218, 3047, 1875, 1393, 1474,
170
0, 887, 2026, 1053, 2094, 0, 0, 0, 0, 0, 0, 0, 1873, 0, 1859, 928,
171
0, 0, 293, 1882, 0, 0, 1493, 2847, 0, 0, 2415, 0, 316, 2267, 837, 0,
172
561, 658, 3319, 2655, 1238, 2192, 123, 0, 1330, 1203, 0, 0, 3025, 1288, 2260, 770,
173
0, 3534, 767, 2854, 0, 1907, 1771, 0, 0, 3029, 1421, 0, 3463, 0, 0, 727,
174
1310, 3422, 1236, 745, 1397, 3497, 504, 1194, 3248, 861, 2535, 0, 1634, 0, 0, 1812,
175
2973, 0, 2372, 0, 0, 0, 0, 0, 3940, 1210, 0, 0, 0, 1512, 0, 0,
176
1607, 899, 0, 3590, 0, 0, 0, 0, 0, 102, 0, 0, 1702, 3513, 1211, 1746,
177
222, 2894, 631, 0, 0, 3317, 0, 0, 1525, 2109, 3766, 1233, 0, 233, 1538, 1661,
178
898, 2825, 0, 0, 941, 0, 0, 0, 516, 0, 611, 0, 0, 859, 0, 1001,
179
2597, 0, 0, 0, 0, 1688, 0, 0, 0, 0, 1076, 0, 3326, 894, 74, 444,
180
3779, 1995, 3249, 113, 3998, 0, 0, 604, 0, 0, 1077, 1516, 1750, 1302, 0, 3676,
181
0, 0, 0, 0, 1097, 0, 1098, 2570, 1489, 0, 2960, 0, 3767, 323, 0, 1580,
182
1382, 0, 0, 2195, 0, 0, 2225, 1268, 1815, 0, 192, 0, 0, 0, 2183, 290,
183
359, 0, 2946, 0, 1584, 288, 2338, 0, 1893, 1619, 0, 1516, 415, 0, 0, 0,
184
0, 3375, 836, 1220, 0, 0, 3968, 0, 0, 0, 1112, 1984, 467, 2890, 0, 0,
185
2006, 3484, 0, 2187, 1682, 371, 2264, 3088, 924, 985, 0, 0, 0, 1035, 147, 3525,
186
250, 2598, 128, 1110, 2120, 0, 3091, 0, 0, 0, 0, 0, 400, 574, 0, 477,
187
0, 0, 3820, 0, 3832, 2194, 475, 2732, 0, 0, 941, 0, 0, 1975, 0, 0,
188
0, 2021, 0, 0, 1951, 1427, 870, 1516, 588, 2952, 3441, 0, 496, 0, 782, 0,
189
692, 3, 866, 1136, 313, 672, 0, 1262, 3262, 2669, 0, 716, 994, 0, 1449, 1588,
190
0, 0, 0, 0, 171, 1094, 0, 633, 3489, 595, 2117, 0, 1797, 1676, 808, 0,
191
0, 0, 0, 1260, 0, 0, 1533, 0, 3734, 3356, 344, 748, 0, 3317, 1804, 0,
192
1374, 0, 1523, 3383, 1050, 429, 2565, 1047, 2193, 0, 1380, 2517, 3143, 514, 0, 0,
193
3999, 2604, 0, 3399, 2080, 0, 0, 1567, 0, 1691, 763, 0, 2130, 2674, 0, 1229,
194
0, 0, 0, 1333, 0, 1847, 0, 0, 1111, 0, 0, 141, 3630, 0, 0, 1838,
195
1839, 0, 2905, 2380, 0, 874, 0, 2307, 0, 0, 906, 0, 1080, 0, 119, 1876,
196
3868, 0, 0, 0, 1000, 499, 0, 0, 55, 781, 3828, 0, 0, 2079, 1177, 2365,
197
0, 0, 239, 2310, 72, 644, 884, 2436, 8, 1466, 1377, 135, 1383, 0, 737, 0,
198
0, 0, 3843, 3767, 0, 703, 1737, 1676, 732, 2077, 0, 0, 1420, 910, 1148, 295,
199
3553, 884, 0, 1496, 1919, 1201, 0, 0, 385, 1385, 857, 2422, 805, 0, 3311, 419,
200
3122, 1191, 0, 1632, 1964, 1231, 0, 0, 1427, 0, 0, 1196, 1829, 1486, 211, 0,
201
1434, 0, 0, 0, 1024, 0, 0, 0, 0, 2012, 0, 2838, 1788, 2981, 0, 2644,
202
0, 554, 3956, 592, 165, 2866, 0, 0, 161, 0, 0, 4020, 1663, 0, 0, 0,
203
0, 222, 0, 2281, 901, 0, 3955, 1208, 1130, 197, 1913, 0, 24, 3783, 0, 0,
204
1069, 0, 974, 0, 2754, 0, 1182, 0, 661, 3477, 2007, 0, 2882, 0, 643, 3412,
205
0, 3698, 0, 782, 3085, 30, 0, 0, 2020, 925, 0, 460, 521, 472, 0, 276,
206
892, 0, 0, 1112, 477, 0, 1241, 0, 834, 3832, 0, 0, 1170, 0, 0, 964,
207
4013, 2536, 0, 793, 43, 3455, 869, 0, 2271, 2775, 2780, 0, 1570, 0, 1793, 1562,
208
3715, 0, 3316, 488, 3666, 3126, 773, 913, 2188, 1999, 0, 207, 3621, 2074, 1338, 3773,
209
2038, 1047, 538, 0, 0, 3302, 3342, 1244, 0, 0, 0, 0, 292, 0, 3159, 0,
210
1359, 942, 0, 0, 0, 1343, 0, 0, 1814, 1015, 0, 1271, 1971, 0, 0, 3671,
211
0, 0, 0, 0, 0, 0, 1059, 0, 0, 3156, 2039, 0, 1187, 0, 0, 3534,
212
1123, 3522, 1498, 2434, 2894, 1810, 1523, 711, 467, 0, 0, 0, 3191, 1639, 2043, 1604,
213
760, 2138, 0, 1852, 0, 0, 2676, 3705, 2571, 0, 3545, 1671, 1802, 0, 0, 704,
214
0, 0, 0, 692, 61, 0, 310, 3856, 2564, 565, 0, 0, 504, 1251, 2170, 3452,
215
3396, 3101, 566, 213, 2406, 3646, 3744, 1817, 0, 1087, 0, 3900, 2071, 0, 337, 679,
216
1624, 923, 0, 0, 0, 3192, 1419, 0, 2963, 0, 0, 342, 3253, 0, 1694, 1556,
217
1296, 0, 0, 0, 2498, 1160, 824, 1610, 0, 0, 0, 275, 0, 3964, 3032, 2090,
218
1319, 2833, 556, 1313, 0, 2045, 3841, 0, 2825, 1572, 1903, 465, 0, 0, 0, 2292,
219
0, 0, 706, 0, 1258, 0, 0, 0, 1666, 113, 361, 1062, 0, 0, 0, 2078,
220
350, 683, 120, 0, 0, 0, 0, 1571, 0, 0, 0, 1223, 0, 970, 3641, 0,
221
0, 0, 0, 0, 651, 79, 3953, 0, 0, 0, 3176, 0, 1888, 3999, 1370, 0,
222
3115, 0, 1478, 1733, 0, 143, 2020, 0, 1784, 0, 3804, 0, 0, 0, 2497, 0,
223
0, 3758, 0, 1974, 0, 0, 0, 988, 827, 0, 1221, 1581, 0, 1697, 3718, 0,
224
0, 0, 0, 3462, 1777, 0, 0, 0, 3747, 459, 492, 0, 0, 0, 3515, 0,
225
2754, 3266, 3651, 0, 3440, 0, 194, 1151, 2823, 0, 1169, 1823, 2888, 0, 1396, 0,
226
3110, 3416, 783, 919, 135, 0, 0, 0, 173, 0, 0, 0, 1623, 235, 3170, 2701,
227
2767, 3232, 117, 3821, 0, 0, 3167, 0, 1627, 0, 0, 1899, 299, 0, 0, 0,
228
0, 3903, 1125, 0, 211, 2381, 3281, 3245, 1986, 0, 0, 0, 1434, 1480, 1937, 751,
229
1813, 3941, 3132, 3627, 239, 129, 545, 0, 2299, 3244, 932, 0, 1287, 1888, 3139, 1881,
230
3259, 0, 183, 207, 0, 578, 1498, 0, 0, 282, 2237, 959, 1558, 1824, 0, 0,
231
0, 0, 2725, 2136, 359, 0, 1228, 0, 1232, 0, 712, 3543, 3420, 0, 0, 0,
232
2148, 0, 0, 16, 0, 893, 3703, 0, 0, 0, 569, 2389, 914, 0, 3497, 2681,
233
86, 0, 0, 0, 0, 0, 2709, 201, 1108, 1488, 2033, 3653, 102, 0, 0, 0,
234
1230, 0, 509, 0, 0, 349, 414, 2385, 3932, 0, 844, 3971, 1346, 3504, 703, 1739,
235
1554, 0, 0, 0, 818, 1642, 9, 1090, 2711, 1503, 542, 0, 1292, 1392, 1240, 3638,
236
0, 0, 420, 518, 1358, 876, 0, 0, 1749, 4006, 1740, 3392, 1200, 0, 0, 0,
237
0, 1697, 1659, 0, 1265, 276, 0, 0, 0, 0, 898, 1961, 0, 0, 0, 166,
238
234, 1477, 1935, 2676, 0, 888, 3405, 2636, 1825, 1966, 1192, 161, 0, 445, 884, 0,
239
1278, 0, 2604, 560, 1464, 0, 0, 2565, 2087, 460, 1889, 0, 2310, 1354, 0, 2503,
240
0, 1812, 1949, 0, 0, 636, 176, 2903, 1081, 0, 0, 1156, 3930, 0, 1090, 422,
241
1746, 309, 0, 474, 0, 1801, 100, 0, 18, 0, 1043, 1942, 0, 0, 36, 1969,
242
1606, 1045, 1067, 869, 1391, 3768, 2285, 0, 252, 414, 0, 587, 3908, 0, 3402, 3341,
243
1056, 0, 0, 0, 605, 0, 1075, 52, 2122, 0, 3998, 1017, 3265, 0, 0, 1980,
244
0, 1351, 0, 940, 1715, 85, 1551, 0, 2884, 2849, 0, 1118, 0, 1515, 0, 0,
245
515, 1737, 0, 1187, 1594, 1304, 0, 1080, 3888, 0, 1065, 0, 0, 0, 1479, 0,
246
3477, 1690, 35, 0, 1709, 0, 3827, 566, 0, 1986, 2721, 0, 1556, 1443, 3970, 2814,
247
2155, 0, 1540, 0, 3570, 3224, 0, 0, 3756, 3105, 1359, 176, 1408, 1946, 1334, 1297,
248
2031, 2680, 3954, 515, 631, 2797, 726, 532, 2283, 0, 603, 0, 2053, 982, 1342, 0,
249
2261, 999, 0, 1086, 0, 671, 0, 0, 1710, 0, 0, 2137, 2965, 297, 453, 2376,
250
1441, 2694, 460, 1550, 3562, 3662, 3967, 740, 0, 44, 0, 0, 1158, 0, 1243, 0,
251
3190, 1590, 2649, 0, 384, 0, 0, 537, 1444, 2887, 2274, 624, 3931, 562, 1129, 0,
252
968, 806, 1073, 0, 0, 2426, 1526, 81, 662, 2025, 1565, 0, 0, 612, 220, 0,
253
756, 0, 979, 0, 1778, 1105, 0, 3591, 3838, 0, 0, 0, 1231, 2707, 3269, 0,
254
0, 0, 0, 0, 893, 0, 238, 3866, 1400, 669, 710, 0, 3593, 1800, 0, 0,
255
1596, 0, 590, 1483, 0, 335, 2667, 0, 1506, 0, 751, 1656, 12, 0, 1670, 3962,
256
3716, 0, 0, 199, 1026, 0, 484, 0, 0, 0, 0, 1318, 1307, 1818, 3331, 425,
257
935, 205, 0, 3609, 1985, 2055, 0, 1518, 1036, 991, 1264, 3230, 879, 2781, 1466, 178,
258
2969, 0, 918, 1430, 0, 0, 0, 0, 3951, 154, 156, 2405, 0, 696, 0, 0,
259
1433, 0, 770, 0, 945, 1858, 0, 0, 747, 1908, 0, 1339, 0, 1267, 0, 0,
260
0, 0, 0, 1070, 0, 1908, 2668, 0, 2320, 1081, 2337, 0, 0, 1303, 0, 2088,
261
690, 2035, 0, 225, 1173, 0, 13, 237, 1329, 0, 536, 1432, 86, 3591, 2933, 1949,
262
0, 722, 3951, 0, 0, 20, 655, 3734, 1995, 580, 0, 0, 0, 3598, 3963, 0,
263
3048, 2762, 0, 3436, 3001, 3780, 995, 0, 880, 3269, 1597, 869, 0, 3329, 986, 729,
264
0, 711, 0, 926, 3975, 1870, 0, 0, 1303, 312, 329, 1259, 0, 1233, 3990, 1356,
265
344, 0, 3701, 0, 3902, 0, 1364, 0, 0, 0, 2051, 385, 0, 0, 2232, 0,
266
0, 181, 1607, 3883, 1565, 0, 2111, 1506, 0, 0, 0, 0, 2022, 0, 3832, 0,
267
3596, 0, 1945, 1957, 1805, 1482, 3996, 3426, 266, 2114, 652, 0, 407, 1835, 1499, 2095,
268
1637, 1690, 2134, 0, 0, 0, 658, 1598, 2171, 0, 0, 0, 1628, 0, 365, 3169,
269
245, 977, 0, 0, 0, 1101, 3365, 1626, 2555, 2041, 2816, 0, 0, 898, 1309, 2692,
270
3795, 604, 594, 2840, 1930, 3968, 2128, 0, 943, 1972, 1114, 0, 119, 0, 2945, 3516,
271
2200, 3310, 0, 0, 453, 2788, 1064, 0, 0, 1700, 791, 1818, 0, 123, 0, 2124,
272
1031, 1645, 0, 1263, 0, 0, 1108, 0, 3436, 0, 274, 1394, 720, 0, 0, 0,
273
833, 0, 0, 0, 0, 0, 3425, 1818, 1515, 0, 0, 2894, 0, 2901, 0, 1999,
274
1699, 0, 2529, 1199, 2024, 0, 0, 272, 2583, 0, 2900, 3332, 2018, 820, 3395, 0,
275
0, 0, 2066, 0, 1136, 3784, 3739, 345, 0, 1241, 363, 0, 0, 3584, 519, 986,
276
0, 0, 1521, 0, 0, 3112, 0, 117, 0, 0, 2799, 155, 3937, 449, 3970, 79,
277
0, 3989, 0, 0, 2678, 2121, 3104, 0, 0, 842, 2820, 0, 1744, 3316, 0, 1531,
278
1304, 807, 0, 0, 266, 0, 3355, 0, 3301, 0, 362, 1335, 2051, 700, 0, 798,
279
2449, 2927, 0, 0, 1171, 0, 1406, 2140, 980, 1208, 260, 0, 0, 0, 3867, 774,
280
1993, 0, 0, 0, 298, 0, 1922, 275, 2473, 0, 112, 0, 1002, 2985, 3527, 1860,
281
0, 0, 3477, 0, 2168, 0, 4014, 2355, 2489, 1669, 899, 0, 3764, 2568, 3985, 0,
282
5, 1573, 0, 1654, 3474, 1507, 790, 1389, 0, 0, 301, 209, 687, 2057, 271, 1496,
283
302, 0, 287, 0, 1529, 1353, 0, 0, 0, 2452, 912, 2152, 240, 0, 0, 0,
284
0, 3258, 139, 1593, 2314, 0, 0, 1921, 3918, 141, 0, 1962, 1188, 0, 106, 0,
285
2686, 0, 3260, 3800, 1119, 0, 2097, 2623, 3684, 0, 393, 3188, 1029, 3345, 2540, 2796,
286
1458, 2377, 1349, 0, 0, 3698, 0, 1860, 521, 248, 548, 1599, 0, 1747, 902, 3,
287
0, 1883, 0, 2009, 713, 2002};
289
int MangledHashG(const char *key, const int *T)
293
for (int i = 0; key[i] != '\0'; i++)
295
sum += T[i] * key[i];
298
return mangledkG[sum];
301
int MangledPerfectHash(const char *key)
303
if (strlen(key) > 37)
306
return (MangledHashG(key, mangledkT1) + MangledHashG(key, mangledkT2)) % 4022;
309
constexpr int unmangledkT1[] = {144, 106, 306, 148, 131, 219, 212, 45, 287, 341, 277, 20, 111,
310
58, 208, 119, 14, 175, 302, 100, 209, 295, 267, 0, 229, 180};
311
constexpr int unmangledkT2[] = {121, 122, 34, 65, 319, 69, 163, 60, 246, 67, 291, 196, 119,
312
224, 117, 41, 360, 309, 210, 88, 98, 242, 241, 278, 10, 1};
313
constexpr int unmangledkG[] = {
314
0, 0, 0, 0, 169, 0, 213, 0, 0, 147, 0, 364, 0, 83, 271, 0, 0, 0, 0,
315
26, 0, 190, 0, 0, 0, 0, 0, 84, 6, 0, 0, 47, 0, 0, 171, 0, 36, 74,
316
236, 0, 82, 0, 0, 0, 65, 189, 121, 0, 0, 0, 3, 65, 244, 37, 317, 71, 327,
317
0, 133, 0, 73, 0, 337, 0, 0, 77, 0, 0, 98, 0, 0, 45, 0, 41, 0, 51,
318
339, 23, 0, 0, 240, 0, 0, 0, 0, 0, 186, 0, 0, 0, 103, 42, 184, 0, 0,
319
350, 0, 82, 25, 105, 61, 0, 0, 119, 0, 69, 177, 0, 360, 344, 0, 0, 0, 0,
320
157, 0, 41, 0, 0, 0, 0, 87, 313, 0, 14, 12, 0, 0, 0, 175, 286, 0, 0,
321
120, 0, 111, 0, 0, 0, 0, 291, 0, 188, 270, 307, 356, 0, 5, 54, 130, 20, 47,
322
123, 0, 149, 308, 120, 39, 165, 351, 131, 0, 52, 110, 95, 88, 172, 0, 98, 0, 169,
323
67, 0, 93, 321, 13, 1, 178, 0, 248, 51, 0, 63, 189, 157, 0, 134, 299, 0, 0,
324
0, 130, 19, 0, 141, 0, 0, 186, 287, 184, 0, 314, 0, 352, 63, 109, 49, 0, 276,
325
0, 0, 19, 285, 202, 128, 0, 54, 287, 19, 74, 0, 0, 86, 75, 29, 122, 27, 37,
326
1, 0, 0, 353, 98, 0, 94, 136, 207, 30, 30, 107, 175, 0, 0, 0, 22, 0, 24,
327
2, 20, 300, 0, 0, 265, 0, 0, 0, 169, 95, 93, 15, 94, 241, 94, 6, 0, 0,
328
0, 332, 283, 0, 131, 299, 2, 0, 127, 0, 0, 296, 183, 0, 0, 276, 0, 150, 163,
329
133, 112, 0, 332, 245, 192, 0, 0, 15, 56, 0, 0, 37, 125, 0, 0, 0, 15, 142,
330
0, 0, 0, 0, 50, 0, 0, 348, 0, 111, 0, 37, 52, 67, 260, 90, 98, 176, 31,
331
0, 175, 24, 0, 158, 0, 0, 75, 108, 128, 60, 0, 107, 106, 0, 0, 59, 317, 0,
332
17, 132, 0, 203, 0, 0, 0, 91, 50, 15, 62, 0, 129, 0, 0, 168, 267, 0, 261,
335
int UnmangledHashG(const char *key, const int *T)
339
for (int i = 0; key[i] != '\0'; i++)
341
sum += T[i] * key[i];
344
return unmangledkG[sum];
347
int UnmangledPerfectHash(const char *key)
349
if (strlen(key) > 26)
352
return (UnmangledHashG(key, unmangledkT1) + UnmangledHashG(key, unmangledkT2)) % 365;
361
const size_t ImmutableString::FowlerNollVoHash<4>::kFnvPrime = 16777619u;
364
const size_t ImmutableString::FowlerNollVoHash<4>::kFnvOffsetBasis = 0x811c9dc5u;
367
const size_t ImmutableString::FowlerNollVoHash<8>::kFnvPrime =
368
static_cast<size_t>(1099511628211ull);
371
const size_t ImmutableString::FowlerNollVoHash<8>::kFnvOffsetBasis =
372
static_cast<size_t>(0xcbf29ce484222325ull);
374
uint32_t ImmutableString::mangledNameHash() const
376
return MangledPerfectHash(data());
379
uint32_t ImmutableString::unmangledNameHash() const
381
return UnmangledPerfectHash(data());