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