xref: /aosp_15_r20/external/angle/src/compiler/translator/ImmutableString_autogen.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
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[] = {1010, 2612, 305,  1103, 602,  2540, 792, 1009, 550,  54,
33                               2937, 2671, 687,  157,  684,  1451, 375, 1283, 106,  2776,
34                               1544, 1773, 1844, 885,  2584, 2112, 387, 2575, 3152, 2290,
35                               1637, 1317, 1135, 1305, 2761, 1142, 354, 440,  3181, 93};
36 constexpr int mangledkT2[] = {113,  1809, 1131, 1235, 2983, 2154, 83,   1560, 1911, 2522,
37                               3157, 2678, 37,   2136, 1636, 1893, 2950, 2085, 950,  1060,
38                               242,  2000, 678,  450,  2221, 2144, 891,  2916, 3009, 945,
39                               3020, 2446, 243,  2893, 2461, 2397, 759,  1880, 1958, 1451};
40 constexpr int mangledkG[]  = {
41     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
42     0,    1382, 0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
43     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    8,    0,    0,    0,    0,    0,
44     0,    0,    1877, 0,    0,    0,    0,    1737, 0,    0,    0,    0,    0,    0,    0,    0,
45     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
46     0,    804,  0,    0,    0,    0,    0,    0,    0,    0,    3048, 0,    0,    2068, 0,    0,
47     912,  0,    0,    0,    3067, 0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
48     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
49     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
50     2338, 0,    0,    0,    0,    0,    0,    0,    0,    3145, 0,    0,    2874, 901,  0,    0,
51     711,  0,    2522, 0,    0,    0,    2942, 0,    2497, 0,    0,    0,    3036, 0,    0,    0,
52     0,    0,    0,    0,    543,  0,    0,    0,    0,    0,    0,    536,  102,  0,    0,    0,
53     1566, 0,    0,    0,    0,    0,    0,    0,    0,    3174, 0,    0,    0,    0,    1070, 0,
54     0,    1148, 0,    0,    0,    526,  0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
55     3161, 0,    0,    0,    0,    0,    0,    3244, 0,    0,    0,    0,    0,    0,    2775, 663,
56     0,    0,    0,    0,    0,    0,    0,    0,    2929, 0,    0,    1239, 0,    644,  3210, 0,
57     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    3080, 0,    0,    0,    0,
58     892,  0,    1279, 201,  0,    0,    368,  0,    0,    0,    0,    0,    0,    0,    0,    539,
59     0,    0,    0,    0,    785,  0,    0,    0,    2369, 1892, 3153, 2862, 0,    0,    0,    266,
60     0,    600,  0,    2761, 0,    0,    0,    0,    0,    0,    659,  0,    0,    0,    0,    0,
61     0,    0,    1004, 0,    286,  0,    0,    0,    0,    315,  1422, 0,    0,    987,  0,    0,
62     0,    2031, 0,    0,    216,  2045, 883,  1282, 0,    0,    0,    0,    0,    0,    1396, 1339,
63     1262, 0,    0,    0,    0,    0,    0,    953,  0,    0,    1345, 0,    0,    1148, 0,    0,
64     0,    0,    0,    0,    0,    0,    0,    0,    223,  0,    293,  0,    0,    324,  0,    0,
65     876,  409,  0,    0,    0,    0,    0,    0,    0,    0,    2641, 2620, 0,    0,    0,    430,
66     0,    169,  0,    0,    794,  0,    962,  0,    0,    1700, 0,    472,  0,    0,    869,  2307,
67     1170, 1421, 2170, 0,    0,    0,    0,    0,    190,  814,  0,    738,  0,    479,  0,    0,
68     0,    0,    0,    0,    1444, 0,    1142, 937,  0,    1787, 695,  2333, 2835, 713,  0,    0,
69     0,    0,    0,    0,    0,    2794, 0,    0,    2898, 0,    0,    0,    0,    2179, 0,    0,
70     0,    0,    0,    0,    0,    1413, 0,    2318, 0,    0,    0,    269,  0,    2081, 834,  0,
71     3102, 0,    3203, 0,    1836, 176,  0,    104,  0,    432,  0,    0,    0,    0,    0,    1103,
72     0,    621,  2985, 0,    0,    0,    0,    0,    1276, 221,  361,  0,    0,    0,    0,    0,
73     0,    3114, 0,    0,    0,    0,    0,    535,  0,    1012, 0,    0,    0,    1541, 0,    0,
74     0,    0,    1385, 2736, 2860, 0,    686,  0,    3090, 1054, 0,    0,    0,    0,    1384, 2154,
75     54,   1184, 0,    0,    0,    0,    277,  0,    0,    0,    0,    0,    990,  0,    795,  0,
76     0,    1778, 1194, 0,    1288, 0,    738,  0,    0,    331,  0,    0,    0,    0,    0,    0,
77     2762, 619,  0,    1451, 1907, 0,    0,    0,    0,    0,    529,  0,    0,    0,    0,    0,
78     535,  430,  0,    3135, 0,    2699, 1905, 2267, 0,    0,    0,    0,    0,    0,    389,  1008,
79     0,    0,    981,  0,    0,    0,    127,  0,    0,    0,    0,    1242, 0,    1133, 0,    0,
80     0,    0,    0,    0,    1222, 304,  0,    3009, 2187, 0,    0,    0,    0,    0,    0,    428,
81     1602, 0,    0,    0,    0,    0,    0,    3117, 0,    0,    0,    0,    0,    0,    3182, 3254,
82     3234, 550,  452,  0,    0,    1196, 2355, 0,    0,    1149, 317,  578,  1922, 0,    0,    449,
83     156,  1022, 0,    0,    3122, 525,  1254, 750,  0,    2871, 0,    0,    0,    0,    1904, 0,
84     0,    0,    836,  0,    1166, 0,    0,    1381, 0,    513,  897,  934,  1156, 2707, 1746, 94,
85     0,    1955, 387,  0,    0,    0,    3108, 663,  0,    0,    0,    0,    3205, 0,    0,    632,
86     2022, 0,    2083, 0,    2881, 0,    1291, 0,    816,  0,    0,    2367, 469,  1036, 0,    1338,
87     0,    627,  2694, 149,  0,    1276, 0,    1293, 678,  0,    0,    0,    0,    0,    1006, 2819,
88     0,    0,    0,    1403, 650,  0,    0,    0,    0,    0,    0,    0,    368,  0,    0,    809,
89     1414, 0,    0,    0,    0,    1618, 0,    1547, 0,    477,  0,    972,  234,  742,  0,    0,
90     0,    1911, 0,    435,  0,    1686, 0,    0,    0,    569,  0,    0,    902,  1519, 0,    0,
91     0,    0,    2199, 34,   0,    0,    715,  0,    1538, 3189, 64,   0,    0,    0,    2884, 2374,
92     0,    0,    1257, 0,    0,    1160, 3207, 0,    2324, 0,    0,    0,    973,  0,    0,    0,
93     1271, 141,  811,  1103, 900,  1325, 0,    89,   0,    1444, 696,  0,    456,  0,    2545, 221,
94     2292, 0,    417,  1028, 0,    212,  0,    0,    1570, 0,    3177, 1402, 0,    0,    380,  0,
95     0,    0,    1111, 0,    0,    1120, 2149, 2682, 1223, 0,    460,  0,    837,  0,    0,    16,
96     912,  0,    0,    881,  3195, 0,    0,    0,    2024, 0,    0,    747,  0,    0,    0,    489,
97     1061, 81,   0,    0,    0,    685,  2224, 0,    284,  988,  0,    2755, 0,    0,    1180, 368,
98     0,    0,    0,    0,    1824, 0,    2567, 0,    0,    0,    0,    1069, 0,    0,    0,    2649,
99     1219, 0,    2723, 3155, 0,    893,  120,  2421, 443,  3025, 1547, 0,    0,    0,    32,   0,
100     312,  3001, 1050, 126,  652,  0,    2032, 0,    68,   0,    1352, 1533, 0,    0,    1833, 1440,
101     0,    0,    1011, 3257, 2282, 77,   0,    668,  0,    0,    2526, 0,    0,    0,    0,    679,
102     760,  908,  0,    647,  775,  0,    0,    621,  0,    0,    0,    2904, 0,    0,    556,  0,
103     384,  0,    0,    767,  199,  0,    1263, 421,  919,  0,    1286, 1216, 0,    0,    0,    0,
104     0,    348,  0,    1027, 0,    0,    361,  1582, 0,    0,    0,    0,    0,    0,    0,    2984,
105     0,    0,    0,    3169, 564,  896,  0,    0,    42,   2760, 825,  1085, 1123, 1581, 1162, 3138,
106     686,  2240, 0,    0,    1970, 0,    1553, 0,    0,    0,    2230, 1089, 0,    0,    977,  0,
107     0,    1972, 893,  0,    0,    274,  2017, 1453, 0,    1471, 0,    1571, 1475, 598,  0,    2781,
108     2356, 379,  0,    1431, 2456, 0,    950,  0,    0,    225,  1743, 0,    0,    0,    0,    0,
109     0,    1116, 0,    0,    1308, 0,    0,    0,    3009, 964,  0,    0,    0,    1677, 0,    0,
110     702,  196,  0,    0,    3236, 1217, 239,  0,    2366, 1569, 0,    0,    0,    1409, 0,    0,
111     0,    0,    0,    2918, 245,  0,    0,    1418, 0,    0,    0,    1096, 0,    0,    311,  0,
112     0,    0,    0,    2120, 0,    2724, 0,    0,    1344, 961,  1937, 2772, 1672, 3058, 0,    0,
113     796,  706,  0,    834,  293,  869,  736,  0,    0,    0,    1377, 0,    0,    892,  0,    3184,
114     3055, 470,  0,    126,  199,  0,    853,  0,    366,  0,    0,    1883, 428,  2056, 0,    0,
115     45,   0,    0,    0,    2581, 3023, 0,    261,  0,    2786, 875,  329,  0,    0,    0,    0,
116     0,    0,    0,    0,    795,  0,    0,    904,  0,    438,  0,    0,    0,    2562, 0,    0,
117     664,  0,    0,    0,    1228, 0,    1551, 0,    2882, 0,    0,    0,    76,   570,  0,    0,
118     1411, 1803, 0,    0,    0,    419,  0,    97,   1559, 0,    2611, 301,  2935, 0,    0,    0,
119     0,    0,    579,  0,    0,    0,    0,    0,    0,    1180, 0,    0,    1538, 0,    0,    1347,
120     0,    2489, 0,    0,    1485, 665,  2251, 0,    0,    0,    0,    0,    342,  0,    1425, 0,
121     1430, 3202, 0,    0,    1600, 0,    2731, 1913, 0,    0,    176,  0,    0,    0,    0,    0,
122     580,  1048, 0,    0,    0,    0,    568,  92,   0,    712,  2565, 1157, 191,  2385, 0,    1513,
123     415,  75,   0,    0,    0,    2968, 0,    0,    1273, 1010, 0,    1135, 0,    0,    2319, 220,
124     0,    1976, 0,    0,    0,    920,  0,    297,  0,    0,    0,    0,    0,    2581, 558,  970,
125     1123, 438,  239,  718,  0,    689,  0,    0,    3202, 0,    0,    0,    0,    0,    0,    693,
126     0,    0,    776,  0,    1664, 394,  183,  0,    0,    2338, 2610, 0,    1427, 0,    2103, 0,
127     0,    1866, 0,    0,    1983, 2865, 512,  0,    3246, 0,    1139, 874,  2977, 146,  0,    2909,
128     0,    1975, 0,    2196, 3243, 2156, 0,    0,    0,    0,    0,    1709, 1230, 0,    985,  0,
129     0,    525,  1827, 2166, 0,    419,  0,    0,    1363, 0,    2929, 0,    0,    397,  0,    1062,
130     549,  0,    0,    0,    894,  2658, 3024, 2340, 94,   0,    2400, 0,    0,    0,    0,    2229,
131     0,    337,  343,  0,    2145, 505,  0,    0,    1560, 819,  1024, 0,    0,    36,   2629, 0,
132     0,    2170, 0,    747,  0,    0,    596,  107,  1459, 0,    0,    851,  0,    1948, 0,    690,
133     0,    1443, 2040, 150,  0,    0,    2635, 727,  0,    2256, 0,    3268, 1665, 0,    0,    0,
134     0,    325,  0,    0,    0,    2452, 2290, 2932, 1575, 1375, 663,  0,    1023, 0,    0,    0,
135     162,  0,    0,    3257, 1985, 0,    0,    637,  2965, 3178, 327,  378,  0,    1134, 0,    0,
136     637,  0,    152,  822,  2487, 1102, 465,  0,    0,    0,    0,    1156, 0,    0,    938,  0,
137     2646, 1396, 0,    781,  2039, 0,    0,    0,    1273, 0,    754,  1572, 2646, 1231, 0,    1173,
138     0,    0,    1514, 2142, 2792, 0,    0,    0,    509,  2271, 0,    575,  0,    0,    0,    915,
139     0,    248,  0,    0,    1601, 2812, 0,    2756, 2557, 328,  0,    1150, 629,  0,    674,  0,
140     0,    172,  0,    31,   0,    1849, 0,    0,    0,    0,    124,  28,   1341, 0,    2358, 2356,
141     0,    0,    2375, 756,  2994, 856,  166,  0,    0,    0,    410,  0,    602,  0,    1718, 1354,
142     0,    1396, 3244, 647,  3003, 129,  1970, 0,    54,   1129, 0,    0,    605,  0,    0,    312,
143     3108, 0,    0,    2991, 0,    757,  0,    0,    2769, 570,  0,    0,    0,    0,    0,    2706,
144     1106, 40,   0,    2627, 0,    0,    1319, 0,    2085, 294,  1461, 0,    0,    1197, 0,    0,
145     0,    754,  0,    467,  3008, 0,    155,  0,    0,    1543, 532,  0,    0,    3268, 1995, 0,
146     0,    0,    0,    0,    2792, 0,    0,    0,    0,    0,    0,    3078, 352,  0,    1280, 566,
147     0,    215,  877,  1058, 0,    26,   940,  0,    0,    0,    1053, 0,    0,    2875, 0,    1434,
148     0,    0,    0,    0,    0,    0,    865,  0,    2816, 825,  990,  2699, 0,    3264, 0,    674,
149     638,  3253, 0,    0,    3012, 924,  749,  0,    314,  0,    2846, 3137, 0,    854,  2578, 0,
150     79,   556,  588,  0,    0,    2214, 2711, 0,    0,    0,    0,    153,  0,    45,   2574, 3029,
151     258,  67,   2908, 0,    0,    750,  0,    0,    0,    0,    0,    735,  1073, 0,    0,    1295,
152     3048, 0,    0,    0,    0,    0,    1099, 835,  954,  0,    1386, 672,  0,    0,    0,    828,
153     604,  0,    1449, 1182, 0,    186,  716,  249,  347,  1522, 0,    217,  0,    1316, 2637, 0,
154     1141, 0,    461,  0,    0,    0,    0,    0,    770,  0,    697,  0,    0,    954,  0,    0,
155     387,  0,    1615, 1369, 0,    109,  480,  1023, 513,  3237, 348,  2190, 0,    1544, 676,  3162,
156     954,  0,    0,    2411, 2792, 0,    392,  1093, 504,  413,  0,    0,    0,    250,  0,    0,
157     0,    610,  60,   0,    0,    1497, 3056, 3047, 0,    0,    98,   553,  1182, 2981, 0,    0,
158     0,    1035, 1214, 0,    0,    1844, 0,    507,  0,    0,    0,    1060, 0,    0,    1106, 0,
159     0,    307,  531,  0,    0,    248,  0,    0,    825,  0,    0,    1093, 0,    0,    1865, 0,
160     599,  179,  654,  0,    177,  3060, 0,    0,    2612, 0,    2837, 0,    832,  1240, 3021, 909,
161     1941, 2566, 821,  585,  0,    1864, 0,    1096, 1051, 0,    0,    0,    0,    0,    0,    399,
162     2301, 0,    2950, 100,  0,    65,   1522, 0,    0,    29,   0,    1346, 0,    362,  0,    0,
163     0,    0,    294,  2473, 3057, 950,  655,  0,    0,    2629, 0,    830,  3144, 0,    1197, 1829,
164     0,    248,  2812, 737,  0,    0,    263,  2715, 0,    4,    0,    0,    0,    32,   0,    788,
165     0,    0,    2007, 0,    0,    146,  24,   2474, 0,    0,    996,  2708, 0,    970,  0,    0,
166     281,  292,  2977, 0,    2551, 2995, 2672, 555,  0,    0,    51,   1199, 804,  0,    1369, 2392,
167     148,  0,    0,    0,    2683, 402,  848,  453,  620,  2851, 0,    1522, 0,    0,    1165, 0,
168     0,    419,  437,  2421, 0,    829,  816,  1499, 178,  2043, 752,  791,  0,    0,    910,  0,
169     0,    0,    3077, 0,    2513, 870,  828,  1352, 1504, 1359, 2838, 0,    1155, 1812, 3229, 0,
170     0,    0,    2685, 0,    570,  842,  0,    0,    0,    0,    445,  317,  864,  0,    1370, 0,
171     0,    0,    994,  0,    477,  1022, 1409, 1500, 0,    0,    3242, 16,   265,  0,    0,    3111,
172     0,    496,  0,    2879, 3067, 0,    0,    2871, 1285, 574,  0,    480,  3091, 0,    0,    429,
173     797,  830,  0,    0,    562,  0,    0,    854,  0,    0,    225,  150,  288,  0,    0,    0,
174     1357, 0,    3097, 0,    522,  147,  280,  1679, 445,  173,  2762, 1111, 0,    0,    44,   526,
175     1156, 723,  2212, 2525, 331,  499,  0,    2886, 532,  978,  2023, 1407, 1026, 207,  501,  0,
176     268,  2669, 2833, 1139, 0,    1817, 247,  0,    911,  0,    43,   0,    0,    423,  729,  0,
177     3128, 0,    1090, 1880, 1055, 1122, 2688, 0,    0,    0,    0,    1757, 1243, 1428, 2157, 818,
178     133,  938,  0,    0,    0,    0,    2303, 294,  0,    796,  3188, 1475, 2957, 188,  0,    547,
179     0,    1840, 0,    2686, 1476, 0,    905,  0,    58,   0,    170,  0,    2066, 261,  0,    914,
180     0,    0,    0,    10,   1338, 849,  2677, 1455, 0,    0,    387,  0,    407,  0,    717,  883,
181     144,  1315, 1380, 3071, 519,  541,  0,    71,   785,  0,    599,  0,    2360, 0,    918,  1104,
182     119,  0,    0,    545,  663,  1505, 1911, 2228, 1278, 0,    0,    0,    0,    0,    1625, 0,
183     218,  1962, 872,  517,  1233, 0,    2591, 0,    0,    1276, 0,    0,    0,    462,  0,    3187,
184     0,    3221, 126,  0,    1050, 0,    0,    1349, 0,    3000, 310,  872,  3077, 1145, 0,    336,
185     0,    1052, 0,    0,    0,    64,   509,  0,    704,  716,  2494, 0,    1002, 1563, 1477, 0,
186     0,    0,    0,    1796, 1083, 0,    603,  707,  0,    0,    0,    1329, 2298, 858,  0,    0,
187     1786, 705,  0,    0,    857,  2581, 0,    2385, 0,    0,    760,  850,  282,  0,    2523, 1262,
188     1462, 0,    0,    638,  1562, 1265, 0,    1323, 462,  0,    1459, 0,    0,    553,  0,    654,
189     0,    966,  359,  2944, 1132, 0,    1379, 0,    1446, 0,    0,    878,  3114, 0,    0,    0,
190     1337, 571,  3153, 0,    0,    720,  0,    355,  1521, 2696, 2894, 0,    20,   164,  3240, 0,
191     1260, 84,   2748, 1667, 0,    0,    0,    609,  213,  471,  2384, 3084, 3242, 0,    684,  1233,
192     1256, 0,    0,    2112, 0,    0,    0,    753,  311,  0,    122,  1244, 2732, 1309, 0,    803,
193     2392, 450,  0,    3046, 0,    326,  209,  1045, 1797, 0,    0,    3069, 0,    0,    0,    1510,
194     1291, 0,    500,  0,    1689, 581,  0,    1546, 2777, 1086, 1010, 0,    2739, 1302, 0,    0,
195     1094, 0,    0,    3137, 0,    0,    0,    1321, 399,  168,  3178, 523,  0,    1370, 0,    0,
196     0,    0,    0,    1234, 0,    152,  0,    1775, 1990, 1101, 2572, 651,  2059, 0,    1478, 1125,
197     2095, 1370, 0,    0,    3054, 0,    620,  0,    1261, 2879, 1841, 0,    1261, 2054, 0,    737,
198     2206, 0,    1203, 0,    0,    2260, 2409, 0,    3165, 0,    0,    0,    0,    455,  459,  0,
199     3084, 0,    2252, 985,  967,  416,  0,    3244, 0,    1491, 0,    715,  3246, 0,    0,    219,
200     0,    2170, 0,    0,    3238, 832,  763,  134,  0,    425,  0,    0,    0,    19,   784,  3079,
201     1309, 0,    1569, 0,    317,  101,  0,    0,    2243, 446,  814,  0,    844,  0,    0,    349,
202     455,  0,    1196, 0,    394,  672,  0,    847,  0,    1969, 639,  0,    1114, 1669, 1676, 1986,
203     3144, 3266, 2527, 899,  1854, 0,    834,  1658, 0,    2357, 0,    852,  748,  0,    0,    710,
204     0,    0,    0,    0,    2383, 966,  0,    0,    0,    0,    2840, 1635, 982,  1828, 0,    714,
205     332,  0,    0,    1549, 1343, 0,    3206, 0,    0,    2120, 2040, 0,    0,    0,    1958, 1006,
206     421,  2902, 0,    0,    1878, 367,  0,    0,    140,  952,  0,    1554, 1400, 358,  634,  384,
207     1599, 3137, 0,    2946, 119,  352,  2157, 3135, 548,  0,    0,    96,   509,  0,    1508, 321,
208     2397, 1480, 0,    0,    400,  808,  718,  0,    2789, 0,    394,  0,    0,    0,    1349, 1365,
209     30,   583,  34,   0,    458,  3033, 1668, 1055, 0,    2172, 1645, 0,    0,    1391, 3021, 0,
210     0,    224,  2457, 1224, 3162, 2721, 0,    0,    0,    2689, 0,    0,    0,    0,    1687, 0,
211     780,  0,    72,   938,  237,  483,  2283, 1562, 0,    2240, 2313, 1348, 2277, 1033, 0,    453,
212     997,  0,    2987, 1150, 0,    0,    607,  0,    1091, 0,    227,  355,  2346, 0,    1129, 3131,
213     3107, 0,    0,    0,    0,    883,  71,   712,  0,    3179, 1287, 0,    2769, 487,  1401, 0,
214     444,  0,    0,    73,   0,    2428, 0,    502,  779,  0,    372,  866,  100,  2126, 0,    0,
215     0,    0,    0,    1074, 1704, 2795, 312,  288,  553,  2048, 2421, 2542, 1088, 3039, 0,    0,
216     0,    0,    0,    0,    1364, 666,  0,    2188, 0,    0,    0,    178,  163,  0,    0,    1372,
217     371,  0,    1388, 2321, 1336, 0,    854,  609,  2593, 998,  1178, 0,    1437, 127,  0,    1200,
218     1337, 0,    1649, 810,  887,  0,    3228, 341,  0,    210,  0,    0,    0,    1736, 0,    1048,
219     406,  1458, 377,  0,    0,    0,    3080, 1069, 17,   319,  652,  0,    3215, 274,  0,    109,
220     788,  839,  3257, 302,  0,    1413, 0,    0,    1257, 1443, 0,    0,    0,    0,    0,    786,
221     2003, 709,  0,    3210, 110,  0,    0,    0,    0,    1303, 210,  1240, 1902, 0,    0,    0,
222     0,    731,  2,    0,    0,    0,    3035, 236,  2083, 1237, 1507, 271,  0,    0,    337,  0,
223     0,    493,  2067, 1933, 820,  50,   737,  0,    307,  0,    24,   287,  0,    1500, 0,    1273,
224     0,    1051, 0,    355,  1828, 96,   0,    0,    1313, 1014, 578,  595,  7,    1154, 592,  0,
225     0,    1194, 116,  1046, 0,    0,    0,    3207, 1424, 1190, 880,  0,    1004, 0,    0,    0,
226     0,    0,    591,  0,    2843, 0,    1360, 0,    2418, 0,    0,    0,    0,    480,  0,    0,
227     1011, 0,    3201, 1481, 0,    1949, 375,  482,  0,    0,    0,    0,    0,    0,    2635, 198,
228     46,   808,  1008, 0,    1132, 0,    1030, 0,    3036, 0,    2712, 0,    0,    141,  0,    0,
229     1038, 891,  0,    590,  1314, 0,    0,    529,  1824, 227,  471,  956,  1515, 1577, 0,    2643,
230     2470, 1429, 1181, 1169, 524,  1569, 0,    139,  0,    2485, 0,    2863, 1532, 740,  0,    641,
231     425,  592,  2225, 1267, 0,    0,    684,  289,  664,  0,    1784, 214,  1305, 0,    479,  0,
232     2185, 0,    0,    0,    2851, 0,    788,  0,    3194, 131,  0,    615,  338,  1425, 1266, 357,
233     1095, 367,  0,    0,    1939, 0,    0,    0,    1398, 1530, 2576, 2614, 1550, 0,    2147, 1239,
234     2439, 0,    2336, 0,    1030, 0,    2825, 2191, 0,    1416, 595,  0,    308,  0,    269,  0,
235     0,    0,    0,    927,  0,    733,  0,    1548, 0,    52,   1032, 402,  0,    2093, 0,    0,
236     0,    480,  0,    251,  0,    0,    0,    0,    0,    0,    618,  2545, 61,   1375, 12,   216,
237     1137, 781,  0,    858,  521,  0,    466,  0,    1417, 1104, 2748, 3202, 422,  131,  0,    0,
238     1704, 417,  3265, 951,  38,   0,    315,  0,    0,    1019, 161,  0,    0,    0,    673,  821,
239     869,  1087, 2351, 643,  0,    833,  533,  0,    0,    866,  677,  491,  951,  1533, 0,    1397,
240     0,    0,    3208, 0,    0,    393,  2042, 0,    700,  650,  0,    853,  2051, 0,    3252, 1467,
241     0,    0,    2338, 276,  0,    0,    0,    456,  1414, 156,  0,    0,    1500, 949,  673,  300,
242     150,  105,  562,  0,    1403, 22,   911,  0,    0,    868,  0,    62,   0,    433,  736,  3076,
243     0,    112,  0,    1539, 0,    390,  980,  0,    0,    1208, 980,  295,  0,    2710, 0,    2670,
244     0,    0,    1135, 0,    518,  671,  3247, 0,    0,    0,    145,  455,  0,    0,    0,    0,
245     1443, 928,  0,    0,    295};
246 
MangledHashG(const char * key,const int * T)247 int MangledHashG(const char *key, const int *T)
248 {
249     int sum = 0;
250 
251     for (int i = 0; key[i] != '\0'; i++)
252     {
253         sum += T[i] * key[i];
254         sum %= 3269;
255     }
256     return mangledkG[sum];
257 }
258 
MangledPerfectHash(const char * key)259 int MangledPerfectHash(const char *key)
260 {
261     if (strlen(key) > 40)
262         return 0;
263 
264     return (MangledHashG(key, mangledkT1) + MangledHashG(key, mangledkT2)) % 3269;
265 }
266 
267 constexpr int unmangledkT1[] = {185, 179, 43, 263, 143, 11,  69,  176, 125, 3,  223,
268                                 196, 236, 59, 133, 183, 251, 270, 202, 193, 91, 207,
269                                 17,  29,  81, 181, 160, 152, 51,  186, 88,  252};
270 constexpr int unmangledkT2[] = {30,  35,  282, 170, 39, 137, 74,  279, 174, 219, 203,
271                                 269, 2,   226, 58,  37, 171, 51,  273, 0,   210, 176,
272                                 91,  234, 148, 247, 18, 234, 221, 137, 189, 99};
273 constexpr int unmangledkG[]  = {
274     0,   0,   155, 53,  0,   0,   0,   0,   0,   0,   0,   244, 0,   0,   43,  280, 0,   121, 268,
275     0,   44,  0,   0,   117, 0,   0,   0,   144, 0,   54,  141, 246, 154, 74,  0,   97,  0,   137,
276     88,  194, 0,   48,  79,  0,   0,   0,   0,   3,   0,   214, 0,   250, 41,  0,   101, 134, 0,
277     0,   231, 278, 68,  237, 0,   0,   139, 0,   195, 121, 269, 0,   228, 0,   202, 236, 0,   0,
278     166, 62,  0,   0,   176, 209, 66,  234, 0,   0,   207, 0,   0,   148, 118, 0,   82,  0,   268,
279     159, 0,   240, 0,   0,   0,   150, 0,   165, 137, 0,   0,   38,  0,   140, 20,  190, 0,   0,
280     139, 0,   6,   142, 68,  46,  0,   115, 134, 138, 0,   72,  22,  85,  267, 148, 50,  0,   271,
281     30,  227, 25,  157, 111, 108, 172, 92,  213, 40,  213, 0,   165, 168, 0,   0,   151, 12,  259,
282     0,   275, 260, 260, 193, 28,  190, 0,   60,  8,   29,  97,  277, 79,  0,   244, 103, 105, 234,
283     13,  16,  33,  160, 99,  0,   31,  127, 0,   0,   192, 0,   208, 0,   118, 0,   112, 0,   227,
284     159, 168, 0,   234, 0,   67,  128, 168, 267, 212, 254, 111, 237, 72,  0,   68,  159, 0,   0,
285     0,   0,   0,   138, 209, 114, 0,   40,  0,   234, 0,   34,  20,  107, 94,  0,   199, 43,  50,
286     0,   245, 218, 190, 192, 0,   0,   0,   176, 232, 80,  0,   73,  99,  37,  0,   0,   3,   0,
287     0,   277, 0,   0,   81,  77,  0,   225, 0,   82,  50,  135, 184, 267, 235, 126, 178, 247, 176,
288     130, 1,   225, 47,  279, 94,  0,   0,   0,   0,   0,   0,   175, 0,   13,  155, 0,   143};
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 %= 284;
298     }
299     return unmangledkG[sum];
300 }
301 
UnmangledPerfectHash(const char * key)302 int UnmangledPerfectHash(const char *key)
303 {
304     if (strlen(key) > 32)
305         return 0;
306 
307     return (UnmangledHashG(key, unmangledkT1) + UnmangledHashG(key, unmangledkT2)) % 284;
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