Branch :
// GENERATED FILE - DO NOT EDIT.
// Generated by gen_builtin_symbols.py using data from builtin_variables.json and
// builtin_function_declarations.txt.
//
// Copyright 2020 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// ImmutableString_autogen.cpp: Wrapper for static or pool allocated char arrays, that are
// guaranteed to be valid and unchanged for the duration of the compilation. Implements
// mangledNameHash using perfect hash function from gen_builtin_symbols.py
#include "compiler/translator/ImmutableString.h"
std::ostream &operator<<(std::ostream &os, const sh::ImmutableString &str)
{
return os.write(str.data(), str.length());
}
#if defined(_MSC_VER)
# pragma warning(disable : 4309) // truncation of constant value
#endif
namespace
{
constexpr int mangledkT1[] = {1933, 3877, 3968, 1159, 2915, 2389, 3868, 1299, 1908, 2556,
1802, 1796, 861, 3187, 3496, 2798, 2418, 3782, 3695, 85,
2918, 3445, 1723, 1534, 2916, 1648, 4054, 2733, 1231, 2732,
2374, 2498, 2316, 1106, 2812, 346, 1336, 3187, 1642, 1572};
constexpr int mangledkT2[] = {88, 1749, 863, 880, 1872, 196, 3113, 2111, 3750, 1174,
4156, 4137, 1645, 663, 537, 295, 181, 3731, 1564, 2008,
1873, 2826, 1968, 2441, 1729, 1088, 2529, 1304, 1866, 11,
879, 3669, 3403, 57, 2607, 2213, 418, 1556, 2613, 3582};
constexpr int mangledkG[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1467,
0, 618, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4150,
1899, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 643, 0, 0, 0, 0, 0, 0, 0, 0, 2429, 2155, 0, 0,
0, 0, 0, 0, 0, 0, 2570, 0, 0, 0, 0, 0, 0, 0, 0, 2338,
0, 1894, 3883, 313, 3859, 0, 3868, 0, 0, 0, 0, 0, 0, 2521, 0, 0,
0, 0, 0, 0, 0, 1791, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2651,
0, 0, 0, 1620, 0, 0, 0, 0, 0, 0, 0, 3826, 0, 3348, 0, 0,
2700, 0, 0, 810, 0, 0, 0, 4088, 0, 472, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3990, 0, 0, 4002, 0,
0, 0, 1669, 0, 0, 0, 0, 0, 733, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 3566, 0, 0, 0, 0, 2673, 0, 0, 0, 0, 0,
0, 0, 4280, 0, 1237, 0, 346, 340, 634, 0, 398, 3175, 0, 0, 0, 0,
2413, 1801, 0, 0, 0, 3223, 0, 0, 0, 0, 385, 0, 0, 0, 0, 0,
2216, 1629, 0, 1278, 0, 0, 0, 1623, 0, 0, 0, 0, 0, 3571, 3889, 2814,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1270, 0, 0, 3097, 888,
0, 0, 0, 0, 0, 0, 0, 330, 3888, 0, 881, 0, 189, 0, 0, 4279,
0, 0, 0, 0, 558, 3644, 0, 0, 1638, 0, 0, 0, 0, 452, 0, 0,
1412, 0, 753, 4267, 0, 0, 0, 0, 0, 0, 2917, 0, 0, 0, 0, 0,
0, 0, 0, 0, 9, 0, 0, 0, 3984, 0, 0, 0, 0, 3838, 0, 0,
0, 0, 0, 0, 0, 0, 3270, 1351, 0, 820, 1119, 453, 0, 0, 1753, 0,
3250, 0, 0, 0, 0, 0, 0, 2006, 1988, 3375, 1787, 0, 0, 0, 1426, 871,
0, 0, 793, 3467, 1157, 3585, 0, 0, 0, 1354, 0, 0, 279, 4207, 26, 0,
0, 0, 0, 4295, 0, 1898, 0, 0, 0, 1749, 65, 2100, 0, 0, 0, 0,
598, 128, 0, 0, 0, 0, 0, 0, 0, 2031, 0, 2145, 0, 2368, 0, 0,
2055, 1429, 0, 0, 0, 2507, 402, 1343, 0, 0, 2988, 2325, 188, 0, 0, 0,
0, 2102, 2597, 0, 0, 0, 0, 0, 906, 0, 0, 0, 0, 0, 1848, 0,
0, 0, 4235, 1029, 0, 0, 0, 4285, 0, 0, 0, 0, 0, 0, 0, 855,
3870, 0, 4056, 0, 0, 0, 0, 4062, 436, 0, 0, 0, 0, 0, 0, 0,
328, 0, 410, 0, 3314, 2484, 0, 555, 0, 0, 0, 0, 0, 0, 2049, 0,
0, 728, 3835, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1684, 0,
2416, 0, 0, 3444, 519, 1318, 0, 0, 0, 0, 1361, 0, 0, 579, 0, 0,
801, 0, 3075, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 0, 0,
0, 1768, 0, 2710, 0, 2890, 0, 0, 0, 0, 3493, 0, 828, 0, 0, 0,
0, 3920, 0, 1182, 0, 1724, 0, 822, 0, 0, 0, 0, 4171, 0, 0, 0,
0, 2060, 3026, 0, 0, 1788, 0, 1981, 0, 0, 0, 0, 1655, 2074, 0, 2302,
3529, 0, 0, 0, 376, 2160, 838, 0, 1161, 0, 0, 0, 1117, 0, 1611, 0,
0, 1904, 0, 1944, 3241, 3018, 4183, 1000, 0, 0, 0, 3188, 730, 0, 0, 0,
1107, 0, 1313, 0, 0, 0, 2638, 0, 1761, 826, 0, 0, 0, 0, 221, 0,
0, 0, 0, 0, 0, 0, 1091, 3580, 0, 0, 162, 0, 2804, 632, 2363, 0,
2246, 1136, 0, 1403, 0, 0, 2757, 0, 762, 0, 0, 0, 0, 0, 1926, 0,
0, 186, 408, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 498, 0,
0, 0, 0, 3992, 3611, 0, 1255, 0, 0, 0, 0, 0, 0, 0, 1622, 0,
0, 0, 0, 0, 0, 0, 0, 3084, 0, 0, 1583, 0, 0, 3735, 0, 0,
0, 1452, 0, 0, 0, 0, 0, 2398, 1198, 412, 0, 0, 1575, 42, 0, 699,
3631, 2080, 1427, 0, 1975, 0, 0, 0, 1879, 3676, 0, 139, 0, 0, 0, 804,
0, 0, 0, 719, 0, 439, 855, 0, 2179, 0, 0, 0, 0, 1777, 0, 0,
0, 0, 0, 0, 0, 3883, 416, 0, 1433, 9, 0, 1574, 1929, 0, 3351, 338,
1237, 0, 0, 0, 225, 0, 1163, 2418, 880, 2523, 0, 0, 877, 0, 2771, 4159,
1649, 0, 3817, 1820, 112, 1227, 0, 0, 0, 0, 1045, 1715, 0, 0, 0, 0,
1633, 0, 217, 3506, 0, 0, 1673, 2696, 0, 1124, 0, 0, 0, 1800, 0, 0,
0, 0, 925, 0, 95, 3997, 944, 4229, 0, 3780, 0, 0, 0, 0, 0, 545,
0, 62, 0, 3690, 1299, 0, 0, 1200, 1488, 0, 887, 0, 0, 1662, 2638, 0,
0, 1885, 0, 0, 352, 0, 0, 0, 493, 3838, 957, 3195, 0, 34, 2350, 0,
1108, 3516, 2572, 0, 2699, 1901, 0, 0, 3923, 0, 0, 0, 2745, 0, 1289, 0,
203, 0, 4121, 0, 0, 2056, 249, 1546, 0, 1524, 0, 1434, 0, 0, 0, 1202,
4137, 2012, 3224, 0, 0, 1765, 3755, 0, 0, 0, 3092, 309, 1711, 2001, 1745, 0,
0, 337, 0, 0, 0, 0, 0, 913, 0, 3077, 0, 1072, 0, 0, 323, 942,
1456, 1095, 1721, 0, 0, 0, 0, 1383, 0, 0, 3508, 0, 0, 0, 0, 72,
3140, 0, 0, 997, 0, 2876, 0, 1653, 0, 1971, 1356, 0, 0, 0, 0, 0,
2018, 0, 0, 49, 1246, 0, 1727, 1374, 387, 423, 0, 0, 2152, 340, 0, 0,
1941, 0, 2697, 0, 0, 1572, 0, 3487, 0, 0, 0, 0, 0, 1312, 3077, 3754,
1016, 2118, 0, 959, 0, 0, 0, 0, 0, 832, 2142, 0, 3794, 0, 2103, 0,
465, 3473, 0, 0, 2822, 108, 0, 0, 0, 652, 1486, 0, 0, 0, 3783, 1096,
0, 0, 0, 0, 518, 0, 3804, 3532, 0, 0, 0, 0, 0, 0, 32, 0,
0, 2490, 0, 0, 2840, 0, 0, 570, 3538, 3854, 1189, 865, 0, 2906, 0, 0,
762, 1712, 4200, 1566, 2433, 3543, 0, 0, 0, 1809, 0, 546, 0, 28, 469, 0,
1592, 3089, 3759, 0, 501, 0, 504, 0, 0, 0, 0, 1172, 1539, 1052, 0, 0,
0, 0, 0, 4105, 0, 4058, 0, 317, 0, 2761, 0, 0, 0, 0, 1110, 0,
0, 3325, 0, 0, 0, 223, 344, 0, 0, 0, 0, 1625, 0, 3565, 0, 0,
0, 0, 0, 207, 323, 1184, 33, 2705, 2733, 0, 0, 0, 1573, 3287, 0, 0,
30, 714, 0, 3397, 3947, 1800, 0, 2886, 0, 87, 0, 1055, 0, 755, 139, 0,
0, 329, 0, 0, 0, 921, 479, 0, 0, 0, 0, 0, 0, 4014, 0, 2363,
533, 276, 1121, 3121, 0, 2007, 0, 0, 29, 1775, 0, 0, 0, 241, 0, 0,
0, 1858, 0, 0, 0, 831, 0, 251, 1882, 0, 962, 0, 1225, 0, 0, 1683,
3566, 0, 1764, 1507, 760, 0, 0, 1533, 0, 0, 2193, 1002, 4221, 2534, 0, 0,
0, 0, 0, 0, 0, 1171, 578, 3413, 3102, 3894, 393, 0, 4000, 692, 518, 0,
692, 0, 0, 497, 461, 0, 0, 1185, 0, 0, 0, 1950, 876, 0, 0, 1824,
3933, 0, 0, 749, 0, 0, 0, 780, 0, 1022, 0, 0, 245, 418, 0, 3809,
0, 1206, 0, 3772, 4231, 0, 3722, 3418, 427, 2162, 0, 3516, 0, 0, 416, 1189,
0, 712, 3453, 0, 0, 574, 2568, 0, 0, 0, 3669, 0, 0, 1703, 229, 0,
147, 0, 0, 0, 0, 0, 0, 1465, 0, 1673, 0, 0, 0, 1857, 1093, 3473,
2881, 999, 1460, 1150, 0, 0, 420, 0, 4088, 0, 0, 0, 0, 2626, 0, 2421,
158, 0, 3646, 0, 0, 0, 0, 0, 3221, 1618, 2595, 0, 2830, 1596, 0, 0,
0, 194, 1457, 0, 421, 0, 0, 1731, 0, 0, 1871, 0, 0, 0, 2034, 0,
3546, 4161, 0, 0, 0, 904, 2808, 4243, 3237, 0, 3316, 0, 0, 4178, 0, 2333,
4236, 197, 0, 846, 916, 0, 0, 0, 990, 0, 3064, 0, 902, 0, 0, 0,
0, 0, 454, 0, 2139, 949, 0, 342, 0, 0, 2682, 3874, 0, 597, 1535, 0,
0, 0, 0, 0, 0, 3683, 0, 544, 0, 879, 0, 0, 1886, 0, 3077, 2642,
1483, 0, 790, 231, 367, 2173, 2908, 667, 167, 3968, 0, 450, 0, 252, 4002, 0,
0, 439, 1453, 0, 615, 3862, 1246, 1051, 127, 0, 2472, 1841, 1002, 0, 2068, 1244,
2668, 4049, 1566, 0, 0, 1379, 1687, 0, 0, 3175, 0, 4096, 1983, 0, 67, 1212,
554, 198, 1722, 1123, 495, 3354, 0, 0, 1029, 0, 0, 0, 0, 412, 3387, 0,
210, 1604, 0, 1460, 0, 1261, 1812, 3557, 0, 0, 25, 140, 0, 0, 576, 0,
0, 899, 0, 3802, 1148, 779, 0, 4229, 0, 4097, 4154, 1418, 0, 2638, 1923, 0,
0, 2696, 3398, 1581, 0, 0, 0, 0, 567, 0, 3289, 1284, 360, 720, 3921, 0,
0, 4136, 3998, 1292, 3149, 3943, 2738, 3292, 3999, 0, 1626, 0, 800, 355, 3997, 542,
500, 0, 2271, 2729, 3310, 0, 3787, 0, 2469, 0, 1682, 0, 0, 0, 1439, 0,
401, 831, 728, 0, 1352, 0, 2953, 0, 0, 3438, 45, 3500, 3799, 0, 0, 4163,
0, 1661, 2728, 1514, 0, 0, 2265, 2045, 0, 0, 0, 0, 0, 4190, 0, 0,
2586, 0, 0, 0, 0, 0, 3895, 130, 1113, 3703, 4131, 1948, 1625, 1892, 675, 0,
0, 2334, 0, 0, 0, 0, 839, 1165, 0, 0, 1079, 1798, 0, 492, 708, 922,
0, 0, 4204, 817, 949, 0, 623, 704, 0, 866, 0, 1826, 741, 0, 0, 0,
0, 0, 481, 3518, 0, 1175, 3362, 0, 0, 1233, 0, 292, 0, 226, 0, 0,
0, 1759, 0, 0, 0, 986, 0, 1633, 0, 1482, 1589, 0, 0, 2863, 3261, 3633,
0, 0, 0, 0, 3136, 2227, 1211, 0, 0, 0, 2412, 3488, 0, 0, 0, 0,
3848, 1106, 0, 0, 950, 0, 0, 0, 3111, 0, 0, 0, 0, 1906, 0, 0,
162, 975, 3508, 833, 966, 1801, 797, 0, 858, 0, 0, 0, 0, 0, 960, 1148,
0, 0, 798, 0, 0, 0, 0, 1613, 2107, 0, 2034, 307, 1636, 1754, 975, 0,
31, 3672, 0, 1510, 83, 0, 2119, 809, 0, 0, 0, 374, 1584, 1834, 1685, 0,
843, 0, 5, 1919, 0, 2122, 1275, 0, 255, 0, 301, 0, 0, 0, 2028, 3126,
0, 0, 0, 2442, 1243, 0, 0, 1010, 455, 1305, 911, 0, 0, 0, 3866, 3589,
0, 0, 1697, 2063, 0, 0, 0, 1735, 1893, 4164, 0, 0, 368, 0, 659, 690,
3255, 2022, 1296, 710, 0, 1391, 829, 0, 4256, 767, 1645, 1514, 0, 0, 0, 2918,
95, 0, 131, 4274, 0, 0, 0, 1268, 529, 0, 0, 1738, 3307, 0, 1168, 3476,
100, 0, 1337, 1585, 1300, 279, 2413, 0, 196, 2149, 890, 1473, 0, 0, 2594, 0,
0, 0, 0, 2665, 3896, 0, 0, 1081, 0, 1026, 0, 1047, 1481, 2119, 0, 1795,
0, 589, 4294, 0, 651, 0, 2354, 0, 1371, 0, 3827, 0, 2435, 3163, 1259, 896,
3919, 984, 0, 476, 0, 3007, 0, 3874, 1833, 0, 1884, 3958, 976, 0, 736, 0,
0, 0, 1221, 0, 1142, 1729, 0, 0, 2006, 943, 0, 1393, 0, 1033, 0, 3849,
701, 2485, 3083, 0, 0, 3706, 0, 1620, 4260, 3036, 1668, 474, 483, 0, 1552, 1613,
3267, 0, 0, 1196, 0, 3368, 0, 3662, 0, 4105, 0, 0, 0, 376, 685, 0,
0, 0, 0, 0, 0, 0, 137, 1354, 3446, 1364, 0, 382, 0, 0, 208, 0,
0, 3118, 1348, 0, 0, 0, 0, 0, 0, 3948, 1345, 2323, 0, 2979, 364, 2600,
1032, 1145, 0, 0, 0, 1042, 0, 2087, 0, 0, 0, 0, 0, 1960, 0, 0,
518, 2809, 449, 1852, 821, 0, 0, 0, 2262, 2983, 0, 0, 0, 1917, 14, 3669,
0, 131, 1178, 0, 807, 0, 0, 0, 0, 0, 1561, 0, 0, 0, 0, 0,
1250, 0, 1002, 0, 0, 1751, 599, 0, 0, 319, 2602, 0, 302, 2294, 0, 0,
0, 0, 863, 766, 0, 0, 248, 0, 3940, 0, 3614, 682, 0, 0, 0, 0,
0, 2017, 1017, 0, 0, 0, 2374, 2793, 4256, 0, 47, 0, 0, 3956, 0, 0,
0, 1281, 1502, 60, 480, 0, 0, 0, 0, 0, 0, 0, 0, 3853, 0, 4024,
1365, 737, 669, 0, 0, 0, 0, 3147, 0, 4237, 3203, 1386, 616, 3624, 0, 958,
1666, 0, 0, 0, 0, 1825, 1610, 0, 3457, 1548, 3420, 0, 0, 0, 0, 4069,
0, 0, 0, 237, 2232, 0, 0, 0, 88, 0, 0, 2213, 0, 0, 0, 3858,
0, 0, 1168, 3609, 0, 2572, 3271, 0, 740, 3936, 4021, 4152, 1259, 0, 0, 0,
1607, 709, 610, 0, 0, 0, 3138, 4103, 2117, 940, 850, 1623, 0, 0, 29, 0,
0, 0, 0, 2507, 323, 1704, 4098, 1508, 0, 3045, 1677, 1981, 1593, 0, 0, 0,
616, 277, 0, 0, 0, 2232, 297, 1952, 0, 1442, 945, 1239, 990, 0, 0, 0,
0, 0, 0, 2512, 3442, 0, 0, 0, 741, 0, 901, 2265, 1493, 3298, 0, 0,
0, 51, 3920, 0, 1887, 1817, 0, 0, 3239, 0, 818, 0, 0, 0, 0, 0,
2817, 0, 272, 0, 1219, 1341, 1688, 1023, 0, 0, 473, 0, 3879, 774, 0, 0,
3681, 1211, 1006, 3679, 0, 93, 2779, 1852, 3726, 0, 2339, 1371, 0, 4195, 3568, 0,
3735, 54, 0, 496, 0, 1792, 1030, 2925, 778, 3642, 0, 0, 202, 0, 0, 234,
921, 1191, 3859, 0, 3424, 0, 1015, 2246, 0, 684, 0, 3124, 3491, 1865, 421, 1469,
0, 2745, 0, 0, 3093, 1552, 1740, 211, 961, 1130, 3685, 0, 1146, 4212, 0, 1570,
152, 0, 0, 2742, 984, 0, 0, 73, 1174, 0, 0, 0, 0, 2002, 0, 0,
0, 0, 1470, 0, 2833, 0, 0, 0, 1550, 2740, 0, 1287, 1158, 0, 1737, 588,
0, 1020, 0, 1282, 3698, 1996, 0, 1496, 60, 3961, 53, 1013, 0, 533, 0, 908,
0, 966, 294, 2049, 0, 0, 1324, 936, 0, 2746, 0, 858, 0, 392, 0, 1268,
0, 0, 241, 0, 0, 1782, 0, 4052, 0, 1147, 0, 0, 0, 3882, 449, 1390,
1073, 0, 3158, 0, 3564, 1401, 669, 0, 0, 1490, 720, 4190, 0, 0, 0, 810,
1438, 1822, 0, 0, 0, 1128, 2101, 1056, 0, 954, 977, 0, 1779, 0, 0, 0,
0, 0, 1804, 1091, 0, 0, 0, 1271, 3360, 0, 0, 1286, 3857, 3374, 3771, 1129,
496, 0, 295, 0, 2946, 3563, 0, 0, 1235, 0, 480, 1210, 0, 2757, 0, 105,
1662, 0, 3567, 0, 0, 1790, 0, 0, 0, 0, 3403, 1790, 0, 644, 2003, 0,
0, 1152, 0, 0, 1196, 91, 3059, 957, 2004, 774, 1967, 0, 0, 3361, 424, 0,
1880, 1828, 547, 216, 1187, 0, 0, 159, 1423, 320, 1569, 0, 3828, 2447, 0, 1419,
1143, 0, 810, 740, 586, 1061, 287, 1350, 3146, 1362, 1647, 1158, 667, 0, 3642, 3306,
3722, 0, 727, 3969, 1928, 0, 0, 0, 0, 0, 1004, 2027, 0, 1534, 0, 0,
0, 348, 410, 2866, 0, 3938, 3611, 3664, 0, 0, 0, 802, 182, 0, 0, 0,
0, 1031, 3976, 814, 1758, 2542, 0, 845, 2023, 1910, 65, 683, 3618, 3882, 0, 2991,
1567, 1638, 1747, 0, 2114, 3906, 0, 109, 1267, 3172, 856, 943, 1248, 0, 3224, 0,
3140, 3103, 0, 0, 3085, 39, 1531, 3941, 0, 0, 0, 0, 3968, 1940, 0, 883,
1976, 0, 2856, 522, 0, 0, 505, 823, 0, 3144, 3553, 1958, 0, 753, 0, 0,
0, 0, 1080, 129, 795, 0, 190, 3271, 927, 0, 0, 0, 2334, 4151, 2067, 0,
180, 3267, 177, 0, 0, 178, 0, 201, 0, 551, 570, 2797, 3235, 0, 0, 1568,
0, 0, 0, 0, 573, 0, 0, 184, 0, 320, 0, 2260, 0, 234, 104, 0,
2404, 513, 4072, 0, 0, 655, 0, 0, 0, 1494, 1168, 2019, 0, 0, 1317, 0,
2437, 2022, 3790, 0, 0, 0, 1859, 3429, 2032, 0, 0, 4221, 0, 3795, 0, 339,
40, 326, 88, 0, 1988, 1849, 0, 0, 1323, 0, 652, 1165, 0, 94, 0, 287,
2142, 1149, 811, 4173, 467, 0, 0, 1216, 1915, 1266, 0, 1861, 273, 3146, 915, 920,
1991, 0, 950, 222, 2552, 0, 0, 0, 0, 1968, 0, 1290, 1727, 636, 853, 1683,
499, 0, 466, 3054, 3714, 0, 0, 746, 0, 0, 0, 492, 3508, 0, 4033, 0,
0, 0, 0, 849, 334, 0, 0, 939, 1218, 1807, 3700, 2355, 0, 1608, 3026, 1675,
0, 609, 908, 0, 979, 405, 1837, 0, 4055, 1100, 569, 0, 2959, 0, 985, 0,
1097, 2820, 0, 0, 596, 299, 1905, 0, 4198, 0, 869, 2112, 0, 5, 2044, 0,
0, 0, 0, 0, 0, 185, 378, 495, 21, 0, 0, 1682, 847, 1279, 59, 953,
523, 777, 4196, 0, 20, 0, 0, 1711, 525, 2163, 1483, 2658, 1861, 0, 2924, 1380,
0, 1708, 0, 1833, 821, 0, 327, 79, 0, 0, 543, 544, 0, 1463, 0, 0,
175, 0, 527, 790, 0, 0, 0, 0, 0, 2888, 968, 0, 0, 0, 1145, 3306,
0, 155, 0, 2169, 0, 2026, 0, 4272, 784, 2950, 215, 0, 835, 1390, 0, 1592,
0, 0, 0, 2168, 0, 0, 272, 349, 0, 0, 0, 1969, 0, 0, 0, 0,
1272, 36, 0, 899, 0, 0, 0, 928, 0, 0, 586, 0, 2138, 2073, 3615, 485,
162, 0, 0, 0, 4183, 439, 0, 0, 893, 0, 0, 260, 0, 4268, 0, 0,
545, 440, 0, 0, 403, 0, 0, 3711, 95, 1108, 802, 4058, 0, 0, 0, 0,
903, 756, 0, 448, 34, 825, 0, 0, 0, 0, 1526, 0, 1834, 1603, 0, 1244,
1467, 0, 0, 1084, 3192, 0, 0, 2826, 359, 1831, 0, 0, 4247, 2738, 0, 0,
0, 1520, 834, 0, 0, 0, 223, 0, 0, 0, 1787, 158, 3584, 761, 2760, 3628,
0, 1473, 301, 1381, 1003, 0, 3612, 89, 1109, 0, 0, 0, 0, 3593, 0, 0,
898, 0, 1008, 1916, 1259, 0, 3451, 0, 3145, 3447, 0, 3244, 1815, 0, 884, 0,
0, 4093, 451, 271, 2125, 0, 0, 656, 3915, 1922, 1018, 594, 0, 748, 0, 727,
0, 771, 0, 79, 2533, 0, 0, 1544, 86, 0, 388, 1029, 3630, 1564, 352, 301,
3412, 0, 3491, 0, 1104, 0, 530, 1975, 0, 575, 1733, 0, 311, 1401, 2113, 0,
1092, 0, 395, 1447, 988, 0, 3023, 0, 3434, 1354, 1371, 1886, 3119, 0, 1912, 3250,
0, 3425, 0, 3908, 1454, 174, 238, 430, 1992, 1113, 933, 0, 1861, 598, 0, 0,
0, 3217, 554, 2828, 3741, 0, 0, 306, 2999, 23, 0, 800, 2172, 2737, 109, 0,
2175, 0, 3529, 2721, 0, 1979, 0, 3663, 3225, 0, 4105, 0, 0, 849, 0, 0,
1870, 3344, 1532, 4225, 0, 1761, 6, 1868, 1247, 4104, 701, 1707, 0, 0, 1538, 3341,
236, 0, 2774, 429, 0, 0, 304, 0, 3262, 0, 0, 0, 0, 0, 882, 0,
972, 837, 3596, 0, 0, 684, 0, 1408, 0, 0, 3166, 0, 181, 0, 0, 1680,
1951, 132, 1950, 366, 62, 3557, 0, 2449, 0, 1139, 0, 2945, 0, 0, 1486, 972,
2953, 267, 1420, 3718, 33, 0, 503, 0, 0, 2070, 0, 0, 1796, 0, 1995, 0,
1230, 1156, 1710, 2328, 2012, 143, 2394, 1276, 2091, 3588, 0, 0, 316, 2541, 1047, 1236,
2116, 1031, 0, 1652, 1167, 879, 3090, 0, 0, 47, 1254, 2003, 0, 33, 1693, 1504,
0, 0, 0, 224, 0, 1073, 0, 2990, 1367, 554, 0, 974, 0, 0, 731, 1743,
0, 0, 3548, 0, 164, 4268, 0, 0, 85, 0, 1998, 0, 3546, 0, 0, 354,
0, 0, 1561, 2062, 488, 2489, 1045, 887, 1519, 266, 2712, 531, 4284, 1369, 0, 1832,
0, 2146, 0, 0, 775, 0, 0, 2867, 809, 1315, 0, 0, 435, 343, 0, 1794,
3024, 2360, 0, 0, 997, 1450, 2822, 250, 3980, 1223, 2877, 1040, 244, 1264, 955, 867,
4193, 1231, 0, 836, 356, 1639, 0, 0, 625, 0, 0, 2284, 1518, 310, 4057, 2115,
550, 0, 295, 4104, 2154, 0, 1141, 0, 175, 0, 0, 0, 1924, 462, 2812, 0,
1482, 0, 0, 0, 0, 0, 987, 0, 4296, 0, 0, 0, 3501, 1505, 0, 0,
0, 0, 210, 0, 149, 0, 0, 0, 0, 0, 1230, 2081, 1086, 0, 1753, 926,
0, 1846, 0, 1138, 4209, 3267, 0, 0, 0, 1354, 0, 1859, 0, 144, 4125, 613,
0, 3857, 3142, 0, 307, 608, 8, 3549, 2888, 0, 0, 0, 0, 0, 2009, 1089,
0, 3943, 0, 1982, 2961, 0, 1288, 4156, 1966, 160, 516, 3548, 3731, 2207, 216, 1960,
1064, 0, 0, 707, 3623, 414, 2207, 770, 0, 141, 2011, 263, 1848, 393, 0, 1472,
0, 1463, 1411, 16, 3901, 0, 1630, 671, 2254, 648, 0, 884, 4126, 2, 0, 2902,
1478, 0, 1458, 2412, 1051, 1016, 333, 872, 2687, 1313, 2058, 1146, 1795, 1066, 0, 3527,
1861, 0, 379, 77, 3717, 3484, 0, 3493, 52, 0, 0, 0, 0, 0, 810, 0,
0, 24, 0, 1909, 1405, 0, 0, 2121, 0, 0, 0, 0, 4279, 601, 3212, 0,
859, 1298, 724, 1485, 703, 3662, 0, 0, 2159, 1264, 807, 1301, 3799, 1820, 1646, 3401,
0, 1630, 111, 0, 158, 0, 1502, 3142, 0, 1955, 3783, 723, 2998, 0, 70, 2821,
0, 0, 0, 0, 3470, 3050, 2176, 0, 0, 0, 1096, 0, 2004, 0, 86, 0,
0, 2262, 0, 904, 0, 488, 0, 0, 4006, 4292, 3017, 122, 0, 383, 2770, 0,
0, 0, 0, 1651, 0, 168, 0, 3861, 2733, 0, 861, 0, 0, 1859, 645, 320,
104, 2717, 1175, 572, 938, 1406, 0, 0, 338, 0, 283, 1269, 0, 1889, 0, 1011,
3728, 1126, 0, 3136, 0, 437, 351, 0, 1912, 0, 0, 1311, 1978, 1612, 0, 880,
226, 1600, 1290, 187, 677, 0, 110, 0, 0, 323, 156, 949, 0, 199, 0, 2093,
2085, 0, 1883, 1723, 0, 0, 419, 2473, 1203, 1024, 0, 1019, 3789, 987, 0, 0,
0, 1321, 1858, 1936, 0, 0, 0, 0, 0, 0, 477, 0, 3464, 1162, 316, 459,
3148, 0, 1319, 3120, 947, 2776, 0, 3878, 3439, 1141, 2994, 0, 1400, 0, 0, 2570,
0, 3899, 1120, 0, 964, 0, 1988, 0, 3432, 0, 3582, 1111, 0, 1065, 3850, 0,
2611, 3598, 472, 0, 0, 1396, 1243, 0, 4152, 846, 0, 724, 659, 418, 0, 4274,
0, 1353, 1902, 1950, 957, 0, 0, 0, 613, 4195, 3216, 0, 1060, 107, 417, 1383,
369, 1206, 1455, 4262, 0, 0, 0, 247, 170, 2866, 0, 782, 629, 0, 0, 1333,
0, 1696, 1209, 0, 0, 3030, 0, 1309, 4252, 107, 0, 563, 0, 629, 176, 0,
0, 1963, 0, 0, 0, 508, 0, 558, 1961, 0, 2820, 2470, 0, 0, 3091, 1404,
0, 1061, 78, 1136, 0, 493, 2350, 1398, 0, 53, 1188, 0, 48, 0, 1217, 604,
0, 0, 0, 480, 0, 346, 2820, 1842, 0, 0, 0, 0, 502, 354, 0, 2171,
1665, 198, 0, 0, 1164, 0, 0, 0, 524, 1201, 3418, 1445, 0, 0, 2126, 0,
959, 1131, 2808, 1851, 0, 560, 0, 2784, 573, 0, 2166, 1252, 2794, 3354, 0, 2735,
3860, 452, 1693, 0, 0, 4158, 3764, 1330, 3464, 0, 1527, 937, 0, 4033, 2729, 727,
1183, 0, 0, 171, 1922, 963, 0, 146, 4152, 0, 96, 3896, 0, 0, 0, 155,
1658, 0, 1855, 1609, 0, 1825, 0, 872, 3978, 3383, 0, 2136, 4289, 0, 1088, 0,
395, 616, 0, 550, 0, 191, 1877, 1268, 612, 0, 0, 3707, 808, 0, 0, 1071,
431, 0, 1088, 0, 0, 1024, 1973, 895, 2990, 479, 1098, 203, 1757, 0, 0, 2687,
2622, 0, 2164, 713, 954, 1501, 3126, 0, 0, 0, 0, 1709, 1105, 3678, 0, 0,
2151, 0, 1293, 0, 218, 0, 2016, 2091, 233, 3943, 3278, 1835, 0, 0, 0, 650,
0, 0, 0, 0, 0, 0, 0, 1624, 648, 0, 1533, 819, 3946, 0, 649, 226,
463, 732, 830, 1932, 0, 0, 854, 2282, 0, 960, 362, 1844, 355, 583, 884, 937,
1885, 1377, 787, 568, 1813, 0, 453, 0, 1134, 0, 3745, 468, 4097, 0, 1870, 3397,
1505, 3660, 0, 0, 0, 0, 773, 571, 994, 0, 618, 103, 1441, 0, 0, 0,
0, 0, 0, 546, 2025, 1829, 1545, 5, 1131, 1632, 2042, 0, 0, 1810, 0, 395,
3188, 0, 995, 1891, 0, 0, 4219, 165, 3056, 0, 0, 1725, 1416, 0, 0, 501,
0, 363, 3942, 0, 1933, 122, 1259, 3525, 25, 0, 1419, 0, 0, 0, 2787, 1130,
1430, 2227, 2615, 0, 0, 0, 3811, 2433, 1221, 0, 3332, 2829, 159, 1621, 0, 0,
385, 1517, 958, 7, 164, 687, 0, 0, 0, 1298, 0, 1449, 2700, 378, 0, 1811,
2251, 3993, 2366, 0, 3730, 3629, 2831, 0, 0, 3928, 502, 1958, 0, 2561, 1684, 0,
1720, 3133, 0, 0, 1255, 1057, 0, 1449, 0, 2331, 0, 1422, 0, 0, 0, 1158,
1803, 0, 0, 11, 0, 0, 2109, 0, 412, 704, 0, 1633, 3455, 0, 637, 620,
0, 796, 409, 1770, 1755, 0, 0, 600, 0, 1389, 1434, 2979, 423, 2460, 940, 2174,
546, 0, 65, 0, 486, 1528, 0, 735, 213, 1208, 0, 0, 0, 1706, 1752, 0,
352, 1370, 1747, 0, 0, 0, 1720, 0, 0, 256, 138, 2077, 0, 563, 0, 591,
321, 0, 0, 1823, 0, 3985, 1553, 1047, 487, 0, 3850, 1939, 1180, 4206, 0, 0,
0, 722, 4205, 2001, 318, 769, 0, 3905, 1873};
int MangledHashG(const char *key, const int *T)
{
int sum = 0;
for (int i = 0; key[i] != '\0'; i++)
{
sum += T[i] * key[i];
sum %= 4297;
}
return mangledkG[sum];
}
int MangledPerfectHash(const char *key)
{
if (strlen(key) > 40)
return 0;
return (MangledHashG(key, mangledkT1) + MangledHashG(key, mangledkT2)) % 4297;
}
constexpr int unmangledkT1[] = {127, 281, 170, 251, 345, 384, 143, 321, 123, 282, 387, 196, 77,
344, 162, 151, 197, 348, 63, 317, 298, 29, 340, 285, 150, 329};
constexpr int unmangledkT2[] = {65, 272, 162, 165, 165, 71, 29, 126, 162, 56, 87, 72, 1,
273, 168, 175, 126, 222, 286, 70, 183, 67, 59, 246, 18, 78};
constexpr int unmangledkG[] = {
0, 0, 283, 288, 0, 0, 221, 113, 0, 0, 0, 22, 0, 186, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 43, 293, 0, 269, 187, 196, 96, 112, 23, 0, 281, 18,
65, 0, 0, 0, 0, 0, 0, 363, 343, 0, 0, 0, 346, 72, 0, 0, 0, 0, 0,
0, 60, 0, 0, 0, 58, 0, 17, 75, 0, 369, 0, 241, 332, 245, 0, 345, 0, 0,
0, 0, 0, 325, 0, 149, 0, 72, 0, 329, 323, 0, 0, 95, 0, 99, 61, 197, 101,
0, 0, 0, 215, 0, 0, 150, 141, 0, 0, 317, 0, 39, 0, 0, 162, 0, 0, 327,
295, 0, 0, 0, 101, 0, 238, 127, 197, 12, 0, 351, 0, 0, 257, 0, 36, 332, 24,
4, 359, 0, 244, 0, 94, 261, 14, 86, 359, 381, 0, 0, 0, 81, 0, 206, 158, 0,
0, 0, 15, 144, 0, 327, 146, 41, 355, 139, 213, 11, 28, 0, 113, 6, 0, 158, 0,
0, 269, 0, 0, 52, 192, 170, 170, 66, 86, 0, 125, 0, 0, 230, 0, 0, 80, 57,
5, 8, 0, 0, 0, 232, 370, 285, 7, 168, 248, 242, 0, 69, 0, 0, 0, 0, 294,
0, 213, 1, 0, 0, 0, 121, 184, 0, 157, 0, 67, 0, 329, 0, 0, 0, 6, 0,
0, 311, 207, 0, 97, 187, 0, 0, 222, 343, 0, 49, 0, 113, 11, 44, 124, 6, 201,
288, 147, 270, 0, 0, 0, 214, 155, 165, 60, 0, 0, 0, 0, 45, 90, 0, 221, 55,
175, 0, 0, 136, 0, 194, 372, 0, 0, 0, 56, 58, 65, 0, 0, 236, 308, 259, 0,
0, 0, 64, 0, 0, 0, 0, 206, 0, 279, 0, 0, 0, 128, 0, 140, 0, 110, 0,
0, 96, 119, 89, 0, 154, 32, 257, 193, 203, 15, 0, 0, 212, 193, 0, 0, 119, 104,
0, 193, 0, 64, 274, 0, 167, 0, 0, 117, 0, 361, 85, 104, 79, 227, 0, 175, 208,
302, 148, 0, 0, 268, 282, 0, 0, 251, 114, 0, 110, 29, 0, 45, 59, 55, 148, 0,
0, 10, 214, 44, 70, 134, 209, 0, 92, 0, 96, 252, 355, 0, 66, 0, 168, 353, 0,
0, 274, 197, 76, 0, 117, 172, 322};
int UnmangledHashG(const char *key, const int *T)
{
int sum = 0;
for (int i = 0; key[i] != '\0'; i++)
{
sum += T[i] * key[i];
sum %= 388;
}
return unmangledkG[sum];
}
int UnmangledPerfectHash(const char *key)
{
if (strlen(key) > 26)
return 0;
return (UnmangledHashG(key, unmangledkT1) + UnmangledHashG(key, unmangledkT2)) % 388;
}
} // namespace
namespace sh
{
template <>
const size_t ImmutableString::FowlerNollVoHash<4>::kFnvPrime = 16777619u;
template <>
const size_t ImmutableString::FowlerNollVoHash<4>::kFnvOffsetBasis = 0x811c9dc5u;
template <>
const size_t ImmutableString::FowlerNollVoHash<8>::kFnvPrime =
static_cast<size_t>(1099511628211ull);
template <>
const size_t ImmutableString::FowlerNollVoHash<8>::kFnvOffsetBasis =
static_cast<size_t>(0xcbf29ce484222325ull);
uint32_t ImmutableString::mangledNameHash() const
{
return MangledPerfectHash(data());
}
uint32_t ImmutableString::unmangledNameHash() const
{
return UnmangledPerfectHash(data());
}
} // namespace sh