Branch :
// GENERATED FILE - DO NOT EDIT.
// Generated by gen_builtin_symbols.py using data from builtin_variables.json and
// builtin_function_declarations.txt.
//
// Copyright 2019 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[] = {2719, 2955, 3884, 1726, 3262, 1871, 1439, 3101, 2584, 1304,
2473, 443, 3851, 132, 300, 2929, 3304, 3930, 1779, 3960,
2114, 1454, 2489, 1923, 1745, 972, 1092, 2973, 152, 822,
1230, 1001, 1930, 4008, 2050, 1350, 758};
constexpr int mangledkT2[] = {383, 1244, 2085, 3708, 251, 2282, 2314, 3643, 1561, 1995,
2797, 953, 2676, 1891, 1011, 1052, 2494, 2853, 1193, 1625,
4065, 1572, 3492, 1910, 4194, 4013, 546, 2118, 14, 929,
2264, 3644, 1570, 1400, 1304, 3634, 2163};
constexpr int mangledkG[] = {
0, 0, 0, 0, 0, 0, 0, 0, 3926, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2146, 0,
0, 0, 0, 0, 0, 2678, 0, 0, 0, 0, 0, 15, 0, 1063, 0, 0,
0, 0, 0, 2530, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3799, 0,
0, 0, 0, 0, 0, 3221, 3061, 1661, 0, 0, 0, 0, 0, 0, 0, 2529,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3657, 0, 188, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 338, 0, 1270, 0, 0, 2040, 0, 0,
1910, 0, 4154, 0, 0, 0, 0, 1859, 0, 0, 1758, 0, 0, 0, 3306, 0,
0, 2755, 0, 0, 0, 0, 0, 0, 504, 0, 0, 0, 0, 0, 0, 3818,
244, 0, 1353, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 2786, 0, 2047, 0, 556, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 1431, 0, 0, 3740, 0, 0, 78, 0, 2694,
0, 923, 0, 0, 0, 0, 0, 960, 1327, 0, 0, 0, 0, 0, 0, 0,
0, 633, 2581, 0, 2612, 0, 0, 366, 3236, 0, 0, 0, 0, 1640, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3910, 694, 3979, 0, 0, 268,
3802, 0, 0, 2900, 0, 2145, 0, 0, 1062, 0, 0, 518, 0, 0, 0, 0,
0, 0, 3990, 0, 0, 0, 1188, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3789, 0, 0, 1447, 0, 1955, 1174, 0, 0, 0, 2940, 2811, 593, 0, 0, 2477,
0, 677, 0, 0, 1756, 0, 0, 429, 0, 0, 0, 0, 1560, 0, 0, 0,
1289, 0, 0, 0, 0, 2167, 2850, 0, 0, 0, 877, 0, 1978, 0, 0, 0,
0, 0, 0, 0, 0, 0, 1750, 0, 0, 0, 847, 0, 0, 0, 634, 0,
0, 0, 0, 0, 0, 0, 148, 0, 2442, 3012, 0, 3889, 3525, 0, 0, 0,
0, 2078, 0, 0, 3687, 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 0,
253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 1738, 0,
0, 0, 0, 2796, 169, 0, 11, 2179, 0, 3234, 0, 0, 0, 0, 0, 368,
742, 0, 0, 911, 0, 0, 986, 0, 0, 1758, 0, 0, 899, 2142, 0, 0,
0, 0, 0, 387, 0, 1528, 0, 0, 141, 0, 0, 2132, 0, 3603, 0, 0,
0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 1440, 668, 0, 351, 0, 619,
0, 0, 2439, 3012, 0, 3914, 0, 0, 0, 0, 0, 4063, 0, 1732, 0, 0,
0, 0, 0, 1045, 0, 0, 0, 2136, 0, 0, 4154, 0, 0, 0, 0, 0,
0, 4101, 0, 1479, 0, 831, 3082, 834, 0, 0, 0, 1963, 0, 33, 316, 2098,
2847, 1715, 0, 0, 0, 1197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305,
0, 3994, 0, 307, 0, 0, 0, 0, 2827, 998, 0, 0, 0, 0, 3390, 536,
961, 1033, 0, 0, 0, 0, 0, 749, 227, 1715, 4104, 1944, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 3763, 0, 0, 0, 2450, 3015, 0, 0, 0,
1442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 617, 0, 0, 0, 0,
1744, 0, 1931, 0, 0, 0, 0, 0, 0, 0, 146, 0, 2120, 0, 0, 555,
0, 0, 0, 534, 2107, 2292, 829, 0, 0, 0, 241, 419, 3799, 0, 35, 0,
0, 0, 0, 0, 2013, 0, 1065, 0, 0, 0, 0, 0, 0, 0, 0, 1703,
0, 0, 785, 0, 3489, 0, 0, 0, 1551, 0, 0, 0, 0, 0, 0, 0,
502, 0, 3011, 0, 3005, 2780, 0, 405, 0, 0, 3022, 744, 0, 2807, 0, 2861,
4184, 3067, 1952, 0, 0, 0, 0, 3558, 2525, 2628, 0, 1052, 0, 2785, 0, 0,
3516, 0, 0, 0, 0, 0, 522, 2369, 2169, 0, 3285, 0, 0, 0, 3711, 0,
973, 1768, 1750, 0, 3573, 1934, 0, 927, 0, 750, 1952, 0, 548, 0, 781, 1343,
0, 1862, 0, 0, 0, 0, 0, 898, 0, 1184, 0, 0, 0, 0, 1580, 2245,
0, 3966, 0, 2764, 0, 2642, 0, 0, 3176, 0, 0, 0, 1937, 0, 0, 1497,
4051, 3352, 0, 0, 1698, 859, 961, 1237, 2570, 3024, 0, 0, 0, 2091, 0, 635,
3109, 3297, 0, 1259, 0, 1132, 0, 733, 3472, 0, 2044, 0, 2667, 0, 0, 315,
0, 0, 526, 0, 586, 194, 0, 0, 0, 0, 0, 2067, 4078, 3243, 0, 3157,
0, 0, 0, 3852, 252, 0, 412, 0, 0, 0, 0, 1060, 0, 0, 1068, 2310,
0, 0, 0, 3588, 0, 0, 715, 0, 1361, 0, 0, 0, 1983, 0, 638, 0,
0, 1936, 2162, 671, 0, 427, 216, 4108, 0, 3513, 1635, 632, 1518, 611, 4195, 1168,
0, 0, 0, 2317, 0, 0, 3903, 3840, 0, 0, 0, 0, 4068, 0, 0, 0,
0, 0, 1118, 2737, 0, 0, 0, 2641, 512, 0, 0, 0, 0, 0, 0, 0,
0, 2537, 0, 1000, 519, 2026, 0, 3920, 0, 4037, 0, 3275, 0, 0, 0, 919,
0, 1016, 0, 0, 586, 4137, 0, 1283, 0, 0, 0, 2547, 0, 0, 3614, 0,
0, 0, 0, 0, 0, 0, 2661, 0, 0, 0, 681, 0, 0, 0, 34, 0,
3298, 0, 0, 0, 0, 4114, 523, 951, 405, 2961, 0, 0, 614, 443, 0, 780,
0, 0, 426, 1827, 0, 0, 0, 1334, 0, 0, 0, 0, 0, 182, 3585, 0,
0, 0, 3137, 297, 0, 0, 0, 1558, 3435, 0, 0, 0, 0, 0, 1607, 0,
3748, 320, 2186, 3194, 0, 734, 1474, 163, 1705, 0, 0, 1954, 0, 0, 2882, 3153,
1352, 0, 0, 435, 0, 0, 0, 0, 2332, 0, 0, 0, 0, 762, 131, 0,
0, 0, 0, 223, 0, 0, 4047, 0, 1088, 0, 0, 0, 0, 0, 0, 0,
0, 3220, 0, 1535, 0, 0, 0, 2917, 0, 290, 1873, 0, 0, 0, 388, 3031,
1272, 978, 0, 0, 0, 0, 0, 0, 0, 574, 2662, 0, 165, 0, 2100, 0,
1943, 0, 3604, 1663, 745, 3807, 224, 401, 0, 0, 0, 0, 0, 0, 3406, 1127,
0, 0, 0, 1149, 2423, 0, 495, 0, 688, 0, 3544, 0, 0, 0, 1627, 0,
0, 0, 0, 0, 2057, 0, 3379, 19, 2744, 0, 0, 0, 0, 0, 1316, 409,
1243, 0, 0, 0, 1050, 1302, 548, 0, 0, 0, 0, 2046, 0, 0, 0, 0,
1579, 0, 0, 0, 787, 1722, 1415, 0, 0, 0, 1528, 919, 0, 0, 516, 0,
3063, 2254, 0, 0, 1573, 0, 376, 0, 0, 0, 0, 0, 27, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 4111, 1475, 0, 0, 0, 0, 0, 518,
0, 1435, 0, 3053, 0, 765, 0, 1088, 2966, 525, 0, 0, 0, 0, 0, 1301,
3265, 0, 0, 919, 0, 0, 0, 0, 0, 0, 0, 2215, 3413, 0, 0, 0,
0, 1326, 1071, 0, 0, 1429, 0, 0, 4015, 2036, 1105, 0, 0, 0, 478, 1296,
0, 1669, 162, 3002, 3028, 0, 0, 1518, 2042, 705, 0, 0, 2602, 0, 0, 0,
0, 0, 2062, 2834, 0, 0, 581, 3053, 0, 0, 3624, 0, 0, 3854, 0, 0,
0, 0, 0, 1132, 0, 4104, 0, 0, 1272, 0, 0, 197, 0, 1224, 0, 0,
723, 0, 0, 0, 0, 0, 617, 0, 0, 3745, 0, 1219, 3585, 0, 0, 0,
0, 0, 3781, 0, 0, 0, 0, 3223, 45, 0, 0, 0, 0, 876, 0, 334,
732, 1608, 0, 0, 0, 553, 2825, 2838, 1965, 0, 0, 0, 251, 469, 3114, 1427,
3612, 0, 0, 432, 0, 558, 926, 0, 58, 2450, 0, 2196, 0, 3898, 3456, 0,
1459, 2827, 0, 4188, 0, 0, 1206, 0, 0, 2311, 27, 0, 0, 0, 0, 2637,
823, 4143, 249, 0, 1413, 0, 38, 2359, 0, 0, 0, 747, 1177, 1563, 0, 0,
3804, 758, 0, 0, 3389, 0, 979, 0, 0, 3761, 866, 5, 0, 1812, 0, 1079,
0, 0, 0, 2714, 0, 44, 0, 0, 0, 0, 1568, 3865, 3655, 0, 2143, 476,
1138, 1285, 3533, 3928, 3874, 3491, 3941, 0, 1018, 0, 382, 0, 3893, 1198, 1627, 0,
0, 0, 0, 695, 2610, 1474, 876, 0, 0, 2004, 0, 0, 1739, 3777, 1274, 1526,
0, 2375, 0, 0, 0, 0, 0, 3835, 0, 745, 3854, 3723, 602, 0, 439, 0,
1853, 0, 0, 0, 2104, 4081, 1038, 4109, 0, 3838, 776, 0, 4064, 1222, 0, 0,
0, 2158, 416, 358, 1123, 0, 3376, 2878, 857, 0, 0, 0, 0, 3025, 3314, 0,
0, 0, 2040, 0, 0, 0, 0, 505, 3939, 0, 0, 0, 1445, 7, 328, 0,
0, 0, 0, 242, 0, 3779, 0, 0, 3117, 1432, 0, 0, 0, 1274, 4079, 1656,
0, 0, 0, 0, 0, 1104, 1772, 1358, 0, 0, 0, 0, 4168, 3799, 3833, 105,
0, 2404, 444, 0, 885, 3650, 4010, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 3313, 0, 0, 906, 3358, 390, 110, 0, 0, 0, 915, 1803, 2653, 3402, 0,
2506, 0, 2510, 855, 474, 0, 1452, 1407, 628, 1782, 0, 0, 2019, 0, 0, 1105,
3584, 0, 3382, 0, 0, 1851, 814, 829, 1314, 0, 28, 570, 0, 0, 744, 162,
0, 0, 3777, 2924, 0, 0, 1754, 3382, 4195, 0, 3455, 824, 0, 0, 2007, 816,
1685, 1659, 913, 627, 6, 0, 0, 0, 0, 0, 0, 3311, 0, 2226, 0, 1774,
1147, 0, 459, 1272, 0, 0, 3962, 0, 1434, 303, 0, 1549, 0, 74, 0, 0,
0, 1438, 179, 0, 4087, 997, 0, 0, 3727, 2113, 1043, 0, 1008, 0, 0, 0,
605, 2444, 2987, 0, 1442, 0, 3972, 0, 226, 622, 890, 482, 1073, 1732, 0, 0,
1196, 2616, 3697, 0, 0, 0, 0, 3306, 0, 1801, 0, 0, 0, 0, 924, 2621,
2080, 0, 0, 0, 0, 1746, 594, 3712, 0, 0, 0, 0, 3668, 1035, 4043, 1569,
451, 1747, 1196, 0, 3921, 2483, 0, 2903, 1849, 643, 0, 4044, 0, 1673, 0, 0,
0, 2021, 0, 1762, 1908, 3862, 929, 1651, 0, 0, 420, 0, 0, 1714, 0, 1330,
1334, 0, 1346, 1002, 0, 952, 1631, 1549, 3407, 773, 1015, 0, 1664, 825, 941, 0,
0, 20, 0, 3592, 225, 750, 0, 154, 2959, 0, 2211, 3384, 0, 0, 3041, 1241,
1790, 198, 0, 1516, 1750, 3752, 0, 282, 172, 0, 0, 0, 3333, 1015, 0, 388,
1798, 0, 0, 259, 0, 0, 0, 1991, 321, 0, 1334, 763, 347, 0, 479, 0,
1836, 0, 0, 1337, 1130, 0, 3703, 1825, 0, 3687, 0, 1710, 0, 543, 0, 3443,
0, 4052, 0, 0, 154, 78, 0, 0, 2518, 3070, 1731, 0, 0, 2256, 1372, 2683,
100, 1797, 2604, 1508, 0, 0, 0, 2043, 0, 0, 3679, 2695, 0, 0, 0, 1648,
2445, 3159, 356, 0, 1942, 0, 0, 3781, 480, 0, 0, 986, 3449, 1528, 1358, 3104,
1247, 0, 0, 0, 0, 0, 1390, 638, 0, 1021, 1910, 0, 2553, 0, 442, 2002,
0, 600, 0, 0, 0, 0, 1784, 715, 0, 1622, 0, 619, 0, 0, 0, 0,
3801, 1909, 3053, 1929, 0, 0, 0, 1181, 0, 3039, 174, 4101, 0, 4187, 0, 0,
0, 201, 928, 1451, 3063, 0, 2909, 736, 0, 0, 0, 0, 193, 673, 0, 3843,
1042, 0, 2823, 0, 3185, 2065, 4013, 3793, 242, 183, 3343, 1603, 2083, 1143, 1284, 0,
320, 7, 805, 0, 0, 1923, 1403, 0, 865, 0, 1087, 539, 0, 3242, 0, 0,
3031, 0, 0, 1317, 2788, 2268, 3913, 0, 447, 0, 0, 3307, 0, 0, 0, 0,
1970, 1103, 0, 1950, 0, 0, 0, 404, 0, 0, 0, 0, 0, 368, 0, 771,
4074, 1521, 1930, 0, 1, 1509, 0, 0, 0, 397, 588, 1660, 1151, 2283, 0, 0,
1328, 1911, 0, 0, 2914, 417, 689, 3907, 1629, 0, 464, 2921, 0, 0, 1200, 0,
0, 3467, 750, 1383, 2616, 0, 419, 0, 1312, 0, 0, 3524, 3983, 0, 0, 0,
0, 2055, 3857, 3587, 0, 0, 2066, 721, 4124, 0, 4095, 1230, 0, 0, 2603, 0,
518, 50, 1788, 1304, 0, 205, 3732, 0, 0, 1913, 0, 0, 1747, 3574, 258, 0,
0, 1848, 2906, 3944, 986, 2330, 0, 1715, 0, 0, 2668, 3448, 1192, 0, 0, 3960,
104, 1592, 1340, 0, 0, 575, 2508, 0, 0, 1035, 0, 2222, 2563, 0, 0, 937,
0, 1787, 2081, 0, 450, 2009, 125, 1555, 0, 0, 0, 0, 0, 2529, 955, 3982,
274, 0, 1748, 482, 1113, 11, 3428, 885, 0, 3706, 844, 1287, 0, 0, 96, 3318,
0, 1882, 0, 0, 3255, 3328, 1893, 0, 0, 170, 2122, 907, 1307, 1042, 1776, 2044,
0, 0, 0, 0, 1880, 1420, 3132, 2939, 1222, 0, 0, 321, 0, 318, 84, 3420,
0, 0, 1232, 1366, 4134, 0, 877, 0, 0, 99, 674, 1784, 0, 0, 0, 0,
692, 0, 0, 0, 1907, 2239, 365, 170, 0, 0, 0, 0, 2134, 2251, 2117, 1532,
0, 3192, 0, 0, 0, 898, 2221, 3837, 0, 1850, 0, 1420, 3573, 939, 0, 2406,
0, 735, 3200, 1262, 2733, 0, 1629, 1465, 0, 1126, 0, 0, 4042, 3701, 1614, 3195,
0, 1845, 1416, 0, 1902, 0, 0, 1759, 2813, 101, 261, 2218, 3195, 1354, 0, 868,
0, 0, 2234, 2076, 75, 0, 869, 0, 0, 3068, 0, 2099, 0, 0, 1747, 0,
0, 0, 0, 472, 0, 0, 2967, 0, 954, 524, 2202, 0, 0, 639, 0, 0,
3790, 3763, 0, 3045, 0, 0, 0, 1964, 746, 487, 422, 0, 1466, 0, 4171, 1473,
88, 1501, 21, 1093, 0, 0, 3594, 1226, 999, 46, 2620, 0, 4196, 0, 0, 0,
3491, 1487, 626, 3800, 0, 1017, 3361, 1074, 0, 2749, 0, 0, 3239, 1122, 952, 122,
0, 793, 3861, 1472, 0, 0, 112, 746, 0, 0, 0, 0, 0, 0, 0, 0,
0, 394, 301, 0, 3940, 926, 0, 325, 1708, 1552, 2796, 1202, 3744, 237, 1880, 0,
0, 1976, 0, 2184, 188, 217, 2117, 3513, 2334, 802, 3437, 0, 566, 3375, 672, 0,
1107, 3042, 1090, 0, 0, 0, 0, 0, 615, 0, 1504, 0, 1539, 0, 0, 3988,
1948, 3805, 0, 242, 3649, 1681, 0, 0, 877, 1782, 1453, 1514, 0, 3056, 1964, 0,
0, 0, 1137, 0, 0, 641, 1094, 2141, 0, 4004, 1042, 437, 0, 2200, 1239, 3848,
337, 1011, 0, 1301, 22, 0, 0, 0, 3518, 3747, 0, 1675, 3868, 1620, 0, 3313,
3375, 0, 0, 169, 2648, 0, 0, 0, 534, 0, 2393, 0, 1708, 0, 0, 1543,
4017, 849, 4082, 3179, 2992, 0, 0, 790, 0, 0, 0, 240, 0, 1590, 3946, 0,
0, 901, 0, 0, 1072, 0, 0, 4082, 0, 580, 2673, 1521, 3817, 0, 0, 0,
2124, 0, 4099, 0, 2127, 1834, 1354, 4081, 0, 0, 718, 1699, 0, 3752, 0, 3418,
0, 0, 0, 0, 89, 1371, 0, 3211, 0, 0, 0, 0, 0, 3291, 3936, 0,
655, 0, 1690, 0, 2957, 3665, 1797, 260, 0, 0, 0, 0, 1460, 0, 0, 2545,
4035, 0, 1079, 0, 3927, 2264, 808, 408, 1743, 1647, 437, 103, 0, 0, 0, 91,
44, 2086, 1969, 0, 0, 0, 3659, 1685, 1853, 715, 0, 0, 0, 0, 0, 3729,
2033, 0, 3103, 0, 968, 507, 3254, 0, 395, 0, 0, 713, 0, 0, 0, 0,
443, 1615, 188, 1073, 0, 2244, 2942, 3028, 393, 0, 1887, 3154, 1267, 147, 0, 732,
1294, 3746, 0, 0, 1804, 456, 203, 560, 3839, 0, 0, 0, 1111, 0, 296, 1895,
0, 0, 0, 1403, 211, 1343, 0, 0, 811, 2599, 0, 389, 113, 0, 2006, 0,
3570, 0, 0, 1524, 0, 0, 2100, 541, 0, 1118, 4012, 1427, 548, 0, 0, 0,
980, 3603, 0, 3076, 314, 0, 0, 0, 0, 1265, 0, 1527, 3779, 0, 1568, 3960,
0, 2924, 0, 923, 181, 0, 1236, 1315, 1287, 0, 3548, 2919, 1517, 0, 1968, 0,
0, 0, 0, 0, 0, 0, 1257, 0, 0, 945, 1365, 0, 191, 2323, 1969, 150,
1569, 0, 505, 0, 218, 0, 0, 0, 0, 0, 1132, 917, 0, 3405, 0, 0,
0, 0, 2460, 607, 787, 1367, 0, 298, 0, 0, 0, 3058, 636, 1333, 1958, 2745,
0, 0, 0, 0, 361, 487, 0, 0, 1404, 0, 0, 0, 92, 979, 2156, 0,
0, 1870, 3330, 0, 1056, 0, 851, 4167, 0, 0, 0, 2671, 0, 4153, 4094, 583,
0, 1196, 3386, 1149, 757, 0, 3577, 58, 3160, 0, 152, 4120, 1014, 1857, 0, 0,
0, 0, 0, 565, 0, 2257, 1844, 0, 0, 0, 3895, 4008, 0, 2090, 189, 0,
2126, 0, 0, 0, 0, 0, 699, 340, 0, 0, 3468, 0, 2560, 0, 3039, 345,
1407, 535, 1182, 1582, 0, 1980, 622, 1096, 1242, 2743, 0, 3728, 0, 0, 0, 862,
1890, 725, 1525, 1353, 391, 2963, 1533, 3669, 539, 683, 0, 3722, 0, 0, 0, 0,
1210, 3635, 3621, 3379, 235, 2850, 0, 0, 0, 1244, 0, 0, 0, 202, 31, 1214,
3943, 0, 0, 3683, 0, 1623, 0, 1689, 0, 2290, 379, 646, 0, 0, 0, 0,
0, 1334, 0, 0, 356, 488, 811, 0, 821, 0, 0, 1957, 0, 0, 0, 0,
894, 0, 0, 0, 0, 1563, 863, 0, 2492, 260, 0, 3471, 294, 369, 1786, 0,
3652, 2809, 3063, 2078, 1703, 0, 439, 703, 269, 1573, 0, 3936, 835, 478, 853, 0,
0, 3400, 2005, 591, 0, 1621, 0, 1618, 0, 941, 0, 0, 1463, 2648, 0, 1725,
0, 0, 0, 4124, 0, 158, 1095, 0, 2774, 1117, 0, 238, 0, 0, 193, 1669,
1883, 1629, 0, 1053, 3724, 2544, 0, 0, 0, 2303, 0, 1179, 593, 0, 1764, 3298,
0, 1467, 2817, 1379, 226, 1045, 0, 0, 2258, 101, 3834, 0, 0, 0, 1037, 1187,
1939, 95, 0, 0, 4012, 20, 0, 3858, 0, 1020, 1265, 0, 3873, 0, 792, 1955,
1414, 4035, 127, 0, 843, 145, 2295, 0, 3395, 0, 3710, 1027, 3566, 266, 1103, 3282,
0, 0, 0, 1259, 1700, 0, 812, 0, 1062, 1125, 0, 1619, 0, 1548, 1229, 0,
1530, 0, 3151, 0, 3815, 0, 0, 0, 2786, 1824, 3905, 3041, 0, 258, 1168, 0,
524, 3063, 497, 1989, 1553, 802, 0, 2884, 2795, 603, 0, 1235, 827, 0, 0, 0,
608, 1351, 0, 1625, 0, 0, 0, 135, 1541, 0, 1348, 0, 0, 1624, 2415, 942,
0, 0, 1438, 0, 2083, 949, 0, 0, 3961, 106, 3750, 3482, 0, 1487, 0, 0,
3280, 0, 0, 937, 2393, 0, 495, 3233, 0, 1059, 15, 1724, 135, 1060, 1317, 2253,
3412, 81, 350, 0, 0, 1082, 1844, 0, 179, 781, 0, 2197, 0, 3815, 1441, 0,
0, 1503, 0, 0, 3184, 0, 0, 0, 3652, 0, 0, 0, 0, 0, 0, 443,
0, 1500, 0, 174, 0, 0, 1835, 0, 1560, 3486, 3881, 0, 114, 0, 1151, 1172,
0, 2247, 3438, 4001, 0, 4141, 2614, 0, 4171, 4128, 0, 0, 2689, 0, 1574, 1309,
712, 0, 1653, 0, 0, 2542, 1586, 0, 0, 0, 0, 0, 525, 3832, 730, 105,
3645, 245, 0, 736, 3598, 318, 0, 772, 960, 1951, 1144, 1345, 364, 765, 0, 2882,
116, 0, 67, 984, 2948, 0, 359, 0, 0, 3472, 700, 1317, 0, 204, 0, 0,
0, 1828, 926, 0, 2654, 2439, 0, 0, 1446, 734, 0, 82, 848, 2400, 0, 0,
416, 0, 1172, 0, 2967, 0, 282, 0, 0, 0, 855, 169, 3869, 1485, 1374, 0,
1294, 1705, 0, 1055, 0, 1072, 0, 1211, 0, 1568, 0, 2105, 0, 1733, 0, 2187,
0, 3134, 0, 881, 610, 0, 896, 0, 3, 3388, 238, 1207, 0, 0, 0, 709,
0, 0, 0, 0, 2210, 0, 0, 0, 0, 0, 661, 0, 237, 0, 1026, 0,
0, 1998, 0, 0, 1225, 1071, 0, 0, 0, 2576, 0, 1103, 3258, 2489, 1986, 640,
989, 60, 0, 0, 0, 579, 0, 0, 1616, 1855, 4204, 0, 0, 0, 901, 0,
2733, 0, 920, 1694, 761, 0, 0, 0, 886, 1862, 1532, 1613, 2566, 860, 0, 0,
0, 0, 0, 3752, 37, 0, 0, 0, 0, 311, 4022, 649, 487, 0, 1519, 3577,
1108, 0, 1060, 1884, 774, 0, 1102, 0, 201, 0, 171, 0, 245, 830, 3550, 0,
0, 964, 1086, 0, 1534, 709, 0, 0, 0, 0, 1919, 0, 1606, 1829, 3207, 3809,
883, 1523, 0, 1554, 0, 627, 960, 0, 216, 0, 0, 2129, 0, 1789, 0, 0,
1331, 1665, 0, 3490, 0, 3383, 0, 0, 3913, 3396, 3731, 411, 0, 0, 0, 0,
393, 0, 3546, 3555, 2042, 2055, 1441, 840, 1566, 2818, 0, 0, 1325, 0, 0, 0,
0, 0, 0, 3967, 3633, 0, 3378, 0, 0, 1194, 0, 0, 0, 2366, 3010, 0,
1170, 0, 814, 0, 2831, 857, 0, 1466, 22, 1028, 845, 1199, 0, 2027, 3598, 0,
2005, 1777, 697, 8, 140, 12, 3608, 3119, 0, 1495, 571, 1716, 0, 1164, 1933, 4144,
1353, 0, 0, 0, 108, 1661, 414, 0, 0, 813, 0, 1345, 1506, 0, 0, 0,
0, 0, 1729, 796, 1901, 0, 1084, 0, 0, 0, 1601, 0, 1134, 0, 1379, 2446,
0, 3131, 550, 3623, 2991, 696, 0, 0, 0, 0, 118, 0, 268, 0, 2478, 362,
2607, 2521, 956, 0, 0, 0, 0, 916, 0, 0, 0, 1159, 0, 0, 981, 0,
2665, 4136, 2825, 235, 1567, 0, 0, 0, 0, 1515, 0, 199, 3945, 3557, 561, 730,
669, 0, 327, 560, 1762, 1119, 1762, 2497, 1712, 1657, 0, 2874, 0, 0, 62, 0,
380, 0, 3258, 1331, 1752, 155, 0, 0, 1127, 977, 1098, 1583, 3781, 0, 898, 0,
1794, 0, 0, 42, 2109, 1540, 3643, 0, 781, 0, 891, 1174, 1021, 2057, 2745, 3512,
0, 0, 0, 2673, 1352, 1332, 4150, 0, 3778, 2352, 0, 0, 330, 0, 0, 2516,
2844, 0, 3250, 1641, 0, 93, 1045, 1265, 470, 928, 2668, 1553, 0, 0, 340, 944,
1436, 2486, 0, 0, 3190, 0, 2778, 2224, 960, 2626, 1874, 0, 0, 0, 1942, 3019,
73, 905, 0, 3585, 372, 697, 0, 1620, 0, 2541, 2048, 661, 0, 1590, 4078, 0,
195, 3461, 1630, 776, 135, 1357, 0, 828, 255, 2326, 0, 4162, 3244, 0, 430, 3752,
1405, 3362, 313, 0, 0, 1637, 0, 1632, 0, 907, 0, 2182, 1187, 3224, 0, 1456,
3018, 0, 0, 0, 0, 3602, 0, 0, 828, 1320, 201, 1570, 1784, 0, 0, 0,
2009, 3763, 3258, 0, 0, 0, 1568, 1026, 2794, 0, 675, 1852, 0, 0, 176, 0,
4078, 1846, 360, 2249, 1745, 549, 0, 1141, 1062, 2069, 0, 4096, 1070, 2440, 987, 0,
0, 0, 0, 2539, 3712, 4164, 1689, 0, 655, 2108, 543, 1394, 3389, 576, 246, 1379,
3556, 0, 58, 2390, 0, 0, 0, 1347, 989, 1170, 1049, 0, 290, 300, 3076, 3691,
0, 140, 3363, 3757, 2094, 0, 0, 2537, 1655, 3695, 1029, 2029, 1003, 0, 223, 4022,
617, 599, 0, 0, 1543, 463, 1320, 0, 1543, 506, 1495, 4200, 0, 1490, 471, 1544,
253, 1555, 1748, 770, 0, 910, 1302, 1471, 0, 1581, 1243, 147, 1785, 2532, 2073, 624,
0, 390, 0, 0, 0, 131, 2981, 0, 1654, 0, 0, 2075, 0, 0, 3459, 1129,
2197, 0, 885, 2812, 0, 1141, 712, 0, 0, 507, 138, 0, 0, 0, 311, 2789,
1593, 0, 484, 0, 1025, 730, 0, 562, 368, 2012, 2084, 3266, 974, 28, 1297, 0,
0, 554, 3968, 592, 1707, 3952, 378, 344, 3953, 1949, 1649, 1203, 0, 855, 1184, 0,
0, 830, 1027, 78, 962, 1956, 1157, 2425, 1215, 0, 2064, 3283, 457, 1541, 2448, 0,
1729, 2026, 0, 0, 3251, 4085, 642, 0, 1395, 1905, 561, 1657, 2911, 0, 257, 1571,
0, 702, 1959, 0, 723, 974, 1439, 1701, 4146, 0, 3223, 3251, 58, 4174, 84, 0,
0, 184, 0, 0, 1346, 0, 474, 0, 0, 2969, 0, 262, 653, 3307, 1196, 0,
1646, 1570, 0, 532, 3472, 0, 1082, 0, 0, 902, 806, 1955, 1437, 0, 1571, 2087,
0, 0, 0, 0, 989, 1251, 670, 3088, 0, 2826, 126, 953, 883, 1617, 29, 2433,
3934, 49, 259, 0, 633, 1128, 0, 13, 800, 3710, 0, 1747, 0, 1335, 340, 1665,
2867, 596, 0, 0, 1562, 834, 0, 0, 1106, 0, 214, 1089, 1482, 563, 1057, 0,
0, 299, 822, 2953, 0, 0, 2363, 0, 0, 90, 4110, 0, 0, 447, 1000, 0,
3614, 1623, 0, 0, 0, 1455, 1362, 1598, 0, 1242, 1256, 1421, 0, 3228, 0, 0,
0, 842, 644, 1273, 0, 0, 1496, 0, 682, 0, 2848, 0, 3132, 282, 496, 863,
317, 2237, 1338, 0, 2009, 0, 2337, 0, 0, 716, 0, 3232, 1395, 65, 2974, 1924,
166, 0, 0, 1408, 346, 1478, 145, 1625, 4108, 458, 1414, 3191, 3576, 0, 0, 1880,
0, 0, 0, 0, 1119, 0, 2010, 0, 3534, 3006, 3166, 0, 0, 3230, 0, 2874,
0, 2460, 1910, 0, 0, 2390, 3976, 1812, 2064, 0, 3288, 0, 238, 0, 962, 3904,
464, 4026, 3899, 0, 2095, 0, 391, 640, 1720, 1946, 3045, 0, 769, 87, 1673, 1807,
3500, 0, 3493, 1264, 0, 1609, 3771, 0, 4180, 0, 0, 0, 1851, 2314, 194, 2836,
2028, 3790, 0, 0, 0, 0, 0, 750, 1581, 0, 1009, 1744, 0, 0, 0, 1258,
831, 843, 0, 419, 522, 527, 1040, 752, 0, 1359, 0, 2638, 0, 3415, 0, 0,
0, 130, 0, 1033, 0, 22, 1368, 0, 672, 267, 3401, 0, 86, 1717, 1574, 308,
1859};
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 %= 4209;
}
return mangledkG[sum];
}
int MangledPerfectHash(const char *key)
{
if (strlen(key) > 37)
return 0;
return (MangledHashG(key, mangledkT1) + MangledHashG(key, mangledkT2)) % 4209;
}
constexpr int unmangledkT1[] = {9, 1, 58, 119, 163, 183, 256, 133, 308, 258, 318, 25, 17,
153, 50, 219, 51, 187, 41, 19, 41, 321, 197, 5, 306, 230};
constexpr int unmangledkT2[] = {275, 243, 153, 329, 122, 53, 291, 152, 285, 154, 277, 272, 275,
37, 143, 113, 122, 164, 310, 151, 163, 178, 240, 308, 36, 167};
constexpr int unmangledkG[] = {
0, 0, 0, 254, 0, 0, 0, 201, 0, 0, 0, 0, 0, 181, 0, 207, 0, 0, 2,
0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 240, 179, 0, 0, 0, 0, 38, 0, 195,
296, 0, 0, 0, 0, 58, 0, 300, 183, 143, 45, 294, 90, 0, 0, 288, 0, 166, 0,
0, 7, 24, 0, 0, 225, 0, 179, 0, 252, 0, 0, 207, 0, 38, 101, 0, 0, 284,
0, 23, 222, 79, 299, 1, 113, 0, 77, 138, 128, 0, 177, 33, 197, 150, 0, 27, 319,
193, 0, 65, 143, 69, 0, 298, 300, 0, 135, 230, 0, 0, 9, 0, 0, 278, 314, 0,
0, 0, 67, 0, 0, 23, 0, 218, 0, 0, 280, 182, 206, 76, 0, 0, 0, 186, 123,
5, 53, 0, 0, 0, 116, 188, 179, 0, 107, 276, 0, 0, 73, 297, 287, 284, 0, 142,
196, 262, 256, 169, 231, 35, 0, 0, 0, 165, 204, 106, 199, 48, 0, 0, 90, 0, 251,
295, 132, 0, 259, 0, 141, 0, 0, 0, 0, 74, 111, 51, 323, 253, 0, 0, 18, 145,
278, 36, 311, 0, 0, 16, 277, 267, 0, 117, 0, 82, 0, 189, 0, 63, 158, 78, 136,
19, 75, 315, 0, 281, 86, 0, 313, 265, 304, 289, 139, 129, 221, 257, 153, 137, 0, 220,
231, 65, 157, 99, 2, 0, 1, 109, 5, 238, 132, 204, 0, 42, 224, 329, 0, 0, 203,
82, 0, 102, 173, 0, 188, 47, 0, 41, 111, 136, 202, 62, 0, 0, 72, 131, 0, 0,
270, 195, 136, 0, 244, 0, 166, 146, 106, 5, 24, 168, 0, 55, 79, 204, 153, 0, 158,
0, 0, 325, 0, 0, 204, 155, 199, 112, 0, 305, 61, 58, 251, 0, 194, 0, 108, 150,
2, 34, 144, 157, 275, 0, 120, 199, 230, 11, 85, 180, 0, 255, 284, 39, 156, 124, 12,
177, 0, 34, 0, 10, 176, 0, 44};
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 %= 331;
}
return unmangledkG[sum];
}
int UnmangledPerfectHash(const char *key)
{
if (strlen(key) > 26)
return 0;
return (UnmangledHashG(key, unmangledkT1) + UnmangledHashG(key, unmangledkT2)) % 331;
}
} // 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