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.
4 //
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.
8 //
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
12
13 #include "compiler/translator/ImmutableString.h"
14
15 namespace sh
16 {
17
operator <<(std::ostream & os,const ImmutableString & str)18 std::ostream &operator<<(std::ostream &os, const ImmutableString &str)
19 {
20 return os.write(str.data(), str.length());
21 }
22
23 } // namespace sh
24
25 #if defined(_MSC_VER)
26 # pragma warning(disable : 4309) // truncation of constant value
27 #endif
28
29 namespace
30 {
31
32 constexpr int mangledkT1[] = {444, 1347, 2411, 431, 2282, 804, 2338, 20, 74, 74,
33 1270, 1644, 2471, 1830, 1952, 2471, 2461, 1205, 437, 1399,
34 1428, 2558, 907, 1860, 1910, 384, 340, 213, 1028, 1474,
35 233, 1572, 1397, 2214, 2065, 1240, 1307, 307, 81, 1838};
36 constexpr int mangledkT2[] = {1894, 451, 2116, 81, 2046, 968, 1123, 2108, 1234, 1081,
37 822, 1256, 1355, 61, 2360, 373, 629, 1576, 1869, 1074,
38 1140, 749, 2257, 1061, 1948, 706, 2264, 1475, 1361, 712,
39 1166, 1950, 181, 1106, 2540, 2567, 1310, 1429, 2549, 711};
40 constexpr int mangledkG[] = {
41 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
42 528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 939, 0, 0, 0, 0,
43 772, 645, 0, 0, 0, 2137, 0, 0, 0, 0, 0, 0, 0, 0, 572, 0,
44 0, 0, 447, 0, 0, 745, 0, 0, 91, 0, 1647, 1694, 0, 0, 0, 0,
45 0, 0, 0, 2176, 0, 0, 0, 0, 0, 0, 0, 0, 1956, 0, 0, 0,
46 0, 0, 0, 502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1618,
47 2196, 0, 0, 0, 0, 374, 0, 0, 1600, 0, 0, 0, 0, 0, 0, 0,
48 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 741, 0, 0,
49 0, 0, 0, 1550, 432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1153, 0,
50 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1986, 0, 0, 0, 0,
51 944, 791, 2274, 0, 0, 0, 0, 0, 381, 1870, 0, 0, 0, 0, 1593, 0,
52 0, 566, 0, 1897, 541, 0, 856, 0, 0, 749, 1547, 0, 0, 0, 1939, 0,
53 1655, 0, 0, 0, 474, 0, 0, 0, 839, 0, 617, 0, 1777, 1787, 0, 0,
54 0, 0, 2522, 0, 2491, 0, 0, 2307, 613, 0, 0, 0, 777, 429, 0, 1153,
55 1911, 0, 0, 0, 2274, 0, 0, 722, 0, 172, 0, 0, 0, 1746, 0, 0,
56 0, 0, 657, 0, 0, 2435, 0, 2475, 955, 1120, 1041, 0, 894, 0, 0, 773,
57 1029, 492, 0, 0, 2108, 0, 0, 2571, 0, 0, 0, 2541, 0, 0, 0, 0,
58 0, 0, 0, 1643, 0, 0, 0, 0, 0, 0, 229, 0, 0, 907, 2533, 0,
59 2086, 508, 0, 1163, 2459, 0, 0, 0, 1145, 0, 0, 1585, 0, 0, 0, 268,
60 0, 0, 0, 0, 2045, 0, 809, 0, 0, 0, 0, 2595, 1392, 0, 1862, 747,
61 1029, 0, 2639, 0, 2275, 0, 0, 0, 1407, 0, 0, 0, 0, 163, 430, 322,
62 0, 0, 856, 0, 673, 0, 0, 0, 0, 0, 329, 0, 0, 2608, 2009, 0,
63 0, 2004, 1205, 1228, 1864, 0, 2273, 1528, 2624, 0, 0, 700, 0, 0, 2352, 0,
64 840, 1659, 0, 0, 0, 1397, 2567, 0, 0, 1903, 0, 1347, 568, 0, 0, 147,
65 281, 0, 0, 0, 1498, 856, 685, 1122, 984, 0, 0, 1712, 0, 1478, 0, 0,
66 0, 2570, 337, 771, 0, 0, 1175, 0, 2396, 1453, 0, 0, 1097, 0, 0, 0,
67 0, 0, 2659, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1003, 0, 0,
68 2445, 0, 0, 857, 0, 1513, 0, 0, 0, 472, 0, 1454, 0, 2648, 0, 0,
69 729, 0, 0, 312, 808, 0, 0, 80, 0, 0, 0, 0, 361, 0, 0, 1994,
70 0, 293, 222, 0, 0, 2104, 1027, 438, 0, 0, 0, 443, 471, 0, 1022, 0,
71 0, 626, 1727, 1279, 0, 0, 511, 0, 2208, 927, 0, 0, 0, 1770, 145, 569,
72 728, 0, 2159, 2179, 714, 0, 2368, 0, 1138, 1587, 585, 0, 1149, 0, 0, 1013,
73 1136, 0, 0, 0, 0, 6, 197, 0, 0, 0, 75, 2461, 843, 0, 0, 328,
74 0, 1853, 1945, 2379, 268, 1413, 464, 933, 0, 1077, 0, 0, 620, 0, 0, 0,
75 0, 2221, 0, 0, 1420, 2267, 1251, 2208, 0, 768, 0, 498, 0, 0, 0, 0,
76 788, 0, 0, 1281, 1760, 0, 0, 464, 0, 0, 2615, 0, 753, 0, 1933, 0,
77 0, 0, 0, 0, 0, 1395, 1088, 355, 0, 139, 2456, 0, 0, 910, 1000, 0,
78 1155, 203, 172, 2636, 1375, 1649, 1563, 0, 177, 0, 765, 1206, 0, 2086, 1389, 1924,
79 2206, 0, 0, 0, 719, 194, 0, 198, 0, 916, 0, 0, 2008, 967, 255, 0,
80 1556, 0, 0, 0, 0, 279, 0, 1517, 0, 0, 2177, 2172, 0, 410, 1182, 0,
81 0, 2452, 2613, 0, 2032, 0, 0, 30, 2075, 682, 647, 1280, 676, 2331, 0, 0,
82 0, 0, 0, 630, 0, 355, 1202, 0, 689, 0, 218, 0, 0, 960, 1140, 675,
83 878, 305, 0, 278, 2451, 1708, 723, 0, 0, 245, 1258, 0, 570, 1915, 2151, 0,
84 2152, 1390, 0, 0, 0, 88, 0, 0, 1827, 331, 0, 477, 0, 2004, 0, 1421,
85 2421, 1652, 2605, 0, 0, 0, 1792, 0, 0, 1179, 1593, 0, 0, 0, 277, 1056,
86 0, 2121, 0, 2488, 0, 957, 0, 1664, 481, 2235, 0, 210, 2586, 240, 0, 0,
87 902, 0, 0, 0, 0, 817, 655, 1125, 838, 1889, 0, 0, 125, 2341, 1972, 0,
88 23, 0, 0, 0, 2318, 2190, 0, 0, 0, 1163, 381, 0, 2157, 2024, 0, 0,
89 772, 729, 999, 0, 0, 406, 472, 0, 0, 0, 1946, 0, 0, 2137, 0, 94,
90 72, 0, 0, 2490, 1041, 810, 470, 0, 1798, 2563, 0, 1099, 0, 0, 868, 0,
91 2295, 0, 0, 1702, 0, 0, 1224, 1830, 0, 0, 0, 0, 0, 0, 0, 2524,
92 0, 0, 0, 0, 0, 291, 0, 1366, 0, 836, 0, 2458, 0, 187, 0, 882,
93 0, 0, 0, 0, 1194, 0, 935, 149, 1237, 0, 292, 0, 797, 0, 0, 1359,
94 935, 1163, 0, 492, 0, 633, 1490, 201, 0, 0, 0, 1507, 0, 0, 307, 0,
95 0, 1482, 0, 0, 0, 1427, 987, 2563, 2217, 934, 0, 1031, 1482, 0, 0, 2092,
96 471, 689, 0, 0, 1890, 0, 2153, 0, 0, 0, 1414, 0, 0, 0, 0, 0,
97 0, 257, 0, 1075, 2362, 647, 1189, 0, 0, 246, 292, 0, 0, 0, 512, 0,
98 111, 0, 2264, 755, 819, 0, 44, 0, 992, 0, 1540, 0, 1763, 0, 0, 0,
99 342, 0, 0, 0, 769, 0, 220, 2624, 0, 1271, 620, 1286, 0, 0, 0, 0,
100 153, 1188, 671, 1183, 0, 1727, 1951, 0, 0, 0, 0, 762, 512, 339, 1091, 669,
101 0, 0, 0, 463, 2624, 0, 2210, 1450, 133, 1208, 871, 0, 0, 0, 2421, 390,
102 0, 774, 355, 2345, 0, 2659, 0, 0, 2251, 0, 0, 1359, 2648, 0, 2629, 0,
103 0, 0, 0, 251, 0, 764, 0, 0, 48, 0, 0, 1366, 0, 491, 0, 509,
104 321, 816, 1862, 405, 0, 751, 1208, 817, 38, 1195, 713, 944, 1291, 1250, 0, 1328,
105 1954, 0, 1571, 0, 0, 0, 0, 0, 0, 681, 0, 0, 470, 615, 0, 618,
106 327, 0, 0, 158, 0, 0, 401, 0, 2101, 474, 1007, 2151, 0, 0, 0, 0,
107 0, 1048, 0, 654, 1859, 789, 0, 0, 1093, 0, 2330, 2414, 0, 0, 0, 1028,
108 0, 0, 0, 2466, 0, 762, 782, 1718, 1790, 1917, 0, 0, 1254, 0, 107, 0,
109 1233, 1777, 0, 0, 78, 393, 0, 2175, 2635, 1405, 0, 29, 1098, 840, 491, 2604,
110 0, 1948, 327, 820, 371, 2377, 0, 0, 0, 2089, 730, 757, 0, 1203, 0, 1872,
111 0, 0, 0, 30, 2356, 1510, 0, 0, 573, 258, 649, 0, 0, 0, 0, 913,
112 874, 1286, 0, 2568, 906, 1223, 208, 0, 383, 0, 0, 2335, 1395, 0, 0, 136,
113 1039, 1210, 0, 0, 875, 1844, 2569, 0, 0, 0, 807, 1481, 0, 0, 0, 2619,
114 0, 0, 2222, 0, 0, 0, 0, 764, 1007, 0, 0, 1719, 0, 802, 0, 0,
115 0, 275, 0, 0, 553, 1587, 1406, 234, 1451, 0, 935, 1564, 509, 0, 638, 0,
116 0, 209, 2179, 0, 3, 594, 275, 0, 2398, 835, 0, 0, 0, 0, 2034, 2003,
117 0, 0, 0, 1648, 0, 856, 688, 0, 2044, 548, 0, 1730, 2101, 1018, 0, 0,
118 0, 2205, 1313, 0, 2217, 341, 0, 0, 844, 0, 0, 0, 0, 1692, 0, 2492,
119 0, 404, 2487, 1888, 0, 2256, 116, 0, 2264, 0, 1089, 0, 128, 1580, 0, 2215,
120 0, 0, 1215, 0, 909, 276, 0, 0, 0, 1006, 0, 0, 2097, 2048, 2513, 878,
121 0, 1398, 1111, 0, 168, 0, 578, 0, 1973, 1528, 0, 1780, 0, 0, 1337, 0,
122 2076, 0, 0, 932, 437, 191, 0, 0, 356, 0, 976, 100, 0, 1157, 1030, 978,
123 0, 0, 552, 568, 0, 0, 2031, 0, 2578, 0, 0, 1276, 1210, 1151, 39, 1577,
124 0, 664, 825, 1294, 0, 0, 1290, 814, 0, 0, 0, 169, 0, 1979, 2632, 2096,
125 632, 1890, 0, 415, 150, 0, 0, 2039, 0, 1365, 0, 0, 0, 2146, 0, 0,
126 921, 0, 574, 451, 0, 0, 0, 0, 1075, 1304, 123, 0, 2140, 0, 0, 749,
127 317, 0, 2179, 930, 0, 1102, 0, 545, 0, 523, 2564, 0, 0, 0, 11, 2371,
128 2253, 182, 0, 638, 0, 104, 0, 711, 0, 0, 0, 1152, 2555, 0, 0, 0,
129 0, 1922, 103, 1486, 0, 363, 1558, 2030, 2456, 52, 0, 2073, 1011, 770, 1007, 903,
130 366, 2361, 2349, 0, 0, 898, 571, 881, 0, 0, 0, 0, 0, 626, 0, 796,
131 1628, 594, 0, 0, 389, 0, 1302, 0, 0, 132, 0, 1271, 2093, 0, 2426, 0,
132 424, 2462, 264, 0, 0, 957, 2311, 1706, 0, 1275, 0, 1740, 1148, 2211, 0, 198,
133 0, 496, 0, 1994, 889, 0, 909, 970, 0, 2326, 0, 1596, 1161, 0, 1040, 103,
134 0, 0, 0, 1086, 1527, 0, 125, 815, 964, 459, 428, 230, 2664, 688, 584, 577,
135 0, 2618, 0, 2467, 692, 524, 1101, 89, 615, 0, 0, 1211, 2129, 2039, 74, 0,
136 1225, 2639, 2283, 765, 1355, 0, 0, 2339, 0, 9, 1733, 0, 0, 0, 1196, 0,
137 84, 49, 0, 0, 321, 2297, 1255, 0, 0, 842, 2656, 0, 0, 0, 1263, 0,
138 579, 89, 0, 712, 2274, 0, 1508, 525, 0, 1337, 0, 703, 1244, 651, 365, 282,
139 0, 856, 0, 0, 0, 1227, 1538, 2631, 0, 1056, 1515, 1400, 0, 0, 795, 0,
140 0, 230, 2234, 0, 73, 1658, 0, 1353, 178, 2193, 0, 459, 1418, 2162, 718, 0,
141 575, 1097, 0, 0, 1266, 778, 1149, 0, 0, 1467, 2473, 0, 0, 2597, 0, 294,
142 630, 346, 0, 0, 0, 0, 65, 2251, 2266, 0, 522, 1152, 971, 2051, 0, 0,
143 542, 1074, 1104, 2567, 582, 0, 1262, 0, 2318, 2605, 1322, 0, 1307, 0, 2094, 2152,
144 283, 1308, 1891, 0, 776, 0, 246, 348, 1174, 0, 2415, 0, 2063, 716, 727, 0,
145 0, 0, 0, 0, 1669, 1407, 1271, 0, 2373, 264, 840, 0, 2536, 9, 901, 581,
146 763, 0, 906, 0, 1800, 1394, 0, 1478, 0, 1899, 0, 0, 0, 2217, 1340, 267,
147 816, 0, 0, 0, 0, 0, 0, 0, 0, 2645, 1978, 0, 726, 759, 0, 2617,
148 15, 1366, 966, 0, 2, 0, 0, 2515, 0, 1236, 0, 0, 2233, 0, 0, 1144,
149 0, 0, 0, 1321, 1102, 1204, 0, 1368, 1302, 2505, 1282, 2210, 366, 798, 1598, 1207,
150 2495, 1396, 0, 999, 0, 734, 632, 810, 0, 2191, 1361, 1340, 778, 0, 105, 850,
151 1936, 0, 1950, 0, 0, 0, 869, 1314, 582, 0, 0, 818, 382, 1225, 0, 82,
152 951, 1773, 2248, 1292, 181, 2517, 0, 0, 0, 0, 0, 0, 32, 0, 2154, 0,
153 318, 563, 0, 0, 658, 0, 266, 1817, 0, 1848, 0, 1446, 0, 69, 0, 426,
154 419, 19, 0, 368, 731, 381, 754, 0, 87, 370, 340, 0, 851, 2275, 1500, 192,
155 1448, 1253, 0, 0, 0, 0, 0, 169, 0, 1387, 0, 2184, 0, 0, 2083, 2586,
156 1399, 1141, 0, 2484, 0, 0, 383, 1055, 0, 0, 0, 464, 0, 430, 1192, 0,
157 1673, 0, 0, 0, 781, 0, 577, 272, 350, 716, 0, 0, 1378, 589, 1207, 115,
158 1293, 0, 0, 264, 2058, 0, 0, 0, 0, 1103, 2539, 1006, 0, 0, 944, 436,
159 0, 0, 1702, 702, 968, 32, 702, 674, 1602, 0, 0, 0, 0, 345, 516, 88,
160 784, 2656, 0, 0, 514, 2138, 2499, 0, 0, 0, 0, 0, 659, 0, 744, 2661,
161 0, 2000, 1574, 1095, 588, 198, 2082, 249, 1734, 1262, 2523, 1505, 913, 329, 727, 2352,
162 742, 1043, 0, 0, 1306, 0, 1172, 0, 643, 2415, 121, 0, 358, 0, 0, 2534,
163 0, 0, 0, 798, 0, 0, 687, 0, 247, 175, 771, 0, 1806, 116, 129, 325,
164 919, 314, 0, 0, 2516, 0, 2439, 1916, 0, 1281, 0, 2644, 860, 0, 0, 0,
165 278, 0, 0, 271, 284, 0, 1980, 0, 0, 0, 189, 44, 194, 1358, 0, 1953,
166 0, 1199, 2329, 0, 0, 1326, 0, 929, 0, 0, 915, 0, 0, 303, 64, 998,
167 0, 0, 0, 2128, 2119, 0, 0, 2625, 819, 1149, 1522, 0, 399, 0, 1130, 733,
168 0, 1695, 546, 1252, 362, 1315, 0, 1764, 1751, 28, 0, 98, 0, 261, 478, 0,
169 1240, 550, 0, 0, 2317, 2634, 706, 0, 270, 0, 0, 0, 21, 2234, 665, 665,
170 1347, 2306, 1621, 1398, 0, 2326, 954, 143, 2637, 623, 2153, 1040, 2424, 0, 1416, 0,
171 1, 383, 1998, 23, 1017, 130, 2440, 413, 0, 459, 792, 693, 717, 1681, 883, 0,
172 793, 0, 0, 148, 1249, 0, 0, 1465, 0, 0, 807, 0, 1174, 418, 536, 700,
173 135, 1176, 782, 1297, 0, 2562, 0, 0, 977, 0, 122, 2254, 1031, 126, 0, 0,
174 14, 2169, 0, 2650, 0, 1003, 956, 0, 1539, 0, 892, 2395, 1540, 0, 1588, 765,
175 1519, 131, 1950, 0, 0, 0, 0, 0, 1127, 15, 1142, 1356, 0, 214, 575, 0,
176 0, 0, 1101, 0, 507, 0, 0, 453, 196, 0, 0, 0, 2225, 966, 0, 817,
177 1124, 283, 0, 0, 1111, 1340, 0, 0, 923, 0, 732, 0, 953, 252, 0, 737,
178 0, 0, 0, 2415, 381, 0, 0, 0, 0, 1859, 1350, 0, 1117, 1895, 0, 0,
179 0, 0, 0, 2427, 71, 483, 631, 499, 1113, 0, 1259, 2083, 2244, 0, 1047, 1505,
180 581, 0, 0, 836, 1850, 521, 779, 0, 1150, 533, 417, 112, 66, 0, 0, 527,
181 320, 1391, 0, 361, 0, 94, 0, 689, 779, 0, 1674, 0, 186, 508, 897, 1164,
182 0, 1470, 2572, 2076, 786, 2488, 1506, 1836, 0, 127, 1033, 0, 1186, 0, 1270, 0,
183 1574, 951, 0, 1143, 513, 925, 1444, 0, 0, 779, 510, 2276, 239, 1223, 0, 326,
184 1674, 1429, 0, 583, 527, 1387, 0, 1765, 242, 1117, 928, 2359, 1345, 229, 0, 133,
185 1605, 2068, 0, 1927, 0, 0, 621, 1405, 769, 2065, 0, 0, 0, 0, 0, 0,
186 0, 2447, 0, 0, 0, 0, 1403, 0, 641, 1029, 1032, 0, 957, 1820, 532, 0,
187 0, 1317, 1531, 0, 0, 0, 1230, 0, 0, 195, 2544, 170, 0, 12, 1270, 0,
188 75, 333, 944, 0, 834, 0, 149, 0, 0, 0, 0, 0, 0, 1337, 697, 0,
189 0, 2307, 1426, 1926, 0, 1635, 0, 1246, 0, 2543, 0, 147, 1011, 494, 0, 1239,
190 824, 2147, 0, 1290, 33, 153, 2434, 472, 1637, 1343, 807, 295, 211, 0, 547, 316,
191 0, 1059, 0, 1166, 2434, 908, 698, 2164, 65, 150, 0, 666, 0, 0, 0, 0,
192 588, 1253, 0, 0, 2147, 512, 0, 0, 2354, 1792, 506, 1014, 1918, 0, 627, 0,
193 0, 0, 279, 0, 0, 0, 0, 0, 0, 156, 402, 736, 2282, 0, 0, 2598,
194 0, 1264, 1338, 1241, 2624, 0, 0, 0, 1890, 216, 66, 188, 0, 0, 1780, 0,
195 0, 0, 124, 312, 0, 1256, 681, 1702, 2608, 5, 0, 1089, 1293, 2129, 608, 0,
196 594, 538, 810, 0, 0, 2099, 0, 579, 705, 0, 93, 488, 1380, 554, 2202, 1044,
197 0, 0, 0, 0, 0, 66, 1205, 2148, 1002, 1012, 0, 939, 376, 1295, 711, 2460,
198 0, 2097, 1386, 0, 1247, 1118, 370, 0, 2086, 350, 0, 0, 1329, 1760, 2133, 2185,
199 598, 0, 0, 2321, 0, 313, 1356, 10, 1076, 314, 950, 0, 523, 1075, 72, 2080,
200 0, 1543, 0, 444, 2641, 375, 684, 0, 2466, 377, 119, 0, 0, 1563, 0, 1060,
201 258, 508, 1033, 0, 1232, 0, 1756, 997, 2505, 643, 981, 401, 0, 637, 956, 1154,
202 391, 1778, 1321, 0, 1734, 112, 0, 488, 2459, 1480, 418, 0, 1904, 0, 1622, 947,
203 66, 403, 0, 1401, 0, 73, 0, 1023, 2539, 13, 183, 0, 2015, 152, 0, 0,
204 0, 47, 0, 0, 2227, 2395, 2545, 2589, 1119, 0, 0, 0, 1215, 563, 0, 1178,
205 1090, 848, 424, 1073, 2447, 956, 0, 0, 1242, 1647, 0, 587, 0, 1294, 0, 1732,
206 442, 1199, 839, 1265, 0, 587, 0, 0, 543, 846, 1562, 2575, 574, 1898, 0, 2471,
207 1940, 2616, 207, 157, 0, 1319, 163, 0, 0, 2672, 51, 0, 223, 0, 42, 143,
208 318, 0};
209
MangledHashG(const char * key,const int * T)210 int MangledHashG(const char *key, const int *T)
211 {
212 int sum = 0;
213
214 for (int i = 0; key[i] != '\0'; i++)
215 {
216 sum += T[i] * key[i];
217 sum %= 2674;
218 }
219 return mangledkG[sum];
220 }
221
MangledPerfectHash(const char * key)222 int MangledPerfectHash(const char *key)
223 {
224 if (strlen(key) > 40)
225 return 0;
226
227 return (MangledHashG(key, mangledkT1) + MangledHashG(key, mangledkT2)) % 2674;
228 }
229
230 constexpr int unmangledkT1[] = {5, 243, 269, 18, 166, 172, 166, 94, 139, 124, 44,
231 223, 131, 43, 66, 43, 67, 39, 105, 117, 114, 237,
232 234, 191, 127, 71, 30, 206, 111, 221, 232, 64};
233 constexpr int unmangledkT2[] = {247, 144, 271, 36, 31, 34, 151, 48, 97, 17, 155,
234 261, 16, 9, 119, 217, 179, 242, 46, 267, 260, 80,
235 57, 156, 248, 258, 197, 20, 1, 257, 126, 273};
236 constexpr int unmangledkG[] = {
237 0, 0, 0, 0, 78, 266, 191, 101, 0, 0, 56, 0, 143, 0, 0, 152, 232, 0, 0,
238 108, 0, 0, 239, 0, 199, 0, 60, 40, 48, 72, 24, 147, 0, 69, 96, 0, 0, 0,
239 0, 0, 0, 214, 221, 0, 120, 236, 0, 121, 0, 196, 268, 2, 248, 0, 266, 0, 132,
240 0, 0, 0, 0, 0, 264, 54, 272, 232, 0, 0, 0, 109, 94, 0, 98, 0, 0, 72,
241 0, 252, 19, 149, 0, 194, 0, 118, 0, 208, 9, 101, 0, 76, 0, 11, 0, 44, 0,
242 0, 187, 0, 106, 0, 0, 0, 280, 116, 51, 0, 6, 208, 133, 38, 283, 0, 125, 65,
243 121, 115, 175, 74, 49, 0, 62, 0, 267, 81, 118, 0, 252, 45, 0, 177, 0, 179, 195,
244 0, 0, 0, 162, 0, 241, 92, 272, 182, 49, 242, 0, 232, 0, 0, 0, 251, 0, 226,
245 198, 144, 199, 255, 177, 233, 126, 155, 218, 124, 92, 212, 223, 161, 148, 155, 120, 97, 241,
246 0, 90, 172, 71, 0, 0, 0, 41, 121, 0, 130, 5, 191, 177, 17, 184, 0, 189, 16,
247 171, 103, 0, 25, 228, 150, 0, 242, 0, 79, 95, 79, 11, 144, 92, 63, 69, 0, 206,
248 0, 230, 71, 20, 115, 0, 0, 41, 0, 0, 64, 0, 0, 138, 72, 64, 0, 0, 160,
249 0, 263, 63, 97, 279, 30, 37, 37, 0, 212, 0, 58, 133, 0, 0, 0, 42, 0, 202,
250 12, 0, 0, 99, 219, 0, 0, 201, 222, 204, 23, 121, 113, 1, 0, 211, 268, 0, 37,
251 183, 126, 170, 216, 30, 59, 0, 243, 171, 0, 177, 0, 82, 71, 0, 122, 0, 0};
252
UnmangledHashG(const char * key,const int * T)253 int UnmangledHashG(const char *key, const int *T)
254 {
255 int sum = 0;
256
257 for (int i = 0; key[i] != '\0'; i++)
258 {
259 sum += T[i] * key[i];
260 sum %= 284;
261 }
262 return unmangledkG[sum];
263 }
264
UnmangledPerfectHash(const char * key)265 int UnmangledPerfectHash(const char *key)
266 {
267 if (strlen(key) > 32)
268 return 0;
269
270 return (UnmangledHashG(key, unmangledkT1) + UnmangledHashG(key, unmangledkT2)) % 284;
271 }
272
273 } // namespace
274
275 namespace sh
276 {
277
278 template <>
279 const size_t ImmutableString::FowlerNollVoHash<4>::kFnvPrime = 16777619u;
280
281 template <>
282 const size_t ImmutableString::FowlerNollVoHash<4>::kFnvOffsetBasis = 0x811c9dc5u;
283
284 template <>
285 const size_t ImmutableString::FowlerNollVoHash<8>::kFnvPrime =
286 static_cast<size_t>(1099511628211ull);
287
288 template <>
289 const size_t ImmutableString::FowlerNollVoHash<8>::kFnvOffsetBasis =
290 static_cast<size_t>(0xcbf29ce484222325ull);
291
mangledNameHash() const292 uint32_t ImmutableString::mangledNameHash() const
293 {
294 return MangledPerfectHash(data());
295 }
296
unmangledNameHash() const297 uint32_t ImmutableString::unmangledNameHash() const
298 {
299 return UnmangledPerfectHash(data());
300 }
301
302 } // namespace sh
303