• 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_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[] = {4297, 2135, 882,  463,  243,  2797, 3474, 3964, 2601, 1875,
28                               977,  230,  3052, 2743, 4229, 1730, 2644, 3296, 1182, 336,
29                               949,  1697, 2772, 1125, 2239, 1764, 3151, 1665, 93,   3429,
30                               1762, 4174, 833,  1912, 4086, 1737, 419,  306,  2685, 2708};
31 constexpr int mangledkT2[] = {3483, 3455, 685,  2048, 2816, 1230, 330,  75,   1032, 3165,
32                               2990, 3268, 910,  860,  1581, 680,  267,  2903, 1702, 3372,
33                               3371, 741,  844,  1930, 1402, 3565, 1630, 4278, 2298, 2973,
34                               2727, 2058, 4172, 886,  2174, 3540, 831,  818,  938,  2318};
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,    3568, 0,    0,    0,    0,    0,    0,    0,    0,    2246, 0,    0,
38     0,    736,  0,    2030, 0,    0,    0,    0,    0,    0,    4298, 2841, 1181, 0,    3644, 0,
39     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    3296, 0,    0,
40     0,    2053, 0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    3268, 0,
41     0,    0,    0,    0,    0,    0,    0,    0,    0,    2131, 0,    0,    0,    0,    4073, 4151,
42     0,    2091, 0,    0,    322,  0,    0,    0,    0,    0,    0,    0,    2583, 0,    3656, 0,
43     0,    1778, 0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    894,  2171, 0,    0,
44     1193, 0,    0,    0,    0,    0,    0,    0,    104,  0,    2064, 1378, 1282, 0,    3229, 0,
45     0,    0,    0,    0,    0,    0,    1253, 0,    0,    0,    0,    1262, 0,    0,    0,    0,
46     0,    0,    0,    0,    0,    0,    484,  1317, 0,    0,    0,    0,    0,    0,    0,    0,
47     0,    0,    1674, 0,    0,    0,    0,    0,    1324, 0,    0,    0,    0,    0,    3710, 0,
48     1338, 0,    1888, 0,    0,    2077, 1715, 3797, 1162, 0,    2147, 0,    1748, 0,    0,    0,
49     1108, 2365, 0,    0,    0,    0,    0,    4305, 0,    0,    0,    0,    924,  870,  1168, 0,
50     0,    0,    1280, 1867, 0,    4252, 0,    0,    0,    0,    0,    0,    0,    0,    2214, 0,
51     0,    0,    0,    450,  2692, 0,    569,  0,    0,    1673, 0,    363,  0,    0,    0,    0,
52     2000, 0,    1212, 0,    0,    0,    0,    0,    4343, 0,    521,  0,    0,    704,  0,    0,
53     0,    1328, 0,    2851, 0,    0,    0,    0,    1018, 0,    0,    3386, 0,    0,    0,    0,
54     0,    0,    0,    0,    0,    0,    0,    0,    1848, 4197, 0,    0,    0,    0,    436,  0,
55     2805, 4198, 0,    0,    1253, 0,    0,    0,    4339, 0,    0,    0,    0,    0,    0,    0,
56     3569, 767,  0,    536,  0,    0,    0,    0,    0,    804,  2103, 4332, 0,    0,    0,    2853,
57     0,    0,    2991, 533,  2686, 4008, 0,    0,    0,    1903, 0,    0,    0,    591,  0,    0,
58     3159, 0,    4186, 0,    0,    0,    0,    0,    0,    885,  0,    0,    0,    0,    0,    123,
59     0,    0,    0,    1227, 852,  0,    514,  0,    0,    0,    4183, 0,    2194, 3040, 0,    3152,
60     0,    0,    0,    0,    0,    320,  0,    333,  0,    0,    0,    1200, 234,  0,    0,    0,
61     0,    0,    387,  0,    0,    0,    0,    2323, 0,    0,    0,    0,    0,    621,  0,    0,
62     0,    0,    0,    771,  0,    792,  0,    0,    3011, 0,    0,    0,    0,    0,    0,    0,
63     0,    0,    0,    0,    3356, 902,  0,    0,    0,    0,    891,  1585, 0,    0,    2483, 693,
64     3410, 0,    0,    128,  1082, 0,    1498, 100,  0,    0,    0,    0,    1437, 0,    0,    0,
65     3309, 0,    0,    0,    0,    69,   1411, 196,  0,    0,    268,  0,    3904, 2406, 0,    0,
66     126,  0,    0,    2540, 0,    1096, 0,    1963, 0,    0,    0,    0,    0,    0,    0,    0,
67     0,    2959, 0,    0,    3952, 0,    0,    0,    0,    397,  0,    0,    0,    0,    0,    4249,
68     0,    792,  0,    0,    0,    503,  0,    0,    0,    0,    0,    0,    0,    2851, 0,    0,
69     0,    0,    0,    1000, 479,  0,    0,    471,  342,  1196, 0,    948,  0,    0,    0,    1105,
70     165,  0,    0,    2019, 509,  0,    0,    0,    0,    3580, 397,  2026, 0,    0,    0,    14,
71     0,    1633, 0,    0,    3520, 1035, 0,    1864, 2947, 0,    0,    426,  0,    2874, 0,    0,
72     1167, 0,    0,    0,    2422, 1063, 2173, 3233, 0,    162,  87,   1367, 3655, 0,    0,    0,
73     3039, 3,    0,    626,  0,    1665, 0,    0,    0,    0,    0,    0,    0,    2254, 3187, 4150,
74     1163, 0,    1199, 0,    0,    2486, 0,    0,    0,    261,  0,    1012, 0,    3380, 0,    0,
75     951,  0,    0,    0,    903,  690,  0,    0,    0,    541,  1679, 2808, 0,    0,    306,  0,
76     0,    0,    0,    1348, 0,    0,    0,    153,  0,    0,    1719, 0,    753,  1237, 0,    3271,
77     0,    1601, 0,    0,    0,    0,    0,    0,    193,  0,    0,    0,    0,    0,    4286, 0,
78     1671, 2157, 0,    3043, 0,    0,    3829, 242,  0,    418,  0,    0,    1984, 3620, 4297, 0,
79     0,    1913, 0,    1494, 0,    0,    697,  0,    0,    0,    0,    2817, 79,   624,  0,    0,
80     3501, 0,    212,  0,    0,    0,    0,    3410, 1110, 2170, 3544, 4165, 0,    0,    0,    0,
81     417,  0,    1540, 3704, 0,    451,  446,  0,    1785, 0,    243,  0,    0,    789,  0,    0,
82     0,    957,  1229, 0,    0,    0,    0,    0,    1467, 0,    0,    0,    0,    0,    0,    0,
83     0,    2725, 0,    0,    0,    0,    0,    3242, 0,    1924, 0,    0,    0,    0,    0,    1938,
84     1510, 0,    2999, 1697, 0,    1370, 2112, 0,    0,    297,  3059, 0,    0,    0,    0,    1157,
85     0,    1419, 1857, 0,    1947, 0,    0,    0,    2092, 0,    82,   0,    0,    1057, 183,  0,
86     896,  3016, 1407, 0,    3525, 0,    415,  1240, 780,  1159, 1708, 205,  1636, 0,    0,    3888,
87     1646, 1285, 0,    1812, 0,    0,    2236, 0,    3466, 0,    0,    0,    0,    660,  924,  0,
88     0,    2881, 0,    0,    4304, 4025, 0,    311,  0,    0,    3364, 764,  98,   0,    0,    3235,
89     3689, 1318, 3272, 0,    0,    4050, 0,    3401, 1738, 0,    1257, 0,    0,    0,    0,    25,
90     0,    0,    0,    0,    0,    0,    0,    0,    598,  0,    1594, 2304, 0,    3939, 0,    1695,
91     0,    0,    0,    0,    1331, 867,  0,    4179, 565,  3868, 3528, 927,  1502, 971,  1649, 0,
92     0,    0,    0,    1339, 1210, 2159, 3777, 0,    0,    0,    3735, 0,    0,    1345, 2828, 1753,
93     0,    4031, 3530, 3033, 0,    0,    1551, 1168, 0,    0,    0,    0,    1721, 0,    0,    0,
94     0,    0,    0,    0,    640,  0,    0,    1044, 0,    3669, 0,    0,    2486, 0,    0,    4218,
95     1481, 3178, 0,    0,    3051, 0,    0,    0,    0,    3169, 3508, 0,    0,    2882, 1061, 2303,
96     0,    0,    0,    0,    0,    0,    0,    0,    0,    357,  1700, 0,    3882, 0,    1914, 1830,
97     479,  0,    2302, 0,    0,    295,  1155, 375,  0,    0,    2605, 0,    3965, 3376, 42,   3419,
98     0,    0,    0,    4261, 0,    0,    1597, 1668, 75,   0,    0,    0,    0,    0,    0,    4266,
99     1795, 2549, 3333, 848,  0,    3961, 717,  0,    845,  685,  0,    0,    0,    0,    0,    0,
100     2861, 0,    579,  3761, 0,    0,    0,    0,    0,    993,  0,    1145, 0,    0,    0,    0,
101     0,    3129, 0,    0,    3925, 0,    0,    0,    0,    0,    0,    4215, 0,    1465, 0,    1740,
102     3594, 0,    0,    0,    0,    0,    0,    174,  660,  0,    3069, 2671, 2127, 227,  0,    0,
103     0,    0,    856,  1312, 0,    0,    0,    4152, 0,    2217, 4071, 0,    0,    0,    132,  0,
104     0,    0,    2339, 35,   0,    0,    0,    3952, 4201, 0,    3281, 0,    1739, 0,    0,    0,
105     224,  2773, 0,    0,    0,    1154, 1281, 0,    234,  0,    0,    0,    0,    525,  2135, 0,
106     4312, 1957, 2074, 0,    0,    4293, 3699, 92,   0,    0,    0,    0,    0,    949,  2609, 0,
107     0,    536,  0,    0,    0,    0,    842,  0,    0,    399,  2649, 3269, 211,  0,    1052, 0,
108     0,    0,    0,    358,  1805, 0,    0,    0,    0,    0,    0,    2375, 0,    2734, 0,    0,
109     0,    1554, 0,    0,    544,  0,    0,    0,    0,    672,  341,  520,  0,    0,    0,    0,
110     3448, 1214, 0,    0,    1776, 980,  663,  0,    3857, 0,    1779, 0,    3763, 714,  0,    0,
111     0,    1938, 0,    1950, 1860, 0,    4136, 1733, 0,    303,  0,    0,    0,    999,  0,    0,
112     2870, 0,    0,    0,    0,    1703, 0,    0,    0,    1130, 0,    0,    0,    0,    466,  866,
113     110,  717,  0,    1605, 4094, 3680, 0,    0,    0,    0,    3696, 0,    0,    0,    0,    31,
114     0,    2181, 860,  0,    0,    0,    3767, 0,    1566, 0,    743,  1869, 3516, 0,    0,    3532,
115     189,  0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    577,  0,    3941, 0,    755,
116     0,    60,   0,    1166, 0,    0,    0,    132,  3048, 0,    0,    1714, 151,  1016, 4157, 981,
117     4351, 0,    0,    1150, 0,    419,  0,    0,    1471, 0,    0,    3699, 1481, 0,    0,    0,
118     1126, 0,    3277, 0,    1931, 0,    0,    2938, 0,    0,    0,    1011, 0,    3804, 1278, 0,
119     0,    0,    1791, 3933, 3301, 0,    0,    3722, 0,    0,    446,  0,    0,    0,    0,    1939,
120     778,  0,    0,    463,  38,   0,    3500, 0,    3680, 181,  513,  0,    1408, 2322, 583,  0,
121     0,    0,    0,    464,  711,  1601, 3627, 0,    0,    0,    0,    1097, 2039, 2116, 0,    0,
122     0,    4190, 3562, 1004, 1581, 217,  2659, 0,    3571, 839,  1180, 51,   0,    0,    1475, 2972,
123     0,    0,    102,  0,    0,    1410, 0,    0,    0,    0,    201,  703,  0,    4032, 2265, 1591,
124     0,    0,    1770, 0,    0,    0,    2470, 0,    0,    0,    0,    658,  0,    0,    193,  0,
125     359,  0,    118,  0,    62,   0,    4011, 0,    0,    0,    0,    0,    0,    0,    3026, 0,
126     0,    2338, 1887, 729,  0,    3212, 0,    2138, 707,  358,  3200, 1916, 0,    617,  0,    3524,
127     0,    0,    0,    0,    184,  0,    0,    0,    3630, 0,    0,    3596, 468,  0,    1963, 0,
128     0,    4297, 0,    0,    1296, 2667, 1409, 1432, 0,    939,  0,    0,    1964, 0,    937,  1644,
129     0,    4133, 331,  0,    0,    0,    0,    0,    2836, 0,    2203, 1748, 2672, 0,    516,  0,
130     303,  0,    1710, 0,    0,    2599, 0,    0,    1870, 2358, 0,    0,    0,    465,  1055, 0,
131     3456, 0,    0,    0,    728,  0,    0,    1537, 0,    0,    0,    1054, 1309, 0,    3963, 26,
132     3821, 3499, 554,  0,    926,  3356, 0,    311,  1750, 0,    0,    0,    0,    0,    1666, 0,
133     1786, 231,  0,    0,    0,    1996, 0,    2058, 0,    3539, 0,    508,  0,    0,    0,    2026,
134     0,    0,    0,    1094, 0,    0,    0,    0,    0,    1958, 2399, 0,    0,    2161, 0,    0,
135     0,    158,  3356, 0,    0,    0,    818,  3457, 0,    934,  1992, 794,  592,  4024, 3900, 3619,
136     3644, 2414, 1895, 3528, 1282, 0,    0,    4047, 0,    0,    0,    0,    912,  3821, 0,    0,
137     2751, 0,    4090, 0,    674,  585,  0,    3184, 2989, 0,    4006, 1764, 1024, 2305, 2090, 1195,
138     2238, 0,    1762, 0,    3144, 0,    2044, 3274, 791,  917,  3905, 0,    0,    0,    0,    0,
139     0,    0,    1370, 0,    0,    2667, 3663, 0,    0,    0,    0,    0,    0,    621,  4052, 3137,
140     4227, 2473, 1896, 0,    0,    1547, 0,    0,    0,    2718, 1626, 0,    0,    1085, 0,    316,
141     0,    3534, 0,    1569, 4251, 0,    0,    0,    0,    1558, 1611, 4221, 0,    1671, 2548, 4340,
142     2781, 1186, 4277, 325,  1740, 3911, 0,    223,  1682, 1219, 0,    0,    1404, 3881, 0,    158,
143     4248, 3889, 0,    0,    346,  0,    1405, 0,    4017, 3462, 0,    2683, 675,  696,  1388, 2068,
144     0,    3048, 0,    0,    0,    531,  0,    0,    0,    4177, 0,    0,    0,    1872, 0,    3462,
145     2811, 0,    1030, 351,  0,    885,  1989, 2540, 0,    0,    3804, 0,    1755, 0,    3446, 0,
146     0,    0,    371,  1400, 2345, 1196, 0,    0,    0,    2164, 839,  1854, 0,    0,    3230, 0,
147     0,    0,    1564, 3087, 0,    0,    990,  0,    4150, 0,    0,    0,    2606, 0,    0,    0,
148     0,    0,    3713, 0,    62,   0,    0,    0,    4343, 0,    0,    0,    0,    0,    2131, 0,
149     0,    860,  0,    3180, 2316, 0,    477,  2122, 0,    0,    0,    1209, 0,    3800, 767,  2334,
150     0,    0,    1102, 1237, 4225, 3749, 1507, 37,   2137, 0,    2670, 1856, 0,    0,    0,    0,
151     2456, 0,    2742, 1198, 0,    214,  0,    463,  0,    0,    288,  521,  1899, 1694, 0,    0,
152     0,    4146, 837,  1254, 0,    3485, 17,   3460, 293,  0,    0,    0,    2469, 0,    0,    4175,
153     1705, 0,    1680, 0,    2241, 3694, 0,    0,    0,    1820, 0,    0,    0,    2009, 0,    1598,
154     0,    912,  0,    0,    1849, 1427, 613,  0,    963,  2974, 1586, 1199, 1855, 886,  0,    1310,
155     0,    1642, 0,    2815, 397,  2196, 3016, 0,    0,    921,  0,    0,    0,    0,    0,    950,
156     819,  3789, 2769, 0,    0,    790,  0,    209,  3925, 0,    0,    2084, 1416, 844,  3226, 1083,
157     1860, 2757, 0,    0,    0,    1758, 2407, 0,    993,  0,    0,    0,    3226, 0,    0,    1936,
158     4115, 0,    3675, 4034, 0,    0,    3915, 1111, 613,  0,    0,    3812, 0,    2136, 0,    0,
159     0,    0,    2467, 0,    48,   0,    0,    3452, 2730, 0,    0,    0,    1171, 1807, 0,    0,
160     2056, 0,    1435, 0,    274,  0,    2294, 0,    3860, 0,    0,    1139, 0,    0,    0,    0,
161     4110, 309,  288,  0,    0,    3643, 0,    0,    0,    65,   0,    0,    532,  0,    4120, 0,
162     1634, 3442, 3567, 3541, 0,    4023, 0,    0,    0,    1524, 3649, 2473, 0,    0,    466,  0,
163     1639, 188,  825,  3889, 0,    1308, 0,    236,  0,    4204, 3394, 0,    2126, 2207, 0,    0,
164     529,  0,    770,  0,    0,    0,    2081, 0,    0,    1020, 837,  3684, 1141, 1681, 3355, 228,
165     485,  0,    0,    2010, 634,  0,    0,    0,    71,   0,    1755, 745,  0,    2843, 0,    0,
166     640,  169,  1277, 2651, 0,    1129, 692,  0,    3743, 0,    46,   1018, 0,    361,  347,  0,
167     1042, 1002, 3297, 0,    4107, 3977, 0,    0,    30,   0,    0,    0,    1577, 0,    3270, 828,
168     0,    1463, 0,    1628, 3666, 0,    3048, 0,    0,    4217, 3043, 0,    813,  713,  765,  1875,
169     589,  3699, 412,  2106, 0,    0,    0,    0,    2808, 963,  3642, 0,    0,    2811, 897,  327,
170     0,    3706, 0,    1395, 0,    814,  0,    2622, 0,    596,  2680, 4205, 3497, 3396, 0,    0,
171     45,   3318, 0,    990,  0,    0,    0,    0,    0,    123,  831,  0,    94,   0,    0,    0,
172     1709, 0,    0,    2276, 0,    0,    0,    0,    0,    0,    1405, 0,    0,    931,  0,    0,
173     0,    820,  0,    0,    0,    0,    4327, 0,    1982, 1341, 0,    1969, 0,    0,    543,  0,
174     2005, 0,    214,  452,  0,    0,    3173, 1389, 0,    741,  0,    0,    905,  496,  751,  3609,
175     0,    0,    1815, 0,    3885, 1941, 0,    3056, 0,    2102, 1003, 0,    1077, 922,  105,  3445,
176     1608, 0,    2809, 0,    3462, 1516, 1112, 0,    1842, 1153, 1866, 1926, 297,  1271, 29,   522,
177     0,    50,   0,    0,    819,  1540, 1647, 0,    0,    762,  2144, 2635, 0,    90,   2053, 0,
178     3697, 2063, 0,    0,    4188, 0,    0,    4221, 1443, 4189, 3126, 578,  0,    3397, 0,    95,
179     0,    0,    2002, 147,  2026, 0,    0,    0,    0,    0,    885,  334,  0,    0,    0,    1458,
180     2003, 3553, 4291, 850,  3227, 0,    0,    4236, 0,    3690, 3106, 566,  1335, 0,    886,  1184,
181     0,    0,    0,    2467, 0,    0,    0,    186,  1225, 1087, 975,  0,    0,    675,  1861, 0,
182     0,    95,   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    2403, 3509, 395,
183     0,    2449, 0,    252,  1885, 0,    0,    0,    0,    0,    184,  723,  1333, 0,    0,    0,
184     2096, 1705, 0,    0,    59,   823,  518,  0,    0,    1057, 310,  1542, 0,    1533, 658,  0,
185     0,    1401, 0,    0,    0,    2989, 0,    2655, 0,    0,    3372, 1579, 0,    4219, 0,    4220,
186     1639, 945,  0,    0,    169,  968,  0,    0,    1452, 0,    0,    3351, 2168, 3064, 3304, 2053,
187     1919, 2070, 961,  0,    0,    0,    4018, 827,  0,    1721, 0,    0,    0,    2645, 0,    0,
188     845,  0,    3922, 0,    0,    0,    2647, 727,  0,    3180, 0,    3000, 0,    0,    4226, 612,
189     0,    0,    0,    0,    0,    1682, 0,    0,    0,    3892, 754,  0,    0,    0,    1489, 589,
190     478,  0,    0,    1732, 0,    1156, 0,    1083, 0,    1121, 1794, 574,  0,    386,  1956, 335,
191     4248, 1327, 0,    1922, 0,    0,    699,  2,    2142, 240,  0,    3579, 3665, 0,    1033, 46,
192     1383, 0,    0,    127,  0,    1429, 2193, 1534, 2201, 2180, 4221, 464,  2381, 0,    955,  0,
193     0,    0,    0,    286,  466,  0,    0,    0,    1152, 2453, 3794, 844,  0,    0,    1458, 0,
194     1859, 0,    860,  0,    237,  1715, 687,  0,    476,  2564, 1375, 1223, 736,  0,    2204, 0,
195     2119, 823,  3611, 0,    0,    848,  0,    0,    0,    0,    0,    0,    0,    0,    0,    4096,
196     0,    0,    505,  3789, 4083, 1173, 1744, 0,    3,    4069, 0,    0,    3853, 0,    969,  0,
197     3609, 2624, 0,    0,    0,    1068, 0,    1146, 0,    0,    0,    1627, 1662, 599,  1839, 3080,
198     945,  1382, 4180, 0,    2357, 3564, 648,  434,  2853, 1728, 2060, 0,    0,    0,    1156, 21,
199     81,   0,    0,    2569, 3101, 988,  0,    0,    662,  948,  0,    613,  796,  0,    664,  0,
200     3883, 2981, 2870, 1344, 3983, 957,  0,    1559, 0,    1378, 235,  0,    0,    0,    905,  3246,
201     1356, 3366, 0,    2195, 0,    873,  0,    265,  0,    592,  530,  0,    0,    55,   1073, 0,
202     401,  0,    4092, 840,  1252, 225,  0,    1230, 181,  1972, 0,    3929, 2436, 27,   0,    1714,
203     828,  4073, 246,  0,    0,    0,    1576, 847,  243,  547,  0,    0,    0,    1043, 1773, 0,
204     0,    0,    1732, 0,    0,    0,    0,    0,    0,    984,  0,    0,    1775, 98,   134,  0,
205     0,    0,    0,    0,    2546, 2837, 0,    259,  0,    0,    1831, 3458, 4333, 1732, 1896, 1392,
206     968,  175,  0,    0,    0,    3663, 0,    1803, 2530, 313,  1192, 0,    0,    0,    1353, 2888,
207     910,  4016, 2160, 1982, 0,    0,    1471, 2890, 0,    0,    3300, 2186, 474,  552,  2429, 1334,
208     880,  0,    856,  629,  4070, 0,    0,    3015, 397,  2847, 1519, 0,    1202, 2972, 0,    0,
209     0,    3322, 0,    64,   1453, 4021, 0,    214,  0,    1899, 0,    1961, 4184, 0,    0,    0,
210     0,    0,    0,    3243, 0,    3399, 3065, 166,  0,    0,    0,    0,    0,    0,    2013, 0,
211     0,    1460, 1568, 32,   1717, 1925, 0,    1218, 412,  1881, 853,  4004, 4165, 0,    0,    888,
212     2150, 469,  4346, 1184, 1341, 1297, 0,    1862, 922,  0,    260,  3476, 2359, 191,  2956, 1972,
213     1230, 0,    0,    1033, 0,    4059, 938,  2886, 0,    1088, 26,   1068, 873,  292,  1792, 2160,
214     1753, 0,    1411, 0,    261,  0,    0,    2091, 85,   303,  0,    651,  3197, 4124, 1246, 268,
215     3652, 0,    906,  305,  0,    559,  1545, 1894, 3722, 365,  1645, 382,  0,    3840, 0,    3142,
216     3809, 4331, 1736, 1766, 3794, 0,    355,  962,  1513, 0,    0,    1806, 0,    0,    0,    3548,
217     4266, 1920, 1767, 472,  2337, 3500, 524,  0,    0,    1055, 0,    3354, 0,    820,  0,    207,
218     0,    1128, 2766, 298,  0,    0,    0,    1452, 0,    0,    210,  0,    0,    431,  1571, 151,
219     1720, 986,  1684, 3622, 101,  3443, 0,    970,  0,    0,    0,    1284, 200,  1327, 0,    310,
220     1068, 0,    0,    1258, 0,    0,    1291, 1274, 373,  0,    807,  1758, 3429, 465,  1542, 0,
221     914,  0,    0,    982,  0,    0,    0,    0,    1024, 4176, 0,    163,  1115, 0,    0,    823,
222     3338, 1185, 312,  3544, 0,    2672, 2428, 0,    0,    1376, 2878, 513,  744,  0,    1887, 4308,
223     77,   1429, 0,    0,    3819, 176,  0,    174,  2680, 1978, 2328, 0,    1888, 3424, 715,  819,
224     1989, 0,    0,    0,    0,    0,    1052, 1580, 3038, 0,    0,    0,    0,    0,    783,  0,
225     1356, 1822, 0,    1238, 1495, 0,    0,    0,    0,    1512, 673,  2072, 1217, 562,  84,   0,
226     0,    0,    2980, 0,    0,    712,  0,    1380, 0,    3801, 2473, 1033, 0,    0,    0,    0,
227     2188, 0,    0,    338,  0,    173,  0,    830,  1151, 1767, 0,    0,    582,  0,    0,    39,
228     3486, 1414, 2008, 0,    0,    0,    1591, 3367, 0,    1201, 3613, 0,    0,    0,    0,    0,
229     2011, 0,    0,    0,    2098, 4309, 1669, 1673, 484,  0,    0,    1141, 0,    1372, 0,    0,
230     0,    175,  0,    3575, 0,    53,   35,   3797, 0,    0,    4002, 374,  707,  1913, 1050, 810,
231     3624, 1065, 0,    1307, 0,    0,    0,    0,    0,    584,  3932, 0,    0,    0,    0,    0,
232     2321, 2154, 0,    0,    0,    0,    0,    0,    118,  1072, 1680, 0,    1496, 0,    814,  1670,
233     0,    0,    1766, 2062, 0,    1380, 0,    0,    734,  0,    0,    294,  0,    211,  3565, 0,
234     0,    0,    495,  751,  2296, 4019, 641,  1194, 656,  603,  0,    571,  2156, 1051, 2563, 15,
235     424,  181,  0,    163,  2558, 0,    0,    0,    0,    0,    1629, 3871, 2064, 314,  4082, 0,
236     0,    0,    909,  185,  2673, 0,    259,  118,  2077, 0,    4262, 2317, 0,    0,    3784, 0,
237     0,    4316, 1265, 0,    1440, 1240, 133,  0,    1072, 0,    3909, 458,  2143, 530,  0,    0,
238     0,    4128, 4285, 0,    1671, 0,    792,  0,    1455, 222,  0,    1318, 555,  165,  140,  4060,
239     364,  2111, 0,    817,  0,    2787, 1673, 0,    0,    1064, 0,    1683, 0,    0,    1067, 0,
240     0,    0,    4186, 1646, 947,  878,  187,  639,  1284, 0,    4271, 710,  0,    0,    797,  1623,
241     2441, 2926, 3814, 0,    0,    3747, 0,    0,    0,    2183, 0,    318,  1350, 0,    3334, 1748,
242     1987, 198,  0,    0,    96,   890,  1556, 619,  0,    892,  0,    2840, 1311, 0,    2445, 50,
243     0,    0,    860,  820,  970,  1022, 2586, 0,    3261, 0,    0,    1630, 0,    692,  1265, 470,
244     1273, 1172, 0,    0,    251,  0,    1430, 0,    0,    0,    1474, 0,    0,    245,  1220, 0,
245     2162, 2560, 0,    0,    176,  0,    47,   0,    4219, 0,    285,  0,    0,    0,    0,    1893,
246     1726, 3805, 1289, 725,  1288, 3295, 0,    0,    1828, 0,    0,    578,  4196, 0,    3446, 0,
247     1099, 41,   1599, 4251, 4103, 4056, 1143, 0,    778,  0,    0,    1465, 36,   149,  1226, 1664,
248     4021, 0,    0,    756,  0,    1767, 0,    4306, 1076, 0,    2000, 167,  2560, 0,    4288, 48,
249     0,    679,  0,    0,    0,    593,  0,    2789, 0,    578,  680,  0,    611,  0,    0,    0,
250     1301, 908,  0,    1287, 3842, 783,  1093, 396,  0,    2081, 4158, 3690, 1097, 1206, 875,  0,
251     887,  881,  1546, 966,  1933, 1901, 572,  0,    125,  150,  0,    2304, 0,    0,    1402, 1730,
252     1888, 0,    3724, 1853, 0,    997,  0,    3330, 1756, 0,    0,    2053, 0,    4168, 870,  1300,
253     0,    0,    3816, 1521, 649,  0,    1122, 0,    3890, 0,    0,    1688, 2582, 3481, 3517, 1402,
254     3430, 0,    0,    0,    3687, 0,    1263, 0,    1973, 570,  659,  0,    67,   3001, 10,   1414,
255     0,    0,    793,  0,    0,    775,  0,    0,    991,  4128, 0,    1945, 4043, 524,  0,    3,
256     635,  1283, 0,    3262, 4169, 1199, 421,  0,    1069, 811,  0,    782,  0,    0,    0,    0,
257     903,  1053, 1885, 0,    1694, 4112, 0,    0,    0,    211,  637,  1160, 0,    0,    3385, 0,
258     0,    1026, 394,  397,  0,    0,    3592, 4075, 2257, 0,    0,    1493, 1276, 0,    112,  1330,
259     0,    2042, 1067, 3608, 0,    0,    0,    131,  141,  667,  2491, 1041, 1750, 3869, 1444, 931,
260     13,   0,    0,    0,    995,  0,    0,    1164, 0,    1745, 693,  2359, 0,    503,  2425, 4164,
261     0,    251,  983,  587,  1330, 636,  750,  3537, 1251, 0,    1275, 0,    54,   800,  0,    0,
262     135,  0,    1615, 1784, 255,  0,    768,  2909, 1089, 0,    0,    1953, 0,    0,    4285, 2189,
263     0,    0,    1770, 1005, 0,    0,    2190, 1447, 0,    2372, 0,    0,    4294, 0,    484,  4007,
264     905,  918,  0,    4062, 779,  0,    0,    3454, 0,    0,    2031, 996,  1534, 4219, 0,    0,
265     0,    0,    0,    997,  967,  0,    2758, 3722, 0,    0,    432,  1503, 7,    455,  2713, 3779,
266     0,    4209, 252,  388,  0,    0,    0,    0,    753,  1668, 3134, 2824, 0,    1618, 0,    1020,
267     2016, 650,  1954, 3717, 964,  987,  0,    1843, 0,    1110, 32,   1838, 1895, 0,    2959, 3891,
268     1268, 0,    467,  2275, 0,    2372, 0,    3591, 1176, 0,    0,    1867, 0,    1506, 556,  0,
269     1530, 1060, 0,    3845, 3400, 991,  0,    2055, 1517, 2518, 3044, 3229, 92,   2142, 1887, 0,
270     0,    173,  0,    0,    0,    2285, 389,  0,    1445, 841,  179,  2176, 0,    1723, 202,  3921,
271     0,    869,  3222, 932,  3625, 2117, 0,    0,    0,    2150, 620,  1490, 343,  0,    870,  0,
272     0,    0,    1362, 2941, 28,   3589, 3617, 1026, 106,  1975, 1207, 43,   13,   0,    0,    1539,
273     3943, 2134, 0,    0,    0,    0,    1374, 3279, 0,    0,    103,  1543, 2,    0,    1464, 367,
274     3786, 0,    3061, 608,  0,    937,  0,    0,    1563, 0,    0,    0,    0,    379,  1501, 4344,
275     2403, 1818, 0,    1496, 1248, 0,    0,    1923, 1770, 0,    1176, 258,  3438, 3393, 3843, 1463,
276     3320, 2016, 0,    237,  0,    0,    1054, 3853, 0,    4034, 3465, 1751, 4124, 0,    580,  633,
277     0,    0,    338,  0,    827,  0,    3931, 791,  2004, 0,    3197, 1416, 2352, 4049, 0,    0,
278     3604, 0,    190,  0,    3414, 0,    1988, 3936, 3976, 2340, 2079, 2030, 694,  981,  4289, 964,
279     4266, 0,    0,    1903, 444,  0,    3270, 787,  0,    4334, 3039, 616,  0,    2172, 3966, 145,
280     0,    0,    2701, 0,    2183, 0,    0,    3192, 0,    0,    959,  3637, 0,    759,  4173, 3336,
281     1566, 3478, 3630, 0,    1251, 1866, 703,  3019, 424,  1419, 0,    0,    1819, 0,    454,  0,
282     0,    2126, 2167, 1823, 1037, 0,    0,    3571, 4108, 2115, 4328, 0,    1396, 0,    0,    3727,
283     0,    1205, 414,  3008, 116,  3465, 1421, 0,    2558, 0,    0,    609,  0,    741,  0,    2194,
284     0,    1922, 3078, 0,    3842, 0,    1363, 2725, 311,  4345, 538,  0,    0,    0,    0,    1337,
285     0,    245,  730,  3534, 0,    1269, 595,  1294, 0,    0,    0,    225,  0,    4188, 1736, 824,
286     0,    0,    167,  2499, 1781, 0,    0,    0,    423,  0,    0,    1622, 4028, 0,    1840, 0,
287     0,    0,    666,  1456, 0,    2427, 290,  2422, 19,   701,  473,  0,    0,    4001, 0,    3066,
288     2791, 0,    0,    0,    1239, 314,  2319, 74,   0,    0,    0,    420,  405,  2933, 0,    1188,
289     674,  0,    0,    2052, 1720, 4274, 0,    1678, 82,   2162, 0,    418,  515,  906,  3028, 150,
290     1741, 658,  340,  312,  3129, 1956, 0,    0,    0,    1557, 1454, 1298, 0,    3671, 0,    1433,
291     0,    1556, 2926, 0,    2989, 116,  0,    871,  173,  4327, 0,    1007, 700,  0,    1404, 0,
292     0,    0,    0,    0,    212,  1898, 17,   0,    2999, 0,    75,   1171, 0,    0,    0,    0,
293     2067, 2016, 2828, 856,  1446, 2648, 0,    406,  1702, 2203, 835,  1345, 1712, 3678, 3556, 0,
294     1715, 0,    0,    248,  0,    2252, 2088, 2289, 0,    0,    1832, 750,  736,  0,    0,    649,
295     3428, 0,    0,    7,    1777, 423,  1479, 1096, 782,  3057, 916,  0,    0,    4333, 3405, 0,
296     221,  0,    0,    0,    2135, 125,  0,    3985, 0,    2043, 2766, 1322, 0,    1166, 0,    983,
297     0,    4131, 870,  0,    4150, 1236, 1341, 485,  284,  809,  1520, 3519, 339,  0,    1611, 0,
298     3234, 0,    407,  0,    255,  1345, 845,  2342, 596,  1672, 3140, 1817, 1898, 0,    0,    1480,
299     3098, 2296, 1009, 1475, 1301, 281,  2861, 0,    0,    1470, 4245, 2013, 1068, 0,    761,  1258,
300     0,    1937, 3321, 427,  1624, 0,    3857, 2455, 3890, 594,  0,    0,    3304, 3401, 3079, 382,
301     814,  1991, 815,  3392, 0,    0,    2074, 0,    3051, 0,    586,  0,    0,    0,    0,    3617,
302     686,  61,   482,  2176, 0,    0,    1313, 0,    0,    72,   0,    0,    1641, 0,    1632, 0,
303     1765, 1924, 1984, 0,    3634, 0,    4192, 0,    0,    244,  2123, 0,    1893, 2850, 0,    466,
304     1513, 320,  0,    1269, 1758, 480,  0,    649,  613,  492,  3125, 0,    1079, 0,    0,    0,
305     0,    882,  1760, 1233, 1248, 2591, 0,    0,    2468, 0,    1081, 1155, 514,  2971, 0,    63,
306     276,  3940, 3532, 232,  0,    1546, 0,    130,  1879, 458,  0,    0,    0,    0,    794,  0,
307     0,    0,    1623, 1465, 291,  0,    254,  1380, 0,    1925, 1989, 355,  968,  660,  0,    3264,
308     0,    0};
309 
MangledHashG(const char * key,const int * T)310 int MangledHashG(const char *key, const int *T)
311 {
312     int sum = 0;
313 
314     for (int i = 0; key[i] != '\0'; i++)
315     {
316         sum += T[i] * key[i];
317         sum %= 4354;
318     }
319     return mangledkG[sum];
320 }
321 
MangledPerfectHash(const char * key)322 int MangledPerfectHash(const char *key)
323 {
324     if (strlen(key) > 40)
325         return 0;
326 
327     return (MangledHashG(key, mangledkT1) + MangledHashG(key, mangledkT2)) % 4354;
328 }
329 
330 constexpr int unmangledkT1[] = {319, 0,   91,  210, 328, 207, 176, 148, 315, 247, 334,
331                                 51,  186, 88,  234, 137, 99,  190, 126, 312, 196, 87,
332                                 214, 314, 190, 315, 151, 99,  287, 338, 137, 176};
333 constexpr int unmangledkT2[] = {17,  29, 312, 81,  181, 91,  234, 364, 160, 152, 334,
334                                 252, 18, 359, 221, 189, 3,   270, 59,  105, 157, 15,
335                                 234, 91, 296, 208, 326, 310, 160, 192, 307, 307};
336 constexpr int unmangledkG[]  = {
337     0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   102, 0,   59,  145, 0,   0,   0,   0,   0,
338     186, 110, 205, 0,   0,   0,   98,  0,   0,   246, 0,   0,   0,   271, 114, 0,   0,   73,  43,
339     197, 0,   61,  0,   0,   0,   0,   146, 0,   285, 177, 0,   0,   0,   0,   0,   0,   0,   348,
340     0,   21,  0,   237, 86,  144, 272, 0,   34,  0,   0,   87,  0,   122, 0,   29,  160, 107, 0,
341     0,   0,   0,   254, 180, 173, 100, 268, 0,   41,  0,   314, 0,   0,   0,   0,   354, 230, 199,
342     211, 0,   90,  233, 21,  0,   0,   118, 289, 0,   0,   0,   179, 238, 339, 227, 42,  247, 0,
343     0,   0,   0,   126, 0,   325, 297, 176, 217, 75,  1,   0,   0,   0,   66,  0,   62,  0,   0,
344     70,  232, 252, 272, 0,   0,   48,  185, 207, 230, 257, 345, 0,   173, 322, 60,  294, 300, 188,
345     180, 0,   240, 0,   109, 0,   195, 160, 138, 42,  329, 343, 0,   0,   0,   0,   0,   190, 0,
346     0,   0,   263, 0,   219, 0,   259, 257, 53,  0,   278, 57,  48,  0,   216, 139, 161, 0,   62,
347     352, 255, 321, 0,   148, 21,  40,  316, 262, 71,  0,   0,   0,   155, 84,  0,   0,   0,   182,
348     242, 195, 0,   0,   177, 273, 14,  0,   0,   0,   0,   274, 63,  319, 37,  239, 152, 0,   18,
349     303, 140, 342, 0,   339, 239, 273, 0,   0,   317, 337, 203, 0,   360, 244, 206, 327, 333, 11,
350     68,  0,   144, 146, 0,   227, 0,   0,   83,  158, 19,  301, 341, 353, 177, 128, 0,   245, 0,
351     153, 0,   169, 0,   370, 174, 0,   0,   263, 0,   0,   203, 0,   311, 0,   188, 230, 0,   62,
352     10,  124, 319, 61,  0,   30,  7,   0,   0,   365, 75,  0,   350, 319, 134, 140, 199, 124, 45,
353     245, 0,   0,   281, 0,   337, 0,   195, 0,   182, 291, 156, 303, 0,   154, 327, 294, 245, 217,
354     104, 268, 0,   0,   42,  272, 347, 0,   0,   179, 151, 0,   148, 0,   15,  364, 116, 371, 176,
355     0,   213, 0,   264, 178, 29,  234, 0,   258, 0,   160, 35,  12,  358, 45,  0,   137, 0,   191,
356     324, 0,   189, 315, 2,   95,  157, 0,   0,   0,   204};
357 
UnmangledHashG(const char * key,const int * T)358 int UnmangledHashG(const char *key, const int *T)
359 {
360     int sum = 0;
361 
362     for (int i = 0; key[i] != '\0'; i++)
363     {
364         sum += T[i] * key[i];
365         sum %= 372;
366     }
367     return unmangledkG[sum];
368 }
369 
UnmangledPerfectHash(const char * key)370 int UnmangledPerfectHash(const char *key)
371 {
372     if (strlen(key) > 32)
373         return 0;
374 
375     return (UnmangledHashG(key, unmangledkT1) + UnmangledHashG(key, unmangledkT2)) % 372;
376 }
377 
378 }  // namespace
379 
380 namespace sh
381 {
382 
383 template <>
384 const size_t ImmutableString::FowlerNollVoHash<4>::kFnvPrime = 16777619u;
385 
386 template <>
387 const size_t ImmutableString::FowlerNollVoHash<4>::kFnvOffsetBasis = 0x811c9dc5u;
388 
389 template <>
390 const size_t ImmutableString::FowlerNollVoHash<8>::kFnvPrime =
391     static_cast<size_t>(1099511628211ull);
392 
393 template <>
394 const size_t ImmutableString::FowlerNollVoHash<8>::kFnvOffsetBasis =
395     static_cast<size_t>(0xcbf29ce484222325ull);
396 
mangledNameHash() const397 uint32_t ImmutableString::mangledNameHash() const
398 {
399     return MangledPerfectHash(data());
400 }
401 
unmangledNameHash() const402 uint32_t ImmutableString::unmangledNameHash() const
403 {
404     return UnmangledPerfectHash(data());
405 }
406 
407 }  // namespace sh
408