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_ESSL_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[] = {1047, 528, 798, 265, 2913, 1389, 2657, 2604, 434, 2688,
187, 3001, 2420, 3073, 2197, 724, 599, 2558, 2467, 1772,
404, 210, 877, 3007, 3129, 1508, 1082, 2230, 2366, 541,
646, 2655, 565, 472, 1414, 3109, 3027, 1657, 830, 1330};
constexpr int mangledkT2[] = {693, 1478, 677, 2691, 2790, 1036, 2163, 673, 2138, 2411,
527, 780, 228, 3008, 3095, 1436, 2168, 2249, 310, 3044,
760, 776, 2946, 1280, 551, 715, 2699, 2899, 2007, 2353,
3017, 1607, 1755, 3169, 1999, 1169, 1112, 2052, 2765, 906};
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, 1631, 0, 451, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2084, 0, 0, 2545, 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, 1138, 0, 96,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1404, 0, 0, 0, 2285, 0, 0,
0, 2198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2070, 0, 0, 1240, 0,
0, 0, 0, 377, 0, 200, 0, 958, 2993, 2792, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 459, 3114, 0, 0, 0, 0, 43, 0, 884,
0, 0, 0, 716, 2991, 47, 0, 0, 0, 0, 1665, 0, 1789, 0, 0, 0,
0, 0, 0, 1201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 549, 0, 0,
0, 0, 0, 0, 0, 0, 1852, 0, 0, 1157, 0, 335, 0, 214, 1976, 0,
0, 684, 0, 0, 201, 1830, 735, 0, 0, 0, 0, 186, 523, 239, 1060, 0,
0, 729, 893, 0, 887, 91, 0, 3104, 0, 0, 956, 0, 0, 0, 0, 0,
0, 1514, 803, 0, 304, 0, 0, 0, 0, 0, 0, 1694, 0, 0, 0, 0,
1387, 0, 0, 0, 1670, 0, 0, 3169, 0, 2696, 0, 348, 0, 0, 2448, 0,
1590, 0, 0, 0, 0, 0, 338, 2155, 0, 160, 0, 0, 3011, 0, 0, 2540,
0, 0, 0, 0, 0, 0, 259, 357, 2117, 2849, 1571, 892, 0, 0, 0, 2389,
0, 2925, 0, 0, 0, 1328, 0, 0, 0, 0, 0, 0, 0, 0, 2180, 0,
0, 0, 0, 1245, 994, 0, 0, 0, 0, 0, 0, 298, 1730, 0, 0, 0,
0, 0, 0, 0, 1896, 0, 2621, 0, 0, 0, 1775, 0, 31, 686, 0, 0,
1918, 1604, 0, 0, 223, 0, 2180, 2340, 402, 0, 3016, 0, 0, 1417, 2779, 0,
1997, 1008, 0, 0, 0, 0, 3044, 0, 0, 1442, 0, 0, 1875, 635, 267, 2289,
0, 0, 2636, 767, 1057, 0, 0, 757, 529, 0, 0, 0, 1274, 1512, 0, 2518,
1481, 0, 1696, 225, 0, 1498, 0, 2857, 3013, 0, 0, 0, 387, 0, 0, 531,
0, 958, 134, 0, 1051, 2365, 0, 526, 0, 0, 1979, 0, 2767, 0, 0, 0,
0, 1072, 0, 0, 22, 318, 1114, 0, 0, 0, 0, 2157, 986, 561, 0, 0,
0, 0, 0, 0, 1951, 0, 360, 0, 0, 0, 0, 0, 94, 0, 0, 0,
1465, 0, 260, 0, 487, 0, 0, 944, 95, 2735, 457, 0, 0, 0, 0, 952,
0, 0, 1976, 0, 0, 0, 0, 1152, 0, 1439, 0, 0, 0, 0, 0, 0,
1675, 1241, 0, 2508, 209, 0, 0, 0, 837, 0, 2955, 0, 1621, 684, 2086, 103,
2657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 751, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 2775, 1568, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1464, 1396, 0, 209, 0, 1155, 265, 979, 0, 0, 0, 0, 0,
0, 2676, 1641, 2686, 0, 0, 0, 0, 666, 376, 3201, 0, 576, 2836, 0, 551,
3151, 0, 1329, 974, 206, 0, 1210, 0, 0, 0, 1372, 2145, 2809, 0, 0, 1017,
0, 816, 0, 0, 0, 1268, 0, 0, 0, 1932, 0, 2907, 0, 234, 0, 762,
2660, 0, 0, 2615, 0, 0, 3000, 0, 0, 0, 356, 1757, 662, 776, 299, 0,
0, 0, 185, 0, 0, 0, 2729, 0, 0, 0, 0, 0, 2630, 1516, 2008, 0,
1097, 0, 2759, 0, 0, 3089, 0, 0, 1183, 0, 0, 0, 0, 0, 0, 1305,
0, 0, 360, 3014, 0, 0, 720, 0, 594, 2525, 0, 0, 826, 0, 2804, 0,
49, 0, 2537, 0, 0, 720, 1277, 1408, 0, 2736, 0, 1434, 0, 1323, 349, 0,
0, 0, 0, 0, 0, 982, 0, 51, 0, 2432, 1688, 0, 0, 1554, 0, 2847,
0, 0, 1032, 0, 0, 0, 2091, 0, 0, 0, 2702, 0, 0, 0, 195, 1234,
656, 0, 0, 464, 0, 1014, 83, 0, 997, 0, 1849, 2141, 0, 0, 0, 3129,
0, 0, 0, 0, 2368, 3080, 2308, 163, 816, 0, 0, 1423, 2009, 0, 2286, 0,
0, 1717, 507, 1269, 1751, 2575, 0, 0, 570, 0, 0, 0, 1425, 0, 0, 0,
21, 0, 0, 0, 0, 2758, 0, 0, 2459, 942, 0, 1280, 0, 0, 0, 26,
0, 0, 0, 0, 0, 0, 0, 111, 0, 1516, 970, 2162, 2781, 1113, 0, 0,
0, 0, 0, 0, 1805, 0, 0, 0, 2662, 3083, 295, 1860, 0, 0, 0, 0,
0, 2063, 0, 0, 1906, 2641, 0, 1177, 0, 0, 40, 0, 55, 77, 0, 750,
0, 0, 0, 0, 695, 864, 797, 0, 62, 0, 2634, 0, 2953, 86, 0, 0,
0, 254, 0, 0, 0, 349, 0, 0, 0, 1819, 0, 434, 1607, 608, 0, 0,
1866, 618, 2424, 0, 1386, 0, 1497, 0, 394, 0, 0, 0, 0, 0, 1615, 0,
27, 1615, 786, 0, 0, 1032, 0, 3112, 0, 0, 1313, 1680, 0, 0, 0, 1050,
0, 0, 1244, 2277, 400, 0, 1077, 1490, 0, 567, 0, 0, 2415, 0, 848, 0,
0, 1120, 0, 2448, 0, 0, 358, 0, 0, 0, 902, 44, 1667, 0, 0, 0,
0, 0, 0, 2822, 0, 0, 1130, 0, 1802, 400, 0, 547, 262, 0, 294, 1229,
2854, 2089, 0, 1056, 0, 713, 247, 238, 637, 1063, 2397, 0, 0, 0, 2386, 0,
1122, 152, 238, 0, 0, 1303, 2562, 0, 0, 0, 0, 0, 829, 0, 2710, 1126,
0, 1357, 2304, 1191, 1086, 0, 2457, 2740, 314, 0, 0, 1253, 3128, 0, 0, 0,
0, 0, 995, 0, 993, 0, 0, 1761, 0, 0, 2908, 0, 0, 1456, 0, 2489,
0, 1112, 2795, 1077, 1398, 0, 2517, 0, 0, 0, 0, 636, 0, 1014, 0, 280,
411, 0, 941, 0, 0, 0, 2404, 476, 1513, 2692, 0, 1205, 2012, 376, 153, 799,
3168, 0, 736, 0, 0, 0, 0, 1436, 0, 0, 0, 0, 0, 0, 0, 1193,
211, 1919, 0, 0, 581, 629, 3133, 0, 2604, 0, 0, 0, 1189, 879, 0, 2783,
2603, 999, 0, 260, 2092, 0, 1495, 870, 0, 0, 927, 0, 0, 0, 1519, 0,
786, 1876, 2013, 237, 600, 0, 1236, 0, 0, 0, 2342, 0, 1600, 2014, 0, 40,
115, 0, 0, 2538, 0, 1611, 0, 0, 674, 1385, 20, 2882, 0, 991, 1029, 131,
869, 1042, 0, 0, 2298, 0, 0, 0, 2321, 0, 2348, 0, 2143, 0, 0, 1342,
864, 1214, 1371, 0, 1678, 2285, 0, 0, 0, 2588, 0, 0, 0, 0, 0, 0,
3103, 341, 0, 153, 1092, 1195, 0, 1265, 34, 336, 179, 0, 1549, 1172, 0, 0,
201, 0, 0, 684, 0, 610, 0, 726, 0, 1808, 0, 677, 0, 412, 1473, 0,
0, 0, 2008, 0, 0, 0, 897, 2815, 2450, 0, 1353, 1485, 51, 351, 255, 0,
574, 383, 2741, 0, 752, 0, 0, 3178, 782, 195, 190, 0, 0, 0, 1946, 0,
189, 0, 0, 0, 47, 0, 0, 3060, 0, 0, 0, 2205, 0, 0, 0, 613,
0, 3025, 2873, 3061, 1901, 0, 960, 0, 0, 0, 471, 1057, 1553, 218, 1238, 2871,
0, 0, 0, 0, 0, 0, 0, 0, 2444, 0, 450, 532, 0, 0, 0, 2563,
0, 0, 2679, 0, 0, 1410, 847, 0, 0, 1007, 0, 138, 724, 0, 1630, 569,
0, 466, 727, 438, 755, 0, 0, 0, 1378, 1939, 0, 0, 1161, 1435, 0, 868,
0, 0, 0, 1320, 0, 0, 0, 3036, 3051, 564, 942, 243, 0, 0, 800, 985,
0, 1231, 0, 0, 723, 400, 1885, 1069, 632, 0, 2578, 2616, 871, 71, 0, 1005,
0, 0, 0, 688, 2762, 0, 0, 935, 0, 444, 500, 0, 1832, 1792, 0, 0,
0, 2521, 1378, 0, 952, 0, 1093, 0, 0, 1704, 0, 59, 0, 882, 0, 0,
1443, 0, 0, 793, 0, 2022, 2801, 0, 0, 0, 0, 750, 0, 1304, 1797, 0,
2390, 0, 0, 0, 0, 0, 0, 0, 2534, 2679, 0, 615, 0, 609, 1465, 0,
87, 833, 0, 0, 0, 0, 0, 695, 0, 779, 0, 2680, 0, 0, 3041, 0,
2419, 2865, 1482, 0, 0, 0, 2542, 0, 824, 1513, 0, 3029, 2493, 0, 0, 1890,
0, 1178, 2950, 0, 1721, 0, 699, 0, 1961, 394, 2098, 1313, 0, 1834, 971, 0,
0, 1317, 0, 2821, 0, 2540, 192, 396, 0, 0, 953, 0, 2476, 0, 2549, 0,
1510, 953, 1810, 0, 0, 0, 1273, 1037, 0, 0, 0, 0, 0, 3051, 1319, 39,
3091, 0, 2203, 0, 0, 279, 0, 816, 0, 975, 0, 0, 733, 2513, 1729, 710,
1498, 271, 1131, 2177, 0, 2602, 262, 1367, 0, 264, 0, 2406, 725, 0, 0, 1649,
0, 0, 0, 3116, 420, 0, 1556, 0, 333, 0, 0, 0, 872, 101, 0, 665,
1494, 0, 3053, 2246, 0, 0, 1408, 2257, 469, 0, 0, 2499, 0, 1340, 0, 2469,
903, 0, 0, 0, 0, 0, 911, 0, 0, 161, 2224, 105, 801, 1252, 1128, 0,
1600, 0, 0, 0, 1777, 0, 2595, 0, 0, 0, 0, 203, 0, 0, 625, 516,
0, 0, 0, 2569, 962, 965, 529, 1922, 1474, 0, 0, 601, 2722, 0, 2609, 1984,
1858, 0, 0, 0, 2838, 2453, 0, 0, 690, 1538, 1542, 1234, 1053, 0, 0, 2339,
0, 217, 3166, 0, 784, 133, 2851, 0, 0, 0, 0, 557, 0, 17, 0, 0,
0, 507, 0, 0, 0, 1562, 2420, 555, 1985, 761, 0, 377, 0, 0, 2346, 0,
1114, 1213, 0, 2850, 0, 0, 1421, 352, 0, 1378, 0, 2757, 0, 608, 0, 0,
0, 0, 14, 1267, 0, 492, 0, 997, 2095, 1840, 0, 701, 777, 1129, 0, 1857,
0, 614, 0, 0, 0, 0, 449, 0, 0, 2067, 0, 2097, 2602, 588, 1770, 3019,
658, 0, 0, 0, 0, 0, 0, 958, 289, 0, 0, 2568, 264, 0, 1219, 0,
0, 1503, 2284, 2956, 1042, 2798, 0, 104, 1478, 0, 998, 419, 0, 0, 2348, 2722,
1382, 0, 0, 0, 642, 0, 0, 341, 1009, 0, 0, 0, 0, 2739, 0, 1398,
0, 0, 2093, 2650, 522, 694, 0, 0, 1056, 0, 0, 1601, 0, 742, 0, 108,
2260, 0, 1631, 754, 0, 96, 0, 0, 2594, 0, 0, 736, 135, 0, 0, 613,
0, 1115, 0, 939, 0, 0, 222, 0, 2208, 2127, 0, 1815, 0, 0, 31, 1343,
0, 2203, 1560, 0, 0, 0, 1283, 0, 2686, 2391, 1111, 0, 1379, 0, 334, 511,
0, 1113, 0, 0, 3176, 3182, 0, 373, 2633, 732, 0, 0, 1510, 0, 0, 1805,
919, 0, 0, 2560, 527, 1470, 2245, 0, 782, 1024, 0, 561, 1649, 2194, 0, 0,
973, 1097, 0, 0, 496, 210, 0, 0, 0, 0, 0, 819, 42, 0, 0, 1088,
13, 1290, 0, 0, 0, 0, 0, 0, 0, 0, 2581, 506, 2694, 125, 0, 861,
0, 348, 0, 1182, 191, 0, 0, 0, 2539, 763, 0, 0, 0, 2634, 2589, 1380,
54, 0, 259, 1559, 0, 0, 0, 0, 48, 2340, 0, 934, 1991, 0, 2477, 1248,
2741, 1325, 0, 2883, 0, 802, 0, 0, 1140, 98, 995, 26, 2534, 1846, 0, 0,
0, 0, 0, 2557, 738, 0, 0, 2874, 1018, 28, 506, 286, 0, 930, 0, 20,
0, 0, 0, 0, 1320, 2862, 227, 374, 1231, 0, 1863, 0, 1590, 1858, 0, 0,
41, 0, 3045, 2529, 0, 1059, 0, 2842, 1539, 0, 1324, 2355, 959, 0, 543, 925,
2748, 461, 525, 0, 2302, 0, 795, 2347, 196, 0, 0, 787, 1650, 1166, 0, 272,
877, 3091, 0, 0, 0, 0, 0, 202, 1381, 1116, 0, 3131, 1436, 787, 0, 0,
0, 0, 4, 11, 1454, 1602, 0, 0, 0, 1395, 0, 0, 3026, 0, 1461, 0,
1387, 1830, 1207, 134, 0, 472, 1681, 1515, 0, 83, 886, 2447, 0, 0, 3189, 106,
330, 0, 2416, 256, 0, 1477, 844, 0, 2799, 2, 410, 1422, 1257, 651, 0, 0,
0, 604, 0, 3038, 1339, 437, 766, 0, 1292, 203, 367, 677, 830, 762, 1947, 1195,
0, 333, 0, 716, 3027, 284, 0, 0, 0, 0, 0, 0, 0, 725, 698, 1302,
0, 0, 439, 0, 0, 240, 0, 895, 1599, 660, 1837, 2331, 573, 0, 0, 0,
1103, 863, 0, 3194, 680, 772, 0, 0, 1170, 0, 0, 0, 0, 984, 1400, 0,
1860, 0, 1948, 26, 345, 1132, 264, 1098, 89, 0, 0, 0, 0, 20, 0, 2,
968, 3078, 612, 0, 0, 0, 623, 0, 0, 0, 0, 1105, 0, 0, 2285, 1669,
0, 0, 0, 998, 231, 1221, 344, 0, 605, 0, 1082, 1553, 1111, 0, 0, 1153,
0, 0, 0, 1779, 0, 1282, 0, 0, 1911, 103, 1059, 256, 0, 0, 3000, 566,
0, 1228, 0, 0, 519, 0, 0, 0, 0, 450, 1096, 0, 3042, 1738, 0, 0,
0, 0, 2807, 0, 0, 0, 1069, 0, 2206, 112, 1341, 2077, 0, 2769, 1110, 828,
157, 865, 1451, 589, 0, 2538, 0, 1159, 0, 453, 51, 0, 0, 1828, 777, 295,
1196, 719, 2161, 1376, 0, 551, 0, 224, 0, 0, 0, 0, 0, 141, 0, 0,
2924, 0, 1509, 442, 1403, 750, 1388, 0, 0, 0, 0, 0, 0, 0, 3008, 523,
1074, 1323, 1194, 2430, 0, 688, 43, 0, 424, 0, 617, 0, 0, 0, 2874, 0,
2426, 0, 2711, 0, 611, 839, 891, 1977, 0, 1167, 0, 2304, 0, 55, 0, 0,
2714, 0, 298, 322, 0, 0, 2719, 2741, 614, 902, 1092, 310, 0, 0, 1294, 897,
0, 0, 0, 567, 814, 1472, 1532, 0, 1080, 366, 0, 1927, 660, 1091, 0, 2338,
2182, 2593, 0, 2099, 0, 1597, 136, 2870, 0, 790, 1757, 410, 0, 0, 1592, 781,
0, 0, 6, 571, 2030, 1614, 356, 834, 0, 1716, 0, 1493, 1291, 1397, 644, 0,
537, 2957, 984, 0, 0, 0, 852, 0, 0, 1944, 1090, 531, 0, 270, 271, 2004,
1154, 1372, 928, 3, 0, 0, 0, 1456, 2178, 0, 1888, 0, 0, 0, 0, 117,
0, 0, 2057, 708, 0, 0, 1963, 0, 0, 0, 79, 0, 1365, 0, 0, 2489,
0, 398, 0, 214, 1502, 175, 0, 3043, 0, 571, 1002, 0, 0, 2853, 0, 408,
651, 778, 0, 0, 0, 3185, 0, 2087, 0, 0, 0, 0, 209, 2708, 1063, 0,
0, 0, 3138, 1138, 1347, 0, 0, 0, 406, 1264, 1372, 294, 2727, 1035, 2836, 450,
607, 0, 388, 1118, 0, 1312, 475, 1367, 858, 0, 0, 0, 0, 2281, 0, 0,
193, 0, 0, 2747, 0, 699, 0, 509, 159, 1415, 0, 0, 1571, 1338, 378, 1356,
0, 1021, 0, 362, 54, 815, 1631, 0, 0, 48, 0, 0, 0, 160, 0, 2925,
1613, 1022, 896, 361, 0, 406, 711, 1911, 0, 248, 750, 0, 0, 964, 1474, 2435,
1134, 0, 1236, 0, 1575, 2473, 1559, 987, 1076, 1972, 290, 0, 0, 1357, 2326, 1611,
1435, 0, 1905, 262, 0, 0, 45, 521, 1979, 92, 0, 0, 0, 64, 2909, 1048,
2287, 0, 1389, 313, 76, 266, 3183, 2636, 2000, 3125, 0, 1696, 110, 621, 2243, 0,
0, 0, 2821, 1431, 0, 1153, 0, 3111, 0, 0, 107, 1269, 0, 0, 2139, 0,
645, 0, 0, 0, 2390, 1574, 943, 0, 0, 1628, 2452, 104, 0, 776, 0, 0,
0, 1411, 3190, 1816, 1187, 636, 918, 1833, 0, 652, 0, 970, 0, 1099, 921, 0,
1718, 1476, 2007, 297, 1560, 1437, 539, 0, 2347, 1838, 1041, 0, 305, 1189, 0, 2997,
0, 1153, 253, 130, 1075, 2217, 2642, 2803, 0, 50, 2498, 730, 1856, 2031, 0, 0,
0, 0, 0, 1583, 2818, 819, 0, 71, 3132, 0, 0, 60, 0, 63, 947, 1512,
880, 914, 0, 986, 2095, 1527, 63, 0, 2596, 432, 514, 1518, 0, 1620, 0, 767,
0, 2679, 629, 1479, 0, 85, 2993, 0, 0, 67, 0, 3023, 1294, 0, 1607, 971,
0, 123, 1981, 0, 100, 0, 1541, 0, 413, 473, 433, 588, 57, 752, 0, 2198,
1350, 2019, 1597, 1001, 582, 950, 1553, 2968, 0, 1582, 909, 1286, 0, 0, 2325, 207,
742, 303, 1162, 1051, 0, 1690, 2785, 289, 0, 0, 1836, 402, 0, 0, 0, 0,
0, 0, 1049, 479, 261, 0, 1388, 0, 1996, 458, 1867, 89, 2969, 748, 2811, 0,
555, 957, 0, 0, 145, 775, 582, 0, 0, 0, 1883, 452, 3083, 936, 2420, 183,
0, 740, 0, 0, 0, 1644, 2926, 0, 0, 0, 0, 1380, 0, 15, 1240, 7,
0, 0, 1426, 1479, 0, 0, 288, 1060, 587, 1257, 95, 419, 3193, 2733, 1226, 0,
0, 0, 0, 867, 0, 3036, 0, 583, 124, 1617, 0, 1350, 1542, 0, 0, 347,
0, 0, 0, 0, 2847, 739, 727, 0, 0, 66, 0, 0, 2812, 0, 984, 0,
459, 0, 0, 2300, 0, 0, 1417, 0, 2381, 2612, 0, 865, 263, 0, 0, 88,
1725, 0, 2246, 250, 19, 1274, 0, 1676, 1118, 2849, 1006, 1374, 317, 1541, 1280, 0,
0, 2970, 0, 853, 961, 894, 91, 2650, 0, 65, 2741, 2997, 441, 89, 0, 0,
496, 1463, 1074, 1143, 1539, 0, 0, 0, 0, 1067, 3164, 1241, 0, 544, 0, 0,
151, 2940, 0, 845, 0, 0, 690, 0, 0, 536, 11, 914, 0, 0, 1120, 2774,
1377, 1819, 0, 2689, 0, 539, 0, 1459, 0, 992, 2639, 1535, 0, 221, 1993, 0,
828, 0, 0, 0, 67, 2449, 1420, 0, 0, 312, 313, 0, 1020, 0, 0, 1721,
58, 37, 138, 717, 2157, 0, 1263, 463, 0, 2590, 0, 1567, 2526, 502, 1965, 0,
2443, 0, 2029, 1334, 2964, 2219, 130, 3146, 635, 389, 2610, 0, 0, 0, 0, 234,
0, 0, 1331, 0, 2463, 0, 1915, 498, 1157, 377, 2030, 0, 1569, 462, 0, 0,
1175, 484, 1165, 0, 238, 0, 797, 289, 2371, 0, 1000, 1588, 2071, 2501, 2023, 873,
0, 338, 0, 57, 1785, 6, 0, 0, 654, 0, 0, 173, 0, 0, 778, 0,
0, 1650, 1253, 0, 1235, 0, 0, 1310, 0, 340, 117, 0, 0, 0, 1750, 51,
0, 1419, 0, 189, 257, 0, 0, 1838, 0, 1083, 2242, 0, 0, 1396, 0, 134,
2455, 1226, 0, 755, 1381, 0, 3002, 0, 2635, 1046, 1612, 1192, 1268, 476, 1061, 608,
2224, 648, 3066, 5, 1053, 2338, 173, 1109, 0, 412, 0, 210, 590, 3089, 0, 2449,
1126, 339, 173, 0, 528, 1059, 0, 1712, 1126, 749, 0, 1580, 0, 0, 728, 2092,
1085, 2590, 0, 944, 2513, 2011, 0, 0, 400, 90, 0, 0, 204, 3025, 1289, 0,
929, 1589, 3184, 2167, 2523, 0, 509, 877, 0, 1524, 0, 0, 734, 1273, 1202, 1272,
577, 0, 955, 0, 0, 2829, 0, 251, 1046, 1821, 1526, 610, 482, 633, 0, 761,
1135, 0, 1011, 2592, 305, 0, 2263, 2789, 1497, 2284, 1471, 0, 0, 499, 715, 810,
591, 0, 155, 0, 169, 0, 0, 574, 741, 1, 0, 2112, 164, 2066, 0, 0,
2014, 785, 2528, 0, 0, 0, 563, 371, 0, 667, 1245, 0, 579, 993, 2397, 2322,
0, 0, 2987, 12, 408, 0, 878, 2369, 639, 3107, 0, 1370, 3147, 334, 0, 0,
1426, 2062, 0, 1567, 275, 0, 1897, 2170, 0, 0, 1453, 916, 0, 0, 0, 124,
2760, 881};
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 %= 3202;
}
return mangledkG[sum];
}
int MangledPerfectHash(const char *key)
{
if (strlen(key) > 40)
return 0;
return (MangledHashG(key, mangledkT1) + MangledHashG(key, mangledkT2)) % 3202;
}
constexpr int unmangledkT1[] = {6, 290, 162, 21, 80, 121, 230, 49, 59, 182, 261, 224, 128,
200, 242, 168, 95, 222, 276, 152, 237, 309, 170, 123, 247, 239};
constexpr int unmangledkT2[] = {219, 287, 171, 169, 56, 255, 117, 203, 164, 103, 91, 81, 292,
312, 84, 310, 298, 114, 186, 164, 192, 256, 44, 134, 238, 233};
constexpr int unmangledkG[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 0, 0,
140, 0, 0, 0, 0, 161, 74, 0, 61, 291, 0, 0, 258, 175, 0, 0, 0, 198, 0,
84, 274, 0, 147, 193, 79, 156, 0, 0, 43, 6, 191, 0, 0, 0, 0, 73, 0, 0,
0, 84, 98, 27, 0, 0, 241, 0, 126, 136, 313, 0, 0, 30, 209, 16, 0, 60, 0,
0, 0, 0, 46, 0, 44, 0, 106, 0, 0, 0, 0, 197, 0, 82, 75, 0, 0, 0,
0, 0, 4, 87, 0, 179, 238, 0, 0, 245, 128, 0, 167, 0, 125, 115, 118, 0, 134,
22, 137, 0, 0, 67, 0, 0, 238, 261, 0, 240, 0, 232, 0, 141, 0, 187, 0, 94,
0, 294, 186, 0, 269, 86, 0, 147, 0, 0, 0, 0, 0, 0, 65, 154, 210, 0, 290,
0, 73, 158, 0, 0, 0, 294, 284, 0, 0, 0, 0, 101, 0, 108, 0, 0, 0, 0,
0, 0, 0, 0, 100, 0, 299, 70, 283, 7, 55, 233, 155, 94, 232, 293, 0, 124, 207,
0, 0, 0, 302, 0, 60, 152, 199, 0, 41, 0, 173, 238, 17, 145, 156, 0, 0, 0,
82, 107, 6, 66, 162, 0, 318, 164, 48, 94, 0, 0, 263, 165, 0, 316, 68, 128, 0,
78, 264, 257, 99, 153, 1, 45, 182, 0, 0, 0, 0, 0, 0, 0, 90, 69, 317, 0,
23, 0, 0, 143, 0, 63, 2, 34, 14, 0, 0, 49, 53, 0, 201, 92, 146, 1, 282,
132, 0, 161, 99, 63, 272, 0, 0, 0, 3, 159, 250, 0, 0, 0, 131, 288, 0, 209,
0, 127, 99, 0, 163, 101, 185, 0, 0, 0, 74, 0, 0, 0, 0, 139, 290, 23, 0,
19, 91, 155, 0, 0, 205, 0, 65, 46, 0, 0, 35, 128, 242, 85, 316, 11};
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 %= 321;
}
return unmangledkG[sum];
}
int UnmangledPerfectHash(const char *key)
{
if (strlen(key) > 26)
return 0;
return (UnmangledHashG(key, unmangledkT1) + UnmangledHashG(key, unmangledkT2)) % 321;
}
} // 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