• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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