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_ESSL_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[] = {3019, 1118, 3223, 1568, 1798, 3245, 1559, 3376, 2226, 1798,
28 2620, 1473, 3337, 3219, 2102, 3002, 738, 200, 1868, 1223,
29 3043, 1978, 169, 2910, 2392, 1025, 2508, 1820, 2346, 1327,
30 2178, 2161, 3049, 2557, 1035, 2352, 2994, 737, 2654, 1355};
31 constexpr int mangledkT2[] = {636, 476, 59, 2516, 2477, 1705, 1379, 862, 2286, 3305,
32 1088, 1317, 2329, 1813, 2096, 912, 1320, 860, 1960, 1317,
33 2313, 3371, 1402, 2011, 1445, 2703, 1237, 2629, 2853, 427,
34 379, 2302, 557, 1933, 1117, 360, 307, 812, 733, 887};
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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
38 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1519, 0, 0, 0, 0,
39 0, 0, 0, 0, 0, 0, 0, 427, 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, 0, 112, 0, 975, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
42 0, 0, 0, 0, 0, 1198, 0, 1468, 0, 0, 0, 1061, 0, 0, 0, 0,
43 2205, 418, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 2924, 2735,
44 0, 0, 0, 0, 0, 1028, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
45 0, 1969, 0, 0, 3121, 633, 0, 0, 0, 552, 0, 0, 0, 0, 1891, 0,
46 0, 0, 0, 0, 0, 0, 0, 0, 0, 523, 2938, 492, 1190, 3362, 0, 0,
47 0, 0, 494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1534, 0, 1160, 0,
48 0, 1379, 520, 0, 0, 0, 0, 0, 592, 0, 3361, 0, 0, 0, 0, 2809,
49 657, 798, 0, 217, 0, 3149, 0, 0, 1034, 0, 1856, 0, 0, 0, 3343, 0,
50 0, 808, 0, 0, 0, 0, 1326, 0, 0, 1239, 0, 0, 0, 0, 0, 262,
51 0, 494, 0, 0, 0, 0, 0, 2128, 0, 2399, 0, 2001, 0, 0, 1266, 699,
52 0, 3011, 0, 0, 0, 0, 0, 0, 0, 1591, 0, 0, 0, 351, 0, 0,
53 0, 0, 0, 1142, 0, 0, 79, 205, 0, 0, 0, 310, 405, 2406, 0, 0,
54 3218, 0, 1960, 0, 0, 0, 0, 1605, 0, 3203, 0, 0, 0, 0, 0, 860,
55 0, 0, 0, 1444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
56 24, 0, 2725, 0, 0, 0, 0, 0, 0, 0, 1018, 0, 0, 0, 0, 0,
57 0, 0, 2477, 1492, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 314,
58 0, 0, 0, 0, 3367, 0, 0, 0, 1266, 0, 1797, 0, 797, 0, 0, 0,
59 0, 0, 0, 0, 3106, 0, 0, 0, 227, 0, 0, 310, 855, 2245, 0, 3189,
60 67, 0, 0, 0, 0, 0, 506, 0, 0, 0, 0, 0, 0, 1172, 0, 0,
61 858, 0, 0, 2470, 0, 520, 0, 0, 511, 1805, 0, 1476, 3075, 0, 1434, 1226,
62 0, 0, 356, 99, 0, 0, 2765, 0, 0, 0, 0, 753, 0, 255, 0, 900,
63 1508, 0, 215, 0, 1244, 0, 3179, 1275, 0, 0, 0, 0, 0, 0, 3146, 0,
64 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 570, 0, 1438, 0, 0, 0,
65 0, 2085, 0, 0, 0, 850, 140, 0, 0, 2869, 0, 0, 0, 0, 0, 0,
66 869, 0, 0, 0, 0, 0, 0, 0, 0, 794, 115, 0, 0, 0, 0, 0,
67 75, 0, 3223, 0, 0, 2643, 0, 0, 0, 2926, 0, 0, 0, 1566, 0, 3272,
68 0, 0, 0, 0, 1305, 1452, 0, 0, 0, 3223, 288, 0, 0, 290, 2536, 114,
69 0, 531, 0, 3249, 452, 2164, 0, 752, 0, 0, 0, 37, 440, 0, 0, 97,
70 1237, 28, 0, 3302, 0, 2993, 0, 0, 499, 0, 0, 0, 254, 2056, 0, 0,
71 303, 0, 0, 0, 2959, 1731, 0, 0, 2403, 0, 152, 535, 210, 0, 0, 0,
72 0, 0, 0, 2153, 0, 68, 0, 0, 3370, 0, 1742, 0, 0, 0, 0, 0,
73 0, 0, 0, 287, 520, 0, 0, 0, 387, 3143, 0, 0, 685, 0, 471, 0,
74 0, 1244, 0, 0, 636, 0, 2932, 2209, 0, 840, 118, 0, 0, 194, 0, 0,
75 0, 0, 0, 0, 0, 704, 416, 0, 0, 2650, 0, 1464, 485, 0, 0, 0,
76 1211, 2937, 3353, 0, 3202, 1285, 0, 0, 3121, 0, 0, 784, 363, 1100, 1192, 0,
77 0, 0, 0, 0, 3324, 3109, 2628, 2261, 0, 711, 0, 1769, 0, 0, 2208, 2435,
78 165, 770, 91, 664, 0, 2900, 0, 0, 0, 0, 0, 0, 0, 2712, 2568, 2859,
79 823, 8, 659, 0, 2912, 0, 944, 1913, 899, 170, 755, 0, 0, 0, 0, 2987,
80 0, 0, 0, 0, 0, 0, 0, 0, 1450, 1493, 0, 0, 0, 0, 102, 609,
81 161, 565, 0, 3170, 0, 0, 3119, 889, 0, 0, 0, 3063, 0, 0, 872, 0,
82 0, 0, 0, 0, 1082, 870, 1330, 273, 1254, 0, 0, 2772, 0, 0, 0, 746,
83 1999, 2083, 0, 0, 1018, 0, 2880, 0, 2714, 0, 1084, 0, 2916, 0, 0, 2892,
84 0, 0, 0, 0, 768, 0, 0, 0, 0, 1230, 1064, 1491, 50, 455, 0, 678,
85 0, 0, 1190, 0, 289, 0, 0, 616, 0, 0, 386, 0, 3131, 0, 1720, 0,
86 23, 295, 0, 0, 218, 0, 326, 666, 2008, 0, 369, 0, 0, 0, 2760, 799,
87 390, 0, 0, 1112, 595, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0,
88 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2964, 0, 0, 93, 0, 1258,
89 1357, 26, 1684, 3053, 0, 2856, 0, 680, 0, 0, 0, 0, 3123, 842, 3342, 3132,
90 0, 0, 149, 2710, 0, 0, 0, 613, 0, 0, 0, 0, 1577, 0, 0, 3201,
91 0, 0, 0, 715, 354, 0, 0, 11, 2162, 983, 0, 2857, 0, 1313, 27, 491,
92 1995, 0, 2067, 0, 0, 0, 654, 0, 0, 1668, 915, 312, 724, 0, 0, 221,
93 2976, 0, 245, 543, 0, 0, 0, 0, 0, 369, 0, 1152, 1394, 0, 0, 0,
94 0, 1466, 0, 1364, 0, 0, 21, 423, 0, 333, 0, 374, 248, 2903, 0, 1463,
95 0, 1028, 0, 3283, 1489, 1314, 0, 2769, 0, 0, 0, 316, 135, 0, 907, 0,
96 3005, 0, 829, 1332, 146, 0, 38, 168, 0, 0, 0, 0, 0, 1179, 0, 0,
97 0, 0, 2167, 1840, 0, 846, 0, 0, 0, 2680, 540, 0, 0, 0, 643, 0,
98 0, 361, 0, 0, 0, 3381, 0, 0, 0, 0, 3038, 0, 0, 0, 864, 0,
99 0, 0, 894, 2129, 0, 0, 0, 1416, 0, 617, 0, 0, 204, 673, 0, 2874,
100 0, 279, 0, 2704, 0, 2012, 0, 0, 393, 1042, 0, 1122, 2966, 172, 364, 0,
101 801, 1289, 0, 1437, 0, 1215, 0, 1639, 0, 0, 3358, 978, 519, 2030, 0, 0,
102 704, 0, 0, 502, 0, 2746, 436, 1499, 0, 822, 0, 0, 1618, 0, 2669, 2693,
103 1111, 1980, 0, 695, 0, 0, 0, 0, 0, 0, 0, 0, 3021, 425, 0, 0,
104 0, 1199, 0, 1052, 774, 0, 0, 1330, 1522, 318, 1524, 0, 1613, 0, 0, 0,
105 0, 1814, 1273, 0, 3179, 0, 3307, 0, 261, 0, 0, 3340, 882, 368, 0, 1213,
106 0, 0, 0, 0, 58, 1179, 0, 0, 0, 0, 651, 859, 3012, 0, 0, 1151,
107 1403, 1341, 0, 525, 0, 2045, 3245, 0, 103, 0, 0, 0, 0, 0, 2931, 0,
108 0, 42, 994, 0, 0, 2172, 2906, 0, 1473, 0, 1406, 652, 1184, 2707, 1121, 189,
109 2394, 0, 766, 300, 0, 0, 0, 0, 0, 0, 0, 0, 1463, 2753, 0, 0,
110 1720, 520, 0, 0, 2935, 0, 289, 1, 0, 1601, 0, 0, 0, 1213, 0, 725,
111 0, 1424, 1146, 0, 1369, 330, 0, 0, 0, 0, 2250, 0, 3059, 0, 2619, 0,
112 125, 0, 0, 1701, 0, 0, 0, 30, 0, 1725, 736, 0, 0, 0, 0, 0,
113 0, 346, 775, 3208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1141, 3277, 0,
114 0, 0, 659, 0, 653, 2044, 2397, 0, 1655, 1354, 0, 0, 1384, 2075, 0, 0,
115 0, 0, 0, 0, 0, 0, 0, 0, 883, 454, 1515, 0, 877, 0, 0, 240,
116 2, 0, 0, 0, 0, 0, 992, 0, 1095, 2784, 1696, 0, 0, 2126, 0, 3362,
117 0, 395, 51, 0, 1868, 0, 1589, 2650, 0, 0, 229, 0, 628, 80, 0, 0,
118 0, 93, 0, 0, 2306, 0, 0, 0, 0, 0, 0, 285, 435, 0, 0, 0,
119 445, 1149, 0, 0, 82, 0, 1583, 0, 0, 820, 639, 479, 0, 757, 3313, 3109,
120 0, 0, 205, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 572, 2268, 1025,
121 0, 0, 648, 0, 223, 0, 0, 0, 0, 0, 690, 883, 0, 692, 878, 0,
122 1254, 1562, 0, 0, 613, 0, 0, 0, 0, 1306, 1247, 1026, 44, 0, 0, 0,
123 0, 1510, 3218, 3212, 0, 0, 788, 163, 860, 0, 0, 0, 671, 0, 200, 2648,
124 578, 1638, 2545, 0, 3278, 145, 0, 0, 0, 0, 0, 186, 0, 0, 1223, 3342,
125 2578, 0, 0, 979, 0, 2955, 2790, 0, 0, 419, 0, 1897, 0, 0, 609, 1079,
126 0, 0, 0, 2639, 1392, 1149, 144, 713, 0, 1242, 0, 196, 0, 0, 1359, 274,
127 0, 0, 0, 2229, 834, 1428, 0, 135, 3338, 0, 848, 3204, 1373, 117, 2660, 0,
128 3305, 981, 0, 1332, 0, 1627, 0, 186, 1069, 0, 1472, 532, 0, 0, 0, 3198,
129 0, 0, 965, 0, 0, 560, 0, 0, 2243, 0, 0, 750, 2277, 0, 1432, 0,
130 0, 0, 0, 0, 1456, 583, 347, 0, 1539, 0, 302, 0, 1574, 2811, 0, 3047,
131 0, 0, 2236, 0, 0, 0, 648, 102, 846, 604, 795, 59, 1548, 0, 2288, 0,
132 54, 0, 2563, 3228, 0, 1250, 1170, 3110, 853, 0, 3043, 0, 0, 2244, 0, 2900,
133 0, 0, 1460, 569, 0, 0, 630, 0, 1516, 874, 270, 0, 0, 583, 2401, 531,
134 1091, 638, 1379, 0, 0, 0, 0, 0, 818, 730, 3, 0, 0, 0, 0, 30,
135 0, 0, 0, 775, 0, 0, 3049, 817, 403, 0, 0, 1093, 255, 210, 2244, 0,
136 0, 0, 0, 358, 0, 0, 1359, 618, 3122, 0, 0, 3126, 457, 466, 1242, 0,
137 108, 1185, 268, 120, 403, 42, 1326, 2127, 1216, 345, 823, 0, 0, 1600, 1312, 0,
138 3185, 3179, 0, 0, 0, 2526, 0, 0, 0, 0, 1503, 0, 495, 1635, 0, 0,
139 1324, 0, 1451, 423, 579, 0, 0, 0, 1542, 601, 0, 1874, 0, 1473, 887, 0,
140 1239, 842, 3365, 0, 0, 382, 2954, 2, 0, 2321, 0, 0, 0, 263, 0, 569,
141 0, 0, 0, 0, 1225, 0, 0, 1087, 345, 0, 197, 1738, 595, 0, 398, 1112,
142 0, 0, 0, 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, 2329, 0, 0,
143 0, 3050, 0, 1560, 786, 3082, 414, 398, 803, 201, 885, 353, 0, 2294, 0, 233,
144 703, 911, 938, 0, 0, 0, 0, 0, 0, 362, 0, 1445, 1076, 0, 550, 1384,
145 0, 1118, 599, 0, 0, 1231, 0, 0, 0, 1633, 740, 0, 1102, 0, 0, 1906,
146 2215, 693, 0, 2932, 2069, 0, 0, 0, 0, 2635, 34, 2834, 2977, 0, 691, 0,
147 1370, 712, 559, 0, 450, 929, 3237, 3310, 1125, 0, 0, 0, 3045, 0, 3084, 2105,
148 705, 0, 1926, 0, 469, 0, 0, 0, 2748, 0, 1089, 93, 0, 1600, 643, 0,
149 3290, 1308, 0, 1299, 0, 0, 0, 0, 0, 306, 0, 0, 1384, 0, 0, 0,
150 0, 0, 0, 1098, 1292, 0, 0, 346, 419, 0, 1508, 0, 1, 0, 0, 0,
151 1680, 1191, 0, 580, 1561, 0, 1405, 719, 0, 0, 0, 1556, 0, 0, 1392, 0,
152 0, 1502, 3098, 3027, 755, 679, 0, 0, 960, 241, 0, 2998, 0, 0, 0, 592,
153 895, 0, 3, 1006, 1079, 2253, 0, 0, 0, 3185, 121, 0, 61, 1495, 2406, 1592,
154 1238, 0, 0, 0, 0, 327, 0, 0, 0, 388, 0, 0, 0, 0, 557, 3200,
155 0, 515, 0, 3384, 0, 0, 0, 0, 1461, 0, 2933, 0, 0, 978, 988, 0,
156 619, 1905, 2933, 0, 274, 47, 183, 0, 1754, 1310, 0, 0, 60, 119, 0, 1115,
157 806, 504, 0, 0, 3239, 0, 1391, 649, 0, 2532, 0, 0, 0, 720, 0, 1046,
158 3189, 2979, 997, 2746, 0, 0, 781, 0, 78, 3348, 1667, 0, 9, 0, 778, 1023,
159 943, 1330, 403, 855, 0, 1189, 750, 1515, 0, 908, 1472, 0, 610, 3175, 0, 1003,
160 455, 319, 0, 1374, 0, 3362, 0, 1116, 1650, 2116, 1011, 575, 531, 1396, 0, 0,
161 0, 0, 0, 1126, 0, 0, 680, 1880, 590, 0, 598, 2474, 0, 1286, 0, 0,
162 0, 988, 566, 768, 1657, 1318, 0, 804, 2739, 473, 0, 0, 0, 0, 0, 94,
163 0, 0, 0, 3314, 0, 541, 0, 0, 448, 251, 2433, 0, 320, 0, 0, 2952,
164 184, 932, 0, 376, 0, 0, 2614, 0, 2269, 436, 1244, 1891, 0, 0, 341, 171,
165 0, 667, 642, 445, 675, 304, 3242, 0, 1126, 422, 703, 570, 0, 0, 771, 0,
166 653, 889, 781, 0, 1378, 643, 504, 0, 0, 0, 580, 0, 1408, 0, 3302, 2846,
167 503, 2282, 1450, 1119, 1272, 98, 0, 0, 0, 0, 0, 1538, 3146, 240, 1071, 661,
168 518, 391, 876, 3040, 0, 0, 0, 0, 265, 1221, 1852, 0, 637, 0, 2544, 0,
169 0, 1586, 0, 0, 990, 0, 0, 2124, 1815, 0, 0, 0, 454, 0, 0, 103,
170 0, 714, 3153, 199, 1400, 0, 559, 0, 575, 1118, 0, 2770, 0, 0, 1867, 2859,
171 0, 1031, 1255, 1533, 3347, 0, 230, 0, 0, 0, 66, 0, 0, 1922, 0, 1573,
172 0, 2571, 878, 0, 2345, 0, 914, 0, 18, 286, 0, 31, 0, 1021, 178, 2828,
173 0, 880, 1482, 2938, 618, 616, 173, 0, 356, 2568, 2877, 1413, 3141, 0, 0, 3384,
174 0, 0, 595, 0, 0, 3023, 3250, 0, 0, 106, 3167, 0, 1249, 1639, 556, 92,
175 682, 0, 0, 0, 2578, 0, 171, 715, 0, 0, 0, 0, 0, 0, 526, 1110,
176 0, 0, 132, 0, 0, 561, 0, 0, 102, 0, 0, 0, 709, 0, 0, 1807,
177 604, 0, 2660, 1494, 174, 478, 283, 3084, 3199, 2962, 0, 528, 0, 0, 1294, 1301,
178 0, 0, 0, 0, 280, 3105, 1058, 0, 0, 208, 2671, 1299, 1380, 0, 3068, 330,
179 779, 0, 0, 0, 0, 1227, 0, 242, 0, 387, 0, 1185, 2876, 0, 463, 0,
180 12, 22, 0, 310, 3184, 0, 549, 0, 0, 922, 0, 458, 3242, 374, 0, 1286,
181 1578, 629, 1157, 74, 0, 311, 187, 2258, 1225, 31, 3209, 0, 989, 0, 0, 1145,
182 2856, 121, 441, 0, 1119, 410, 1122, 0, 279, 424, 894, 0, 765, 0, 0, 621,
183 289, 3257, 2187, 1354, 272, 3384, 3298, 0, 2254, 0, 3238, 0, 1343, 0, 0, 878,
184 0, 0, 0, 1271, 0, 0, 966, 0, 2571, 0, 1296, 0, 0, 0, 2115, 0,
185 0, 0, 0, 0, 1086, 361, 3099, 1113, 0, 877, 3103, 1096, 0, 496, 0, 0,
186 1307, 0, 0, 0, 0, 0, 3114, 686, 2610, 0, 0, 3115, 634, 0, 40, 3137,
187 1155, 173, 1277, 0, 3244, 318, 985, 306, 0, 1959, 0, 0, 1220, 1458, 826, 0,
188 877, 560, 453, 0, 0, 647, 297, 3175, 0, 0, 225, 0, 0, 2169, 396, 2834,
189 958, 0, 176, 1365, 1626, 2551, 0, 1260, 1159, 523, 0, 638, 0, 2599, 1652, 0,
190 0, 1063, 0, 3255, 0, 1249, 0, 1056, 0, 991, 3384, 711, 390, 1123, 1803, 0,
191 169, 1837, 700, 1120, 1048, 0, 104, 2405, 743, 510, 1288, 0, 2177, 1193, 239, 3136,
192 2146, 402, 2159, 0, 891, 0, 0, 0, 0, 0, 1482, 162, 0, 1162, 1167, 1184,
193 0, 2987, 0, 0, 0, 3277, 2208, 881, 0, 0, 144, 58, 0, 36, 3140, 0,
194 0, 948, 128, 263, 0, 313, 0, 276, 1302, 42, 0, 0, 1862, 710, 518, 0,
195 0, 2357, 77, 0, 1540, 3378, 0, 107, 0, 0, 2972, 0, 0, 0, 0, 593,
196 404, 0, 0, 0, 1415, 0, 843, 0, 0, 0, 2375, 671, 0, 0, 1593, 0,
197 0, 1310, 645, 0, 1374, 3100, 0, 0, 666, 0, 1338, 0, 0, 0, 0, 0,
198 1234, 0, 780, 927, 0, 0, 17, 0, 1085, 3375, 0, 0, 3363, 2928, 512, 0,
199 205, 2155, 0, 563, 586, 0, 0, 0, 0, 0, 1534, 1567, 0, 1587, 979, 1100,
200 1686, 1510, 0, 84, 13, 1576, 0, 0, 1107, 444, 0, 1246, 3155, 2174, 490, 0,
201 0, 469, 0, 719, 0, 1197, 0, 2049, 303, 1402, 0, 899, 626, 2668, 1280, 2678,
202 1395, 0, 1154, 1776, 1573, 0, 0, 1075, 963, 0, 347, 1068, 0, 575, 157, 684,
203 3222, 0, 0, 3054, 0, 1227, 0, 651, 0, 1467, 1488, 1155, 0, 1065, 0, 2991,
204 2964, 0, 386, 228, 0, 642, 146, 343, 2896, 1082, 0, 0, 118, 423, 1162, 3283,
205 0, 0, 1131, 3385, 527, 2698, 0, 1286, 0, 0, 0, 382, 114, 2038, 3151, 3275,
206 757, 583, 1317, 0, 865, 0, 0, 0, 164, 0, 3107, 585, 1557, 0, 3315, 205,
207 1550, 0, 2576, 3377, 0, 959, 1553, 3292, 1459, 2026, 0, 0, 0, 1298, 1610, 0,
208 0, 0, 136, 0, 878, 0, 69, 1080, 0, 0, 0, 1543, 3181, 190, 0, 0,
209 1026, 0, 1353, 420, 291, 3192, 1439, 1192, 0, 0, 544, 324, 0, 185, 1271, 859,
210 1485, 0, 3380, 681, 1531, 3006, 0, 385, 3298, 0, 0, 763, 1356, 347, 187, 611,
211 3386, 0, 1255, 0, 0, 0, 673, 0, 647, 184, 0, 0, 0, 0, 0, 0,
212 0, 334, 479, 0, 420, 384, 0, 0, 0, 0, 1241, 0, 908, 3089, 769, 0,
213 1143, 0, 764, 685, 0, 1201, 0, 926, 85, 0, 0, 343, 0, 0, 0, 612,
214 835, 0, 1500, 1110, 861, 1101, 0, 326, 0, 298, 0, 3038, 635, 701, 470, 51,
215 0, 0, 534, 0, 0, 0, 148, 0, 1129, 3022, 192, 1448, 3324, 0, 631, 991,
216 2962, 0, 399, 0, 2576, 1423, 1941, 0, 1269, 0, 175, 1222, 0, 669, 214, 3295,
217 0, 0, 733, 179, 0, 538, 667, 0, 1280, 805, 2918, 0, 446, 1069, 0, 0,
218 0, 474, 1090, 0, 1315, 0, 1624, 517, 813, 1337, 861, 0, 0, 0, 394, 0,
219 2724, 1309, 1165, 0, 439, 893, 405, 0, 2638, 0, 0, 0, 0, 0, 2001, 755,
220 0, 0, 0, 587, 122, 0, 816, 1619, 0, 0, 0, 0, 0, 1233, 1243, 0,
221 1019, 579, 0, 138, 0, 645, 1432, 2811, 0, 0, 0, 807, 0, 0, 2142, 3044,
222 0, 969, 0, 1057, 0, 1366, 484, 0, 3058, 0, 196, 0, 0, 0, 51, 1604,
223 0, 1245, 190, 2468, 754, 0, 0, 0, 0, 0, 0, 1662, 819, 2577, 3253, 371,
224 785, 334, 1602, 0, 1506, 0, 81, 2486, 0, 0, 0, 1479, 815, 0, 0, 2300,
225 3253, 0, 0, 0, 0, 0, 0, 0, 0, 323, 0, 3094, 0, 2908, 1187, 0,
226 261, 654, 1044, 0, 3048, 3014, 0, 287, 0, 0, 0, 0, 231, 104, 878, 0,
227 1067, 0, 0, 3161, 438, 0, 0, 1078, 2660, 0, 3149, 0, 0, 0, 0, 462,
228 0, 2678, 0, 0, 0, 0, 0, 227, 0, 0, 1436, 1165, 2965, 242, 0, 0,
229 210, 989, 0, 2744, 464, 3376, 0, 0, 0, 0, 0, 524, 1520, 2609, 1019, 0,
230 612, 1497, 1541, 280, 1357, 2033, 0, 475, 805, 1059, 0, 232, 1517, 3087, 364, 1276,
231 30, 0, 2329, 2943, 0, 0, 0, 3118, 3182, 0, 2670, 117, 951, 0, 484, 1030,
232 0, 0, 1619, 886, 1108, 728, 1074, 845, 2703, 1405, 1629, 2624, 1703, 0, 0, 2861,
233 1769, 620, 862, 0, 1013, 935, 1293, 1558, 1525, 0, 1212, 637, 2796, 1047, 1260, 3142,
234 177, 0, 0, 0, 0, 1180, 174, 221, 306, 0, 1121, 2493, 105, 689, 1471, 3326,
235 0, 0, 1041, 802, 0, 0, 0, 3066, 0, 0, 355, 0, 3044, 2314, 6, 2908,
236 0, 75, 0, 734, 982, 2223, 0, 246, 1262, 950, 1201, 412, 1637, 0, 3226, 2368,
237 570, 1587, 293, 1109, 0, 414, 1461, 0, 520, 2, 0, 0, 0, 0, 35, 0,
238 3339, 1043, 443, 202, 0, 0, 576, 0, 0, 783, 0, 0, 1949, 1568, 0, 0,
239 250, 0, 0, 2742, 0, 0, 0, 0, 428, 0, 928, 562, 696, 3079, 0, 431,
240 0, 1636, 1031, 2363, 0, 1484, 1361, 187, 1106, 0, 1813, 148, 78, 684, 0, 0,
241 0, 0, 0, 1597, 0, 490, 581, 365, 1525, 1774, 398, 1479, 369, 2560, 0, 0,
242 1255, 0, 1603, 0, 562, 1033, 0, 679, 1369, 0, 0, 0, 0, 3316, 0, 0,
243 0, 748, 0, 140, 442, 0, 351, 678, 634, 614, 0, 2055, 537, 0, 315, 0,
244 1027, 0, 1389, 0, 690, 0, 1375, 1247, 17, 0, 973, 601, 2808, 833, 1569, 283,
245 2924, 0, 0, 70, 0, 0, 0, 1480, 426, 1044, 0, 1377, 1200, 0, 869, 765,
246 1474, 0, 718, 234, 247, 1061, 0, 193, 0, 3343, 0, 755, 34, 0, 0, 3160,
247 2522, 846, 0, 0, 1481, 498, 1554, 0, 652, 1437, 315};
248
MangledHashG(const char * key,const int * T)249 int MangledHashG(const char *key, const int *T)
250 {
251 int sum = 0;
252
253 for (int i = 0; key[i] != '\0'; i++)
254 {
255 sum += T[i] * key[i];
256 sum %= 3387;
257 }
258 return mangledkG[sum];
259 }
260
MangledPerfectHash(const char * key)261 int MangledPerfectHash(const char *key)
262 {
263 if (strlen(key) > 40)
264 return 0;
265
266 return (MangledHashG(key, mangledkT1) + MangledHashG(key, mangledkT2)) % 3387;
267 }
268
269 constexpr int unmangledkT1[] = {97, 232, 70, 143, 5, 244, 156, 165, 149, 104, 52, 212, 55,
270 198, 123, 166, 207, 15, 8, 16, 124, 239, 1, 141, 27, 12};
271 constexpr int unmangledkT2[] = {48, 53, 154, 47, 98, 132, 124, 230, 240, 185, 66, 210, 53,
272 31, 224, 146, 247, 121, 189, 168, 78, 241, 152, 70, 40, 220};
273 constexpr int unmangledkG[] = {
274 0, 70, 0, 0, 0, 153, 203, 210, 0, 220, 24, 0, 141, 0, 0, 0, 4, 75,
275 0, 0, 0, 76, 0, 0, 266, 0, 0, 249, 102, 0, 125, 49, 196, 0, 62, 0,
276 0, 239, 0, 0, 0, 0, 0, 12, 0, 24, 99, 83, 42, 74, 0, 0, 0, 120,
277 0, 173, 0, 103, 0, 21, 0, 35, 127, 193, 24, 36, 56, 0, 179, 0, 214, 143,
278 147, 0, 245, 8, 0, 43, 101, 244, 53, 0, 153, 0, 0, 135, 180, 216, 0, 241,
279 0, 93, 223, 0, 0, 102, 50, 150, 118, 0, 259, 182, 0, 102, 83, 0, 52, 21,
280 0, 245, 0, 0, 27, 38, 47, 0, 0, 0, 143, 0, 0, 91, 0, 0, 265, 133,
281 0, 43, 0, 171, 0, 149, 0, 90, 130, 0, 106, 0, 0, 0, 8, 101, 146, 181,
282 121, 0, 0, 148, 128, 142, 226, 258, 0, 60, 66, 94, 248, 106, 0, 0, 114, 220,
283 5, 0, 245, 85, 55, 229, 216, 87, 0, 139, 0, 0, 56, 0, 152, 30, 152, 10,
284 257, 0, 0, 0, 10, 54, 117, 0, 161, 241, 0, 32, 96, 0, 228, 0, 133, 237,
285 251, 145, 0, 179, 82, 0, 0, 0, 0, 92, 47, 0, 239, 62, 119, 221, 91, 14,
286 74, 0, 0, 0, 45, 0, 117, 0, 156, 145, 0, 47, 236, 6, 39, 43, 148, 231,
287 0, 0, 40, 45, 118, 89, 62, 178, 0, 0, 122, 58, 190, 0, 219, 246, 113, 259,
288 190, 64, 112, 171, 220, 33, 238, 136, 133, 0, 41, 0, 141, 0, 68};
289
UnmangledHashG(const char * key,const int * T)290 int UnmangledHashG(const char *key, const int *T)
291 {
292 int sum = 0;
293
294 for (int i = 0; key[i] != '\0'; i++)
295 {
296 sum += T[i] * key[i];
297 sum %= 267;
298 }
299 return unmangledkG[sum];
300 }
301
UnmangledPerfectHash(const char * key)302 int UnmangledPerfectHash(const char *key)
303 {
304 if (strlen(key) > 26)
305 return 0;
306
307 return (UnmangledHashG(key, unmangledkT1) + UnmangledHashG(key, unmangledkT2)) % 267;
308 }
309
310 } // namespace
311
312 namespace sh
313 {
314
315 template <>
316 const size_t ImmutableString::FowlerNollVoHash<4>::kFnvPrime = 16777619u;
317
318 template <>
319 const size_t ImmutableString::FowlerNollVoHash<4>::kFnvOffsetBasis = 0x811c9dc5u;
320
321 template <>
322 const size_t ImmutableString::FowlerNollVoHash<8>::kFnvPrime =
323 static_cast<size_t>(1099511628211ull);
324
325 template <>
326 const size_t ImmutableString::FowlerNollVoHash<8>::kFnvOffsetBasis =
327 static_cast<size_t>(0xcbf29ce484222325ull);
328
mangledNameHash() const329 uint32_t ImmutableString::mangledNameHash() const
330 {
331 return MangledPerfectHash(data());
332 }
333
unmangledNameHash() const334 uint32_t ImmutableString::unmangledNameHash() const
335 {
336 return UnmangledPerfectHash(data());
337 }
338
339 } // namespace sh
340