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
operator <<(std::ostream & os,const sh::ImmutableString & str)15 std::ostream &operator<<(std::ostream &os, const sh::ImmutableString &str)
16 {
17 return os.write(str.data(), str.length());
18 }
19
20 #if defined(_MSC_VER)
21 # pragma warning(disable : 4309) // truncation of constant value
22 #endif
23
24 namespace
25 {
26
27 constexpr int mangledkT1[] = {419, 3324, 3055, 682, 2516, 3573, 1077, 352, 459, 1367,
28 1709, 3713, 2124, 3400, 1049, 3112, 4345, 1841, 3838, 250,
29 346, 1175, 4166, 3226, 3223, 3757, 2882, 3808, 3538, 3929,
30 2879, 645, 327, 587, 2354, 2152, 2604};
31 constexpr int mangledkT2[] = {173, 3828, 3704, 3319, 3921, 1345, 3443, 3932, 2674, 3556,
32 3712, 2915, 3558, 3985, 956, 921, 2744, 3923, 3636, 3636,
33 691, 3023, 1304, 3929, 1473, 4212, 867, 1982, 3185, 2400,
34 2895, 3809, 381, 3781, 1058, 4317, 2036};
35 constexpr int mangledkG[] = {
36 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
37 0, 0, 0, 0, 0, 2630, 3675, 882, 0, 3822, 0, 0, 0, 0, 0, 1494,
38 1899, 0, 0, 2963, 0, 0, 0, 1859, 0, 0, 0, 0, 0, 0, 0, 0,
39 4374, 0, 0, 1232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
40 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
41 0, 0, 3537, 0, 0, 0, 0, 0, 0, 0, 0, 3291, 3382, 0, 0, 0,
42 4267, 0, 0, 0, 0, 0, 0, 0, 4011, 0, 0, 0, 0, 0, 2849, 2820,
43 0, 0, 4136, 0, 0, 4107, 0, 0, 0, 0, 1640, 955, 0, 0, 3367, 0,
44 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1033, 0,
45 3769, 0, 0, 0, 4347, 0, 0, 0, 0, 0, 0, 0, 3664, 0, 0, 0,
46 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 864,
47 4374, 0, 0, 0, 0, 0, 0, 2269, 0, 0, 0, 0, 0, 0, 438, 0,
48 0, 0, 0, 0, 0, 0, 4295, 4046, 0, 0, 517, 2304, 3284, 0, 0, 0,
49 0, 0, 0, 0, 0, 3597, 0, 0, 0, 0, 0, 0, 0, 0, 1239, 0,
50 1142, 4180, 0, 0, 0, 751, 0, 1221, 0, 0, 0, 0, 0, 0, 0, 0,
51 0, 0, 1364, 1250, 4066, 0, 3333, 0, 0, 0, 0, 0, 0, 0, 2206, 2883,
52 0, 0, 0, 0, 3226, 0, 0, 0, 0, 3858, 0, 0, 1113, 0, 0, 0,
53 0, 0, 3999, 0, 4391, 0, 4102, 0, 0, 0, 0, 3875, 0, 0, 0, 0,
54 1243, 0, 613, 2744, 559, 0, 0, 0, 0, 1145, 194, 0, 0, 0, 0, 2883,
55 4271, 1209, 0, 3568, 0, 1870, 0, 0, 0, 0, 1281, 2427, 2360, 0, 4183, 3437,
56 0, 904, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2306, 0, 0, 1157, 4242,
57 2811, 0, 0, 0, 0, 2198, 0, 0, 2406, 2596, 3, 0, 0, 0, 0, 0,
58 0, 0, 4311, 2906, 463, 0, 894, 0, 4245, 0, 1024, 2083, 0, 0, 1553, 2733,
59 0, 0, 1201, 0, 0, 0, 1477, 0, 3057, 452, 0, 0, 0, 0, 1223, 0,
60 0, 1324, 0, 2477, 0, 0, 0, 0, 669, 3599, 0, 0, 0, 1006, 3579, 0,
61 0, 0, 0, 0, 0, 0, 0, 0, 0, 3250, 0, 0, 0, 3221, 3883, 1203,
62 0, 0, 4408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
63 1011, 0, 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 0, 3054,
64 446, 0, 0, 0, 634, 4156, 0, 0, 0, 1903, 0, 4037, 3641, 0, 0, 0,
65 0, 0, 961, 4328, 3145, 3282, 0, 2003, 1632, 0, 0, 0, 1628, 1632, 0, 4073,
66 0, 0, 648, 3234, 0, 922, 0, 1625, 0, 0, 0, 0, 0, 0, 0, 2729,
67 0, 589, 0, 0, 0, 0, 4244, 958, 0, 0, 0, 0, 0, 0, 0, 0,
68 0, 758, 0, 0, 0, 0, 0, 2159, 0, 185, 0, 0, 0, 0, 0, 0,
69 0, 0, 0, 0, 0, 0, 776, 0, 0, 0, 212, 1099, 0, 11, 0, 1789,
70 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 900, 4153, 0,
71 0, 1095, 0, 0, 0, 0, 0, 0, 0, 655, 3766, 634, 1640, 0, 0, 0,
72 846, 0, 1155, 0, 0, 0, 0, 191, 3422, 0, 0, 0, 1242, 855, 4108, 2813,
73 2941, 0, 337, 592, 0, 1502, 3892, 0, 0, 0, 4198, 0, 0, 0, 0, 0,
74 0, 0, 0, 0, 0, 1794, 0, 0, 0, 0, 4224, 0, 0, 1144, 0, 0,
75 199, 0, 1702, 0, 84, 0, 0, 0, 665, 0, 0, 0, 0, 0, 0, 1731,
76 851, 311, 0, 3240, 0, 0, 0, 365, 0, 0, 4302, 0, 0, 0, 0, 2975,
77 0, 0, 0, 0, 1808, 904, 3894, 796, 0, 0, 0, 0, 0, 0, 0, 1424,
78 0, 0, 0, 3503, 0, 117, 0, 4034, 0, 0, 2155, 0, 1588, 0, 0, 0,
79 399, 0, 0, 0, 3811, 568, 1220, 443, 0, 1640, 0, 1657, 0, 0, 0, 0,
80 3427, 0, 0, 4376, 1148, 0, 0, 582, 0, 0, 895, 0, 0, 0, 0, 1907,
81 3439, 0, 1265, 0, 0, 0, 0, 0, 3103, 0, 0, 0, 0, 0, 0, 0,
82 0, 0, 0, 505, 0, 0, 0, 0, 563, 1942, 565, 0, 0, 0, 0, 0,
83 1667, 0, 0, 0, 0, 1897, 0, 643, 0, 0, 241, 0, 586, 1821, 0, 1918,
84 0, 0, 0, 4292, 0, 1416, 0, 0, 1289, 0, 0, 3144, 0, 0, 2147, 194,
85 0, 572, 0, 0, 0, 0, 0, 0, 862, 0, 2245, 0, 0, 1625, 1025, 0,
86 0, 500, 0, 0, 0, 0, 0, 2699, 0, 2101, 0, 0, 0, 0, 0, 0,
87 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 1944, 0, 0, 0, 0, 0,
88 0, 0, 0, 1964, 1234, 0, 541, 0, 1214, 467, 0, 0, 4033, 0, 0, 0,
89 0, 0, 0, 0, 0, 1392, 0, 0, 0, 0, 783, 0, 0, 0, 0, 0,
90 4421, 386, 1242, 0, 2144, 0, 0, 775, 891, 0, 0, 0, 0, 0, 0, 414,
91 2413, 1636, 0, 482, 0, 1731, 1041, 3244, 0, 0, 3311, 0, 1450, 0, 0, 1551,
92 0, 283, 0, 0, 0, 704, 0, 1619, 0, 1060, 0, 243, 1948, 0, 477, 0,
93 225, 1547, 4432, 0, 0, 0, 0, 0, 0, 1198, 543, 985, 2987, 77, 710, 0,
94 0, 0, 0, 0, 0, 0, 1532, 0, 0, 0, 1868, 0, 735, 0, 0, 0,
95 742, 4107, 2126, 1284, 0, 2674, 3313, 0, 0, 0, 0, 0, 0, 0, 1708, 0,
96 3977, 28, 2591, 0, 3589, 698, 0, 0, 0, 0, 0, 0, 608, 0, 0, 0,
97 2437, 0, 525, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1302, 97, 0, 1347,
98 0, 0, 0, 0, 0, 0, 1580, 0, 556, 2831, 777, 0, 0, 0, 0, 0,
99 0, 0, 0, 892, 1682, 0, 0, 0, 0, 3598, 455, 752, 1230, 0, 1435, 4347,
100 667, 4212, 0, 0, 0, 0, 0, 0, 0, 0, 4366, 1164, 4016, 0, 2234, 0,
101 0, 0, 412, 3764, 0, 3815, 0, 623, 1845, 0, 0, 0, 0, 0, 318, 0,
102 0, 0, 4339, 0, 0, 0, 0, 0, 0, 3300, 0, 0, 90, 0, 0, 0,
103 429, 0, 273, 0, 0, 83, 0, 48, 3941, 0, 124, 0, 0, 2110, 0, 0,
104 1803, 0, 0, 0, 0, 1224, 1973, 3802, 0, 0, 0, 1784, 0, 0, 0, 599,
105 1452, 0, 343, 1729, 481, 0, 0, 0, 0, 1035, 1875, 777, 934, 0, 909, 0,
106 1133, 256, 3598, 0, 0, 0, 0, 4199, 0, 2278, 0, 1919, 1041, 4075, 0, 0,
107 0, 0, 0, 3325, 3227, 0, 782, 0, 2175, 0, 0, 0, 0, 0, 3535, 0,
108 86, 0, 531, 0, 0, 112, 0, 516, 0, 1803, 0, 3381, 0, 1576, 1711, 1921,
109 4439, 0, 3528, 227, 4405, 3857, 0, 2445, 0, 416, 4380, 0, 0, 2008, 360, 0,
110 3821, 0, 0, 0, 3354, 0, 0, 0, 1116, 79, 0, 0, 2646, 0, 923, 0,
111 1322, 0, 0, 0, 0, 2012, 1481, 0, 0, 748, 1238, 1581, 0, 4344, 0, 484,
112 529, 0, 0, 0, 0, 3569, 1728, 0, 0, 2280, 0, 1023, 0, 0, 2158, 4024,
113 0, 1110, 47, 0, 685, 1314, 0, 0, 0, 0, 0, 0, 0, 380, 0, 1671,
114 0, 4151, 0, 2491, 1544, 562, 0, 0, 4205, 382, 0, 0, 1378, 0, 1359, 0,
115 647, 0, 0, 0, 2439, 3870, 4165, 0, 0, 1722, 1029, 0, 0, 0, 0, 0,
116 1081, 473, 2172, 880, 0, 0, 3863, 36, 4309, 0, 0, 219, 870, 0, 0, 0,
117 0, 1432, 4012, 0, 465, 4141, 0, 291, 0, 4221, 0, 0, 0, 0, 0, 0,
118 0, 1003, 1667, 0, 0, 3856, 1231, 0, 122, 0, 0, 2664, 503, 0, 4210, 0,
119 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 2103, 0, 0, 0, 165, 0,
120 0, 1262, 0, 1187, 3016, 0, 0, 0, 2053, 0, 0, 0, 450, 0, 1335, 0,
121 3609, 0, 0, 0, 0, 0, 0, 2235, 0, 0, 3550, 3839, 0, 0, 938, 0,
122 926, 1605, 2972, 0, 3235, 777, 1269, 206, 0, 320, 1331, 0, 108, 929, 0, 1573,
123 0, 1497, 1520, 2609, 1673, 808, 0, 0, 0, 618, 4302, 0, 0, 1489, 1944, 0,
124 0, 0, 2055, 0, 0, 0, 3953, 0, 0, 0, 0, 2172, 0, 1269, 857, 0,
125 0, 0, 0, 0, 0, 0, 1119, 0, 0, 0, 0, 149, 0, 892, 1178, 2991,
126 0, 1413, 3786, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3882, 4234, 1833,
127 0, 704, 0, 2437, 1426, 0, 0, 2945, 4389, 749, 0, 1671, 0, 292, 0, 0,
128 0, 4118, 0, 0, 0, 4345, 0, 2341, 3107, 1191, 1865, 0, 4227, 266, 506, 0,
129 0, 0, 0, 2060, 0, 1489, 1272, 0, 1815, 0, 1142, 1527, 598, 3556, 1860, 0,
130 0, 2996, 1766, 0, 1058, 974, 0, 0, 0, 2555, 2298, 0, 1122, 0, 0, 1979,
131 0, 0, 0, 0, 1547, 2276, 1040, 762, 558, 1307, 0, 538, 0, 0, 1324, 4139,
132 2788, 0, 0, 1235, 2945, 2804, 0, 0, 144, 0, 3013, 0, 0, 0, 2226, 0,
133 1148, 0, 0, 2985, 0, 0, 0, 86, 894, 0, 0, 0, 1495, 0, 1355, 0,
134 0, 0, 0, 0, 1934, 0, 3815, 236, 169, 1294, 3739, 0, 641, 0, 500, 0,
135 1338, 0, 0, 1200, 4365, 0, 0, 0, 4107, 0, 0, 4287, 0, 2348, 0, 2492,
136 3134, 0, 305, 2012, 1617, 0, 0, 819, 1372, 0, 0, 271, 0, 559, 0, 0,
137 3791, 0, 0, 0, 1380, 0, 1257, 0, 0, 1515, 1730, 0, 0, 2453, 3079, 0,
138 0, 0, 3938, 1672, 0, 1220, 282, 0, 4013, 0, 0, 1488, 692, 0, 0, 2138,
139 0, 562, 0, 1460, 0, 0, 2085, 0, 0, 733, 0, 948, 0, 1903, 0, 0,
140 404, 0, 1696, 1965, 406, 0, 1389, 0, 1836, 0, 0, 1507, 0, 0, 754, 4406,
141 1768, 644, 0, 0, 3761, 1154, 580, 1143, 0, 0, 2861, 3473, 2257, 0, 0, 0,
142 3613, 0, 0, 1028, 0, 2011, 308, 0, 0, 0, 1916, 0, 1865, 0, 743, 0,
143 232, 0, 1648, 0, 0, 0, 0, 470, 0, 1703, 0, 788, 4401, 0, 0, 1819,
144 1551, 876, 1236, 0, 0, 0, 0, 3257, 0, 1592, 0, 0, 1958, 4062, 0, 0,
145 0, 1695, 755, 2544, 1806, 0, 1745, 2154, 0, 4408, 1493, 497, 0, 1795, 0, 2147,
146 624, 643, 2635, 0, 235, 0, 520, 1665, 0, 1975, 0, 0, 0, 353, 3148, 0,
147 0, 1436, 0, 0, 0, 1223, 445, 1589, 580, 0, 1818, 0, 0, 1698, 0, 1256,
148 3650, 0, 4240, 0, 0, 0, 3395, 0, 0, 0, 0, 1363, 4172, 2731, 1868, 1336,
149 0, 0, 2360, 0, 945, 0, 0, 0, 2038, 1620, 0, 0, 0, 4158, 0, 0,
150 889, 0, 1858, 0, 3318, 0, 269, 0, 0, 0, 195, 0, 804, 1148, 539, 382,
151 1095, 0, 1686, 0, 0, 0, 2461, 1525, 0, 42, 2474, 21, 4394, 0, 0, 1630,
152 1420, 3080, 4185, 0, 4176, 1692, 0, 2365, 0, 0, 894, 1093, 1685, 0, 0, 0,
153 3139, 4269, 657, 535, 4182, 2710, 0, 0, 426, 0, 0, 0, 0, 374, 1692, 257,
154 3660, 521, 0, 0, 3169, 3396, 256, 394, 4056, 204, 203, 2539, 4408, 1209, 1097, 0,
155 4188, 0, 792, 0, 166, 0, 1334, 0, 240, 0, 0, 0, 2908, 0, 0, 0,
156 2383, 1989, 0, 1254, 0, 0, 0, 0, 1126, 980, 0, 0, 0, 4181, 707, 0,
157 0, 0, 0, 0, 0, 0, 3560, 0, 0, 681, 1931, 191, 461, 0, 2756, 0,
158 0, 0, 0, 2844, 554, 3968, 0, 1577, 0, 4120, 0, 2824, 0, 0, 0, 0,
159 30, 0, 0, 4141, 1681, 0, 0, 0, 194, 4009, 2735, 0, 0, 138, 0, 0,
160 612, 0, 0, 0, 0, 1238, 0, 854, 98, 0, 0, 0, 0, 0, 0, 0,
161 0, 3802, 4048, 0, 0, 0, 994, 4088, 0, 1322, 171, 2789, 3513, 4055, 0, 1485,
162 3286, 0, 0, 0, 0, 0, 0, 340, 0, 2473, 1844, 3928, 0, 3358, 62, 752,
163 393, 0, 598, 0, 0, 2088, 0, 1821, 1512, 0, 0, 3929, 277, 0, 0, 0,
164 3870, 0, 0, 0, 3573, 66, 1021, 193, 1804, 715, 0, 1120, 35, 0, 0, 984,
165 0, 0, 4441, 3617, 0, 96, 0, 0, 0, 0, 0, 2697, 0, 0, 326, 0,
166 0, 323, 0, 0, 4263, 2675, 0, 336, 0, 0, 4294, 0, 0, 3624, 3734, 0,
167 0, 0, 2075, 444, 604, 0, 0, 0, 0, 3347, 2244, 1622, 0, 0, 0, 1748,
168 0, 4431, 3702, 1284, 4080, 3182, 0, 0, 428, 0, 4354, 0, 0, 4451, 1183, 0,
169 4282, 0, 3906, 3098, 15, 428, 0, 0, 0, 324, 0, 0, 0, 308, 1659, 487,
170 0, 199, 1554, 1106, 0, 1832, 2266, 0, 2359, 0, 1983, 622, 834, 0, 0, 501,
171 1531, 600, 0, 0, 494, 0, 537, 811, 1126, 1829, 0, 0, 1797, 0, 0, 3549,
172 3891, 1000, 0, 0, 676, 0, 340, 0, 2608, 0, 0, 0, 0, 0, 0, 1295,
173 170, 1434, 0, 0, 0, 551, 1610, 4219, 0, 0, 702, 0, 1901, 0, 0, 800,
174 1153, 746, 3822, 2121, 1672, 1930, 0, 0, 0, 0, 1382, 0, 52, 4332, 0, 1103,
175 0, 1739, 3848, 698, 0, 0, 1265, 0, 231, 4343, 0, 242, 491, 0, 1684, 0,
176 2942, 0, 0, 0, 1699, 534, 0, 0, 959, 536, 1168, 1507, 3947, 0, 3631, 0,
177 981, 1992, 0, 218, 2093, 49, 627, 1840, 0, 660, 16, 0, 164, 0, 4064, 0,
178 0, 1688, 0, 302, 1362, 0, 0, 538, 656, 0, 559, 1798, 501, 0, 1066, 3361,
179 0, 0, 0, 2411, 0, 2414, 1444, 0, 1980, 0, 279, 208, 4253, 0, 614, 1773,
180 3632, 449, 0, 3160, 4191, 1276, 2767, 0, 0, 0, 0, 3896, 0, 0, 0, 0,
181 0, 1381, 736, 1666, 1982, 1653, 0, 975, 0, 0, 0, 0, 0, 0, 4157, 0,
182 0, 3068, 1850, 3817, 1782, 1703, 2105, 0, 1199, 3398, 0, 1903, 1785, 3213, 0, 1035,
183 0, 0, 3130, 0, 1926, 498, 0, 0, 927, 2016, 986, 669, 1152, 0, 0, 353,
184 4274, 3920, 0, 0, 3689, 0, 0, 0, 0, 0, 0, 0, 0, 2818, 806, 0,
185 0, 602, 2726, 0, 0, 273, 0, 0, 89, 2193, 0, 0, 807, 1989, 697, 2113,
186 2041, 0, 0, 366, 0, 281, 1375, 0, 4308, 0, 604, 0, 0, 1648, 0, 4,
187 385, 618, 0, 0, 0, 3697, 3707, 0, 1374, 0, 0, 3829, 4227, 628, 0, 1755,
188 3152, 794, 2658, 0, 0, 0, 0, 0, 1354, 1841, 990, 3234, 0, 1774, 3163, 0,
189 0, 3634, 0, 0, 159, 0, 0, 0, 4225, 0, 3370, 1223, 0, 836, 2140, 0,
190 0, 253, 1118, 973, 1623, 1289, 0, 252, 3997, 0, 0, 0, 280, 2064, 1747, 4053,
191 74, 1042, 0, 0, 0, 0, 0, 0, 348, 0, 3056, 0, 821, 0, 0, 0,
192 0, 2880, 0, 3427, 2134, 0, 0, 1084, 0, 837, 1438, 1760, 952, 0, 0, 908,
193 4096, 3631, 1237, 4048, 801, 2627, 0, 0, 1028, 3840, 439, 0, 1928, 0, 393, 0,
194 0, 483, 4193, 0, 0, 851, 707, 1120, 760, 0, 705, 130, 0, 1430, 0, 660,
195 0, 269, 113, 190, 1931, 0, 1331, 2201, 120, 0, 0, 4299, 0, 4098, 0, 108,
196 1715, 378, 2060, 437, 835, 0, 0, 0, 341, 0, 0, 1669, 32, 376, 1874, 3066,
197 0, 0, 455, 0, 364, 1536, 3511, 0, 3191, 933, 0, 1925, 1479, 0, 736, 1812,
198 4130, 0, 3852, 2613, 1182, 0, 768, 0, 0, 0, 0, 0, 0, 3034, 1629, 3104,
199 0, 2050, 0, 2004, 1660, 1722, 0, 1063, 0, 1001, 1839, 2974, 0, 0, 0, 0,
200 0, 0, 3846, 589, 701, 0, 0, 880, 0, 0, 0, 0, 0, 988, 3432, 417,
201 1058, 0, 0, 4185, 0, 0, 1545, 82, 0, 0, 3123, 0, 992, 0, 0, 1640,
202 3222, 3364, 0, 0, 1655, 0, 604, 0, 0, 3813, 0, 1586, 403, 0, 0, 0,
203 0, 301, 0, 235, 1752, 0, 2395, 0, 0, 487, 510, 3883, 88, 0, 3768, 0,
204 0, 2116, 4352, 0, 1953, 1308, 3602, 0, 239, 691, 0, 507, 0, 0, 0, 3375,
205 0, 0, 0, 457, 0, 0, 820, 4014, 954, 0, 0, 0, 0, 0, 0, 3975,
206 0, 0, 0, 0, 0, 335, 0, 1751, 0, 4086, 0, 207, 0, 1263, 519, 0,
207 0, 3831, 0, 0, 0, 0, 0, 0, 493, 0, 0, 504, 3954, 0, 0, 2127,
208 0, 0, 4387, 0, 0, 0, 0, 0, 0, 658, 278, 0, 0, 268, 2614, 547,
209 0, 332, 0, 4122, 0, 0, 845, 2465, 267, 1593, 0, 1419, 0, 0, 3762, 3258,
210 0, 0, 0, 3877, 0, 1268, 1325, 496, 0, 747, 0, 1622, 0, 0, 0, 0,
211 1749, 3079, 3598, 769, 0, 0, 772, 0, 193, 0, 0, 1673, 0, 778, 0, 0,
212 0, 1403, 0, 0, 0, 252, 0, 966, 3777, 807, 326, 0, 0, 3716, 1843, 0,
213 1264, 0, 2090, 2625, 2082, 0, 15, 0, 1430, 1807, 0, 1028, 310, 3244, 0, 0,
214 2719, 4367, 0, 0, 2031, 672, 664, 1207, 2246, 1334, 3695, 0, 0, 0, 1393, 0,
215 3564, 2272, 1652, 364, 0, 2276, 3103, 3758, 569, 0, 836, 4251, 657, 811, 0, 0,
216 1296, 0, 0, 1319, 1218, 3650, 0, 1758, 0, 0, 2044, 0, 0, 610, 755, 0,
217 1737, 300, 185, 3799, 675, 937, 3578, 2116, 0, 0, 771, 753, 0, 0, 3882, 0,
218 4045, 4009, 0, 120, 0, 0, 1899, 1090, 744, 0, 0, 1116, 4309, 0, 0, 0,
219 0, 4023, 2727, 587, 749, 1125, 0, 4140, 0, 2419, 0, 1563, 1733, 4049, 1307, 3227,
220 0, 833, 447, 2055, 734, 0, 1340, 2015, 0, 1732, 803, 670, 3492, 0, 368, 0,
221 490, 656, 861, 0, 4056, 2135, 0, 0, 0, 0, 0, 108, 1248, 1973, 0, 0,
222 0, 1757, 0, 1258, 3314, 4409, 0, 1999, 0, 1083, 0, 0, 3571, 2036, 1124, 0,
223 1492, 491, 0, 1225, 0, 0, 689, 2671, 0, 312, 0, 0, 0, 1563, 1599, 0,
224 0, 0, 0, 0, 0, 0, 0, 0, 710, 2238, 0, 0, 0, 0, 0, 0,
225 0, 0, 0, 1179, 1815, 0, 0, 3385, 727, 0, 1464, 0, 1449, 4291, 0, 725,
226 0, 284, 0, 0, 1720, 2927, 2488, 0, 0, 0, 794, 1304, 741, 0, 1883, 1234,
227 101, 4087, 0, 0, 4342, 4404, 371, 1159, 17, 914, 0, 45, 27, 1031, 4033, 456,
228 866, 0, 4173, 81, 146, 4085, 963, 0, 1951, 0, 0, 0, 0, 154, 1508, 0,
229 657, 2555, 0, 0, 0, 1894, 0, 0, 2444, 1831, 0, 1008, 3034, 0, 0, 1967,
230 577, 0, 0, 0, 430, 0, 1958, 2232, 1350, 0, 4037, 0, 0, 3070, 0, 0,
231 0, 1118, 570, 3212, 1456, 1203, 284, 1918, 3700, 524, 2221, 0, 0, 0, 0, 0,
232 4036, 1911, 0, 753, 0, 0, 0, 1511, 591, 0, 0, 2209, 443, 0, 0, 3931,
233 0, 840, 201, 240, 0, 1110, 2031, 453, 0, 0, 1997, 3449, 2354, 1778, 1814, 803,
234 2811, 0, 0, 169, 1690, 0, 0, 4364, 0, 1136, 43, 539, 0, 1422, 0, 568,
235 3883, 0, 0, 2051, 186, 1001, 0, 194, 2469, 0, 0, 283, 3617, 0, 0, 0,
236 4384, 0, 247, 0, 1772, 4302, 177, 2753, 4113, 2776, 119, 3156, 0, 0, 0, 4055,
237 2686, 135, 4023, 1985, 0, 1039, 1018, 0, 839, 0, 0, 3800, 1411, 275, 268, 0,
238 3909, 401, 3648, 3769, 1263, 0, 0, 0, 2320, 1678, 3621, 2718, 0, 0, 3999, 893,
239 0, 1770, 0, 2940, 83, 2544, 225, 513, 0, 0, 1590, 867, 0, 0, 531, 0,
240 979, 3698, 595, 0, 0, 0, 2527, 1482, 707, 220, 3168, 0, 1402, 0, 3047, 0,
241 1410, 1824, 0, 4017, 1229, 3629, 174, 1641, 1396, 2765, 1704, 664, 0, 2031, 0, 0,
242 29, 0, 0, 0, 0, 0, 0, 0, 314, 816, 0, 2053, 3408, 0, 0, 0,
243 483, 2170, 0, 155, 795, 442, 0, 1100, 1207, 0, 2315, 0, 3420, 2207, 3056, 1848,
244 0, 0, 0, 3834, 923, 0, 3118, 0, 0, 0, 0, 1545, 576, 1649, 0, 2027,
245 723, 0, 3283, 0, 3670, 0, 1249, 2174, 2420, 1138, 0, 2243, 1149, 615, 653, 0,
246 0, 352, 0, 0, 0, 0, 0, 3877, 4436, 0, 0, 2315, 0, 1200, 0, 2081,
247 4415, 0, 43, 1053, 0, 0, 4122, 317, 0, 0, 0, 63, 0, 3246, 0, 0,
248 0, 133, 881, 0, 590, 833, 389, 737, 0, 571, 0, 895, 0, 0, 723, 1975,
249 595, 364, 1648, 0, 200, 172, 1440, 2062, 150, 1009, 0, 1736, 1766, 0, 0, 1405,
250 0, 167, 0, 0, 847, 0, 0, 0, 0, 0, 0, 0, 1548, 0, 0, 874,
251 0, 1123, 0, 1397, 3525, 577, 0, 0, 4364, 0, 0, 0, 0, 2923, 0, 228,
252 3563, 0, 182, 983, 0, 4140, 735, 394, 1431, 3564, 421, 700, 0, 0, 0, 2841,
253 605, 0, 1469, 1428, 0, 1084, 3405, 0, 2035, 4298, 2118, 1081, 464, 3424, 1323, 3786,
254 0, 570, 3382, 3883, 234, 0, 4200, 4232, 0, 0, 0, 3468, 1044, 0, 182, 4395,
255 0, 2321, 1469, 135, 2201, 0, 0, 953, 2912, 2371, 1387, 0, 0, 1854, 4276, 687,
256 706, 4077, 1980, 2007, 0, 0, 0, 301, 605, 0, 0, 1595, 0, 1143, 4133, 286,
257 0, 1927, 0, 2637, 0, 2071, 0, 1731, 0, 215, 0, 2582, 0, 385, 1834, 812,
258 1194, 0, 0, 1932, 1228, 3368, 605, 1225, 213, 1237, 0, 1763, 2210, 0, 0, 62,
259 0, 1247, 1478, 0, 1629, 581, 0, 2713, 814, 1614, 0, 0, 1372, 359, 1569, 0,
260 304, 2667, 1222, 1818, 2125, 0, 106, 3838, 3579, 48, 2734, 2051, 0, 0, 124, 1820,
261 0, 3695, 3683, 0, 0, 3834, 464, 972, 2678, 3716, 1071, 1021, 0, 1870, 2130, 4252,
262 4320, 2981, 3280, 0, 1036, 594, 661, 908, 1920, 0, 1610, 1991, 3, 1375, 0, 1192,
263 0, 2312, 0, 1128, 0, 2322, 2894, 2222, 537, 4424, 0, 0, 1407, 954, 781, 0,
264 3676, 378, 133, 3228, 0, 0, 17, 0, 248, 0, 0, 2459, 746, 67, 731, 788,
265 306, 923, 0, 1352, 0, 166, 2502, 0, 0, 0, 854, 0, 0, 917, 0, 1253,
266 0, 0, 1561, 0, 603, 841, 265, 305, 2753, 2906, 362, 0, 1022, 180, 1982, 1940,
267 486, 262, 0, 0, 1454, 1006, 0, 0, 1194, 0, 2039, 526, 2749, 3542, 650, 0,
268 1845, 0, 0, 0, 860, 3057, 960, 2101, 0, 4286, 0, 0, 524, 1966, 0, 1956,
269 3835, 3337, 0, 0, 4054, 0, 806, 3300, 0, 1321, 0, 448, 1906, 0, 0, 0,
270 0, 3888, 2784, 2114, 0, 0, 534, 2255, 852, 0, 0, 3332, 2315, 392, 0, 0,
271 2722, 0, 0, 67, 0, 1925, 0, 2898, 3801, 2341, 0, 0, 4247, 3574, 111, 0,
272 1861, 219, 0, 0, 0, 431, 0, 0, 4397, 4279, 2108, 2546, 4067, 4259, 0, 257,
273 584, 0, 674, 218, 1210, 0, 331, 2803, 2380, 544, 861, 0, 1935, 0, 3854, 0,
274 1388, 0, 0, 0, 3538, 917, 1996, 1686, 0, 0, 1125, 4160, 1370, 0, 0, 0,
275 2573, 4296, 0, 825, 0, 0, 727, 694, 802, 1067, 0, 0, 0, 92, 0, 0,
276 320, 0, 0, 215, 45, 1656, 0, 0, 0, 0, 0, 3164, 1801, 224, 115, 3793,
277 0, 0, 1475, 2486, 3661, 2080, 0, 1456, 1250, 557, 336, 0, 0, 824, 1, 196,
278 0, 0, 0, 0, 1705, 0, 0, 0, 2273, 919, 0, 0, 1168, 2571, 0, 4042,
279 774, 0, 0, 0, 997, 1754, 3223, 0, 1736, 1313, 0, 0, 542, 498, 2297, 0,
280 28, 62, 2996, 443, 3445, 0, 3402, 0, 1444, 0, 0, 3924, 3772, 107, 790, 0,
281 0, 0, 0, 3727, 0, 3381, 0, 0, 0, 0, 1643, 0, 0, 335, 0, 0,
282 4408, 0, 2915, 0, 2095, 558, 0, 1172, 1310, 586, 0, 326, 4312, 277, 314, 1068,
283 1099, 386, 3578, 58, 0, 0, 0, 1394, 719, 0, 1819, 0, 0, 1891, 0, 1270,
284 0, 159, 2474, 630, 44, 195, 0, 639, 3387, 0, 1750, 1679, 0, 0, 476, 2000,
285 4187, 0, 0, 1045, 3059, 0, 0, 4011, 757, 879, 1309, 0, 0, 1285, 0, 493,
286 0, 0, 403, 3090, 0, 1420, 0, 0, 0, 93, 3097, 0, 2678, 0, 4382, 519,
287 0, 0, 0, 1483, 3662, 677, 0, 0, 210, 2969, 1381, 0, 0, 697, 621, 1034,
288 2438, 0, 548, 454, 2031, 998, 0, 0, 1344, 3719, 762, 1854, 322, 1565, 2898, 0,
289 0, 1880, 488, 4066, 1208, 4331, 0, 1946, 2947, 1001, 957, 0, 605, 0, 0, 2653,
290 0, 2576, 1071, 2691, 1453, 839, 1699, 1498, 0, 0, 1453, 2837, 644, 390, 0, 1417,
291 0, 0, 2002, 403, 0, 0, 1058, 151, 3634, 2514, 685, 0, 1552, 1957, 0, 0,
292 4008, 0, 0, 907, 1180, 1970, 5, 1554, 1716, 1406, 0, 1281, 1608, 1386, 0, 46,
293 990, 1196, 0, 2749, 2074, 458, 0, 1147, 0, 303, 4093, 2353, 3243, 2029, 3905, 0,
294 1344, 0, 889, 3759, 0, 0, 0, 0, 697, 1292, 0, 0, 940, 4381, 0, 1097,
295 1279, 0, 0, 0, 921, 0, 3951, 0, 0, 1774, 0, 0, 3666, 0, 0, 0,
296 2132, 49, 0, 1998, 0, 0, 3063, 2263, 0, 0, 0, 0, 4133, 0, 4168, 0,
297 2291, 0, 30, 2020, 1578, 0, 0, 1340, 3835, 1601, 0, 1154, 623, 3975, 1990, 431,
298 1879, 0, 0, 0, 1250, 1437, 0, 205, 0, 484, 1031, 107, 1358, 173, 1159, 4001,
299 294, 4263, 528, 92, 0, 2683, 0, 42, 0, 205, 0, 2971, 0, 0, 0, 122,
300 299, 3205, 0, 850, 906, 625, 2413, 2904, 410, 0, 3395, 2076, 68, 0, 0, 1587,
301 0, 0, 0, 0, 0, 0, 0, 0, 0, 1551, 989, 0, 4344, 1523, 0, 967,
302 0, 673, 795, 0, 0, 746, 0, 3633, 412, 781, 0, 762, 0, 0, 1435, 0,
303 87, 0, 603, 2598, 982, 0, 936, 302, 1113, 0, 0, 0, 0, 178, 0, 3223,
304 0, 147, 2023, 361, 1492, 290, 3936, 1176, 0, 366, 4185, 3937, 6, 1188, 247, 1755,
305 556, 0, 1633, 0, 0, 2129, 0, 3726, 716, 0, 1102, 0, 0, 0, 0, 0,
306 241, 1792, 0, 758, 0, 0, 3855, 480, 0, 0, 902, 3812, 0, 823, 0, 3631,
307 1447, 0, 3684, 1302, 520, 685, 1701, 0, 4131, 1127, 40, 0, 0, 0, 0, 641,
308 4256, 1076, 1442, 0, 1018, 0, 970, 377, 0, 919, 0, 645, 1391, 564, 443, 1843,
309 465, 1697, 916, 797, 0, 0, 1433, 0, 1727, 3260, 0, 0, 0, 0, 0, 3978,
310 4255, 0, 0, 185, 798, 0, 3635, 4265, 1466, 0, 4057, 430, 1811, 0, 1753, 605,
311 0, 469, 839, 325, 1451, 1317, 1902, 4251, 0, 2, 0, 0, 86, 439, 0, 1255,
312 1536, 2001, 2390, 0, 0, 0, 0, 878, 966, 986, 0, 0, 1343, 0, 2039, 0,
313 0, 61, 1939, 1875, 202, 0, 0, 2049, 0, 3918, 1470, 897, 1501, 0, 0, 3211,
314 403, 0, 504, 459};
315
MangledHashG(const char * key,const int * T)316 int MangledHashG(const char *key, const int *T)
317 {
318 int sum = 0;
319
320 for (int i = 0; key[i] != '\0'; i++)
321 {
322 sum += T[i] * key[i];
323 sum %= 4452;
324 }
325 return mangledkG[sum];
326 }
327
MangledPerfectHash(const char * key)328 int MangledPerfectHash(const char *key)
329 {
330 if (strlen(key) > 37)
331 return 0;
332
333 return (MangledHashG(key, mangledkT1) + MangledHashG(key, mangledkT2)) % 4452;
334 }
335
336 constexpr int unmangledkT1[] = {162, 98, 200, 17, 263, 137, 354, 364, 24, 149, 40, 40, 170,
337 267, 387, 255, 7, 55, 108, 152, 27, 154, 105, 349, 229, 229};
338 constexpr int unmangledkT2[] = {290, 338, 301, 284, 117, 303, 83, 150, 389, 350, 323, 330, 58,
339 316, 310, 107, 30, 65, 14, 310, 8, 298, 365, 40, 174, 83};
340 constexpr int unmangledkG[] = {
341 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 199, 165, 0, 0, 0,
342 0, 0, 230, 245, 164, 0, 0, 71, 382, 38, 0, 0, 137, 9, 34, 0, 6, 0, 0,
343 162, 101, 0, 0, 151, 0, 70, 0, 0, 201, 0, 181, 0, 0, 207, 0, 0, 0, 0,
344 0, 0, 0, 38, 0, 0, 120, 0, 0, 121, 0, 115, 0, 67, 0, 92, 115, 0, 356,
345 99, 0, 0, 0, 70, 0, 0, 0, 79, 366, 0, 28, 383, 0, 0, 273, 0, 392, 0,
346 0, 0, 369, 324, 0, 74, 0, 0, 261, 0, 0, 0, 304, 306, 0, 68, 0, 123, 61,
347 0, 142, 190, 0, 0, 0, 164, 88, 73, 0, 378, 17, 81, 82, 361, 0, 169, 27, 119,
348 0, 0, 0, 0, 313, 58, 56, 0, 393, 50, 0, 0, 392, 47, 305, 0, 0, 384, 24,
349 0, 380, 0, 0, 0, 73, 0, 0, 227, 0, 0, 158, 174, 0, 0, 0, 0, 0, 0,
350 0, 0, 193, 0, 59, 0, 0, 0, 225, 327, 0, 76, 142, 367, 0, 0, 106, 0, 0,
351 48, 0, 0, 66, 45, 0, 0, 0, 227, 340, 57, 0, 195, 39, 130, 25, 40, 179, 135,
352 3, 0, 114, 373, 0, 0, 312, 31, 0, 0, 0, 348, 113, 61, 88, 0, 21, 0, 21,
353 25, 76, 376, 0, 391, 0, 141, 122, 0, 0, 0, 0, 2, 322, 150, 381, 112, 0, 19,
354 272, 136, 0, 0, 69, 22, 0, 0, 159, 0, 39, 26, 268, 364, 0, 186, 0, 108, 62,
355 82, 0, 56, 35, 0, 154, 65, 400, 145, 191, 0, 0, 282, 0, 0, 163, 391, 152, 192,
356 127, 0, 97, 0, 71, 0, 0, 127, 24, 396, 0, 41, 70, 0, 0, 90, 132, 0, 382,
357 180, 311, 114, 123, 165, 7, 0, 0, 0, 0, 81, 296, 369, 0, 229, 133, 85, 0, 120,
358 0, 0, 206, 0, 0, 188, 84, 230, 196, 117, 0, 0, 10, 394, 59, 97, 0, 371, 53,
359 0, 370, 0, 364, 0, 208, 0, 178, 195, 229, 0, 0, 0, 0, 0, 0, 0, 166, 41,
360 89, 0, 77, 0, 171, 0, 0, 177, 0, 47, 0, 198, 0, 266, 56, 156, 0, 283, 0,
361 101, 218, 0, 0, 0, 38, 145, 0, 111, 0, 41, 0, 0, 0, 201, 0, 19, 43, 0,
362 82, 396, 57};
363
UnmangledHashG(const char * key,const int * T)364 int UnmangledHashG(const char *key, const int *T)
365 {
366 int sum = 0;
367
368 for (int i = 0; key[i] != '\0'; i++)
369 {
370 sum += T[i] * key[i];
371 sum %= 402;
372 }
373 return unmangledkG[sum];
374 }
375
UnmangledPerfectHash(const char * key)376 int UnmangledPerfectHash(const char *key)
377 {
378 if (strlen(key) > 26)
379 return 0;
380
381 return (UnmangledHashG(key, unmangledkT1) + UnmangledHashG(key, unmangledkT2)) % 402;
382 }
383
384 } // namespace
385
386 namespace sh
387 {
388
389 template <>
390 const size_t ImmutableString::FowlerNollVoHash<4>::kFnvPrime = 16777619u;
391
392 template <>
393 const size_t ImmutableString::FowlerNollVoHash<4>::kFnvOffsetBasis = 0x811c9dc5u;
394
395 template <>
396 const size_t ImmutableString::FowlerNollVoHash<8>::kFnvPrime =
397 static_cast<size_t>(1099511628211ull);
398
399 template <>
400 const size_t ImmutableString::FowlerNollVoHash<8>::kFnvOffsetBasis =
401 static_cast<size_t>(0xcbf29ce484222325ull);
402
mangledNameHash() const403 uint32_t ImmutableString::mangledNameHash() const
404 {
405 return MangledPerfectHash(data());
406 }
407
unmangledNameHash() const408 uint32_t ImmutableString::unmangledNameHash() const
409 {
410 return UnmangledPerfectHash(data());
411 }
412
413 } // namespace sh
414