| // 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[] = {1871, 2623, 2766, 2031, 935, 1508, 2246, 2210, 248, 137, |
| 641, 597, 1277, 147, 2100, 925, 399, 2132, 2410, 1914, |
| 2873, 552, 2669, 127, 313, 308, 1032, 1000, 11, 2326, |
| 803, 235, 37, 235, 2574, 1451, 2987, 1734, 2646, 109}; |
| constexpr int mangledkT2[] = {2342, 998, 2216, 1049, 2965, 231, 1661, 1981, 2078, 745, |
| 1322, 109, 30, 3034, 262, 1282, 2144, 1530, 1238, 2578, |
| 2579, 644, 1646, 1106, 2664, 789, 336, 34, 1381, 866, |
| 378, 2770, 513, 2102, 1009, 2018, 761, 1983, 404, 2930}; |
| constexpr int mangledkG[] = { |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1427, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 1912, 847, 0, 0, 0, 0, 782, 0, |
| 0, 0, 0, 0, 0, 997, 0, 907, 1244, 0, 0, 2595, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 2819, 0, 0, 0, 0, 0, 2196, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 1925, 0, 1284, 156, 0, 0, 0, 110, 1504, 944, |
| 0, 1522, 0, 0, 0, 0, 0, 0, 0, 1595, 0, 0, 0, 438, 0, 0, |
| 1129, 0, 761, 0, 0, 0, 0, 0, 2945, 0, 0, 806, 2345, 0, 546, 0, |
| 0, 2617, 0, 0, 0, 3001, 2431, 0, 0, 0, 0, 860, 0, 0, 0, 2952, |
| 1554, 0, 0, 0, 757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 1092, 0, 2747, 135, 0, 0, 2572, 0, 27, 0, 1144, 0, 1011, 0, |
| 1878, 0, 486, 0, 998, 0, 764, 0, 0, 0, 0, 0, 0, 239, 0, 3013, |
| 0, 0, 1947, 1732, 0, 0, 1809, 0, 585, 0, 0, 0, 0, 0, 1471, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1897, 0, 2090, 0, 0, 81, |
| 0, 0, 0, 1583, 0, 0, 0, 0, 893, 1325, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 2407, 879, 0, 2243, 0, 2756, 0, 946, 0, |
| 0, 906, 1670, 0, 0, 0, 0, 0, 0, 0, 0, 727, 2158, 0, 0, 2034, |
| 1098, 0, 0, 0, 0, 1741, 232, 0, 0, 355, 2019, 0, 1887, 0, 2320, 0, |
| 0, 0, 0, 0, 2637, 0, 1212, 0, 0, 0, 0, 0, 108, 0, 0, 0, |
| 0, 0, 1186, 0, 0, 0, 1200, 0, 169, 1961, 193, 26, 0, 0, 0, 0, |
| 459, 2828, 0, 0, 0, 0, 0, 0, 0, 0, 1133, 1091, 1178, 0, 0, 1924, |
| 0, 0, 0, 0, 0, 0, 0, 628, 0, 1666, 79, 2314, 0, 0, 481, 0, |
| 0, 0, 1717, 2885, 962, 2563, 2886, 0, 16, 1367, 0, 0, 0, 2935, 0, 152, |
| 0, 0, 626, 1740, 0, 0, 0, 2597, 0, 585, 1364, 3019, 0, 740, 0, 2825, |
| 0, 2762, 0, 0, 0, 0, 0, 0, 0, 0, 2714, 978, 0, 0, 1360, 536, |
| 2738, 0, 1186, 2154, 0, 0, 531, 828, 0, 1910, 0, 0, 2788, 0, 0, 974, |
| 0, 0, 1937, 0, 860, 0, 109, 1196, 0, 0, 390, 0, 2517, 0, 1718, 0, |
| 2070, 2761, 2967, 334, 150, 0, 2439, 2932, 0, 724, 636, 0, 953, 1394, 0, 0, |
| 2484, 0, 2923, 0, 0, 0, 0, 87, 1082, 0, 2076, 0, 1503, 0, 0, 0, |
| 1074, 0, 0, 1493, 0, 0, 0, 0, 0, 1551, 438, 0, 0, 0, 319, 0, |
| 2587, 0, 0, 0, 0, 0, 542, 675, 523, 573, 1985, 1948, 0, 0, 0, 1171, |
| 1682, 0, 297, 1319, 0, 0, 396, 0, 0, 823, 0, 1844, 740, 0, 0, 0, |
| 336, 697, 582, 0, 530, 0, 32, 0, 0, 918, 947, 2618, 0, 0, 1031, 0, |
| 0, 0, 0, 0, 2359, 0, 3019, 2611, 0, 0, 2299, 0, 0, 1459, 0, 2514, |
| 21, 0, 1600, 0, 0, 1900, 2113, 0, 0, 909, 0, 0, 0, 0, 2462, 0, |
| 0, 2165, 886, 310, 2485, 0, 756, 0, 2310, 1359, 0, 214, 0, 0, 1794, 0, |
| 1182, 0, 1580, 0, 0, 2155, 0, 0, 1133, 0, 1737, 0, 191, 1208, 0, 298, |
| 0, 0, 678, 1412, 800, 1125, 2670, 0, 0, 0, 640, 11, 1058, 141, 736, 0, |
| 0, 0, 696, 1718, 0, 0, 0, 2303, 0, 1254, 0, 2982, 0, 0, 185, 3006, |
| 0, 0, 336, 2666, 0, 1290, 1962, 0, 0, 0, 2407, 0, 1036, 717, 2775, 0, |
| 3000, 0, 635, 506, 0, 0, 0, 2052, 0, 1436, 573, 0, 0, 0, 0, 348, |
| 1134, 0, 0, 1256, 0, 103, 0, 0, 0, 0, 1434, 97, 844, 354, 782, 0, |
| 2717, 0, 0, 0, 570, 0, 489, 476, 176, 0, 720, 0, 1779, 0, 1032, 819, |
| 34, 0, 2097, 2852, 0, 0, 0, 1073, 0, 2803, 0, 2671, 881, 0, 0, 0, |
| 0, 0, 503, 582, 2444, 2364, 1549, 2970, 0, 0, 2903, 1349, 1457, 0, 0, 658, |
| 2543, 0, 0, 1142, 0, 536, 0, 2755, 1259, 0, 1352, 1410, 1491, 0, 0, 0, |
| 0, 710, 0, 0, 0, 0, 1539, 0, 0, 0, 2461, 2677, 806, 565, 132, 0, |
| 69, 492, 0, 0, 0, 0, 194, 0, 0, 0, 0, 79, 2290, 0, 0, 0, |
| 2066, 1304, 1614, 0, 1494, 0, 0, 338, 1058, 439, 1481, 0, 0, 1936, 1124, 1673, |
| 0, 0, 2881, 1324, 0, 0, 1610, 0, 0, 2219, 1206, 0, 0, 876, 2321, 0, |
| 3, 1106, 574, 533, 0, 1660, 0, 2365, 0, 1810, 2144, 0, 0, 0, 785, 0, |
| 1579, 0, 0, 0, 10, 0, 0, 320, 1406, 0, 844, 0, 354, 0, 0, 384, |
| 0, 0, 0, 2535, 0, 0, 0, 0, 0, 0, 0, 0, 2562, 0, 1388, 2066, |
| 0, 1872, 397, 0, 0, 0, 2560, 125, 0, 1538, 0, 0, 0, 2792, 0, 490, |
| 0, 514, 0, 0, 816, 488, 1409, 0, 0, 75, 0, 0, 953, 0, 0, 0, |
| 0, 254, 344, 0, 0, 0, 1522, 604, 0, 0, 1751, 794, 829, 0, 1227, 769, |
| 195, 1721, 0, 0, 804, 0, 2744, 61, 0, 0, 0, 1939, 957, 431, 262, 0, |
| 385, 0, 1405, 1082, 0, 0, 0, 0, 0, 0, 740, 0, 0, 2914, 0, 0, |
| 731, 0, 1692, 0, 524, 2062, 2001, 539, 0, 220, 2597, 741, 2729, 0, 165, 0, |
| 3016, 0, 2397, 0, 0, 0, 2181, 0, 1209, 0, 1843, 1573, 0, 0, 0, 1014, |
| 1288, 0, 608, 792, 0, 0, 2802, 1810, 0, 0, 239, 194, 0, 763, 2719, 2402, |
| 0, 901, 0, 0, 0, 0, 241, 356, 0, 2651, 817, 0, 0, 596, 718, 0, |
| 759, 2169, 0, 1412, 603, 1982, 940, 0, 0, 0, 0, 2338, 0, 155, 644, 2695, |
| 0, 0, 1684, 262, 0, 0, 1500, 0, 0, 0, 1955, 0, 0, 0, 0, 0, |
| 0, 0, 435, 2542, 0, 0, 0, 0, 0, 2639, 0, 0, 0, 905, 0, 3023, |
| 732, 0, 624, 0, 0, 590, 0, 0, 1184, 1912, 0, 782, 1572, 0, 11, 0, |
| 1781, 0, 0, 0, 0, 1066, 0, 319, 0, 2117, 230, 2655, 0, 1199, 956, 0, |
| 0, 976, 0, 2002, 806, 0, 1602, 0, 0, 0, 1227, 0, 1536, 597, 2476, 0, |
| 0, 0, 2875, 1247, 0, 58, 0, 2851, 234, 0, 0, 0, 0, 2596, 0, 0, |
| 0, 0, 832, 1361, 0, 0, 0, 2318, 238, 0, 0, 106, 0, 0, 0, 0, |
| 2909, 0, 452, 2184, 1426, 0, 1179, 0, 395, 734, 0, 1388, 0, 0, 0, 0, |
| 209, 0, 0, 0, 724, 0, 206, 0, 0, 850, 0, 524, 602, 0, 1661, 0, |
| 386, 674, 0, 0, 2391, 0, 1491, 0, 2171, 0, 2779, 1342, 382, 0, 0, 825, |
| 2102, 2703, 0, 62, 0, 0, 1135, 0, 1174, 0, 268, 0, 0, 248, 610, 1880, |
| 0, 2456, 0, 0, 858, 694, 2787, 901, 0, 45, 0, 0, 244, 570, 36, 0, |
| 2423, 641, 1385, 47, 0, 0, 0, 0, 540, 2932, 0, 575, 171, 0, 1553, 0, |
| 0, 0, 2341, 1188, 0, 83, 877, 2387, 0, 1825, 1592, 0, 0, 2930, 246, 2679, |
| 0, 164, 2716, 0, 0, 0, 1433, 1946, 0, 0, 586, 0, 247, 0, 0, 2180, |
| 0, 648, 2486, 0, 1360, 1409, 0, 0, 2117, 0, 0, 897, 0, 605, 222, 2875, |
| 1460, 0, 0, 0, 803, 2685, 2151, 66, 0, 0, 0, 1173, 0, 24, 2156, 1842, |
| 744, 0, 0, 0, 924, 1883, 1424, 0, 504, 311, 837, 0, 0, 0, 420, 0, |
| 1082, 0, 2283, 0, 1399, 0, 0, 2298, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 2918, 273, 1795, 0, 751, 682, 853, 2480, 0, 1182, 0, 0, 0, 0, |
| 751, 2505, 2728, 0, 1397, 0, 1371, 0, 2243, 59, 2191, 0, 0, 1681, 426, 0, |
| 0, 757, 0, 0, 0, 549, 0, 412, 2160, 2944, 1100, 477, 590, 0, 0, 0, |
| 0, 271, 2910, 116, 1775, 161, 0, 0, 0, 1531, 0, 1226, 1711, 2605, 2428, 763, |
| 0, 0, 1281, 0, 1713, 0, 0, 0, 231, 0, 0, 0, 0, 195, 0, 235, |
| 877, 833, 0, 0, 43, 867, 0, 1678, 965, 0, 1386, 0, 533, 0, 0, 174, |
| 2123, 1463, 1466, 0, 0, 0, 2332, 0, 0, 0, 1036, 0, 650, 0, 0, 0, |
| 1966, 1110, 413, 0, 2116, 0, 0, 0, 1263, 157, 0, 0, 3012, 61, 370, 0, |
| 0, 0, 577, 855, 915, 0, 2935, 1018, 630, 396, 0, 2935, 2683, 2123, 2305, 2633, |
| 2369, 0, 0, 0, 0, 805, 554, 38, 0, 0, 0, 2211, 1350, 420, 0, 0, |
| 0, 522, 0, 446, 625, 302, 0, 698, 2872, 3021, 0, 2005, 0, 0, 0, 0, |
| 372, 0, 0, 0, 839, 0, 0, 1263, 565, 275, 0, 0, 0, 0, 0, 682, |
| 0, 709, 529, 1131, 2493, 864, 0, 0, 730, 0, 989, 1661, 0, 179, 0, 1604, |
| 0, 0, 0, 1095, 2546, 0, 2310, 415, 475, 1740, 242, 0, 2966, 0, 686, 2243, |
| 2768, 1141, 0, 0, 0, 0, 0, 0, 1403, 2886, 0, 2763, 424, 1235, 1448, 1107, |
| 0, 0, 1436, 0, 47, 0, 1607, 0, 1831, 0, 2606, 0, 1990, 0, 194, 1499, |
| 0, 699, 3018, 0, 502, 0, 1487, 2239, 0, 0, 2196, 0, 430, 318, 0, 2339, |
| 0, 0, 0, 108, 0, 0, 659, 49, 0, 1321, 388, 0, 2926, 0, 2038, 2726, |
| 0, 2273, 0, 1847, 1490, 903, 1080, 73, 1596, 681, 1296, 0, 0, 2747, 773, 457, |
| 2987, 0, 0, 0, 1111, 0, 0, 0, 50, 0, 0, 0, 0, 272, 0, 176, |
| 720, 649, 0, 0, 578, 0, 0, 0, 2414, 780, 1912, 502, 217, 1296, 2093, 309, |
| 2742, 203, 0, 0, 1298, 685, 2197, 0, 0, 0, 1497, 0, 2363, 0, 0, 575, |
| 2433, 0, 0, 0, 2596, 0, 1180, 0, 0, 305, 30, 0, 0, 0, 1482, 0, |
| 123, 0, 1330, 0, 1377, 1703, 1445, 0, 0, 0, 0, 2876, 0, 862, 634, 166, |
| 0, 0, 0, 0, 2562, 1780, 0, 0, 0, 1238, 2976, 1797, 0, 0, 2230, 0, |
| 0, 1447, 0, 1088, 0, 2925, 0, 0, 570, 0, 0, 0, 0, 0, 0, 1236, |
| 1257, 377, 2600, 0, 684, 0, 0, 0, 0, 460, 2494, 376, 1050, 525, 0, 93, |
| 561, 0, 138, 0, 1482, 0, 0, 1220, 0, 0, 37, 1448, 2332, 1537, 2538, 0, |
| 346, 371, 0, 999, 0, 0, 0, 0, 2796, 0, 1288, 0, 0, 0, 780, 1894, |
| 1258, 1506, 800, 554, 1084, 0, 0, 0, 1552, 0, 0, 0, 428, 0, 0, 1219, |
| 2143, 1042, 1016, 1641, 1043, 0, 1797, 2973, 0, 1863, 1439, 1707, 297, 2709, 631, 6, |
| 42, 0, 1180, 243, 160, 2210, 0, 1714, 1548, 1204, 992, 0, 1216, 298, 0, 317, |
| 703, 2716, 0, 3035, 1034, 52, 848, 0, 0, 2145, 0, 2840, 723, 2059, 178, 359, |
| 3030, 96, 1307, 2379, 0, 0, 0, 2775, 921, 606, 1165, 293, 0, 261, 0, 0, |
| 303, 743, 0, 0, 976, 1170, 1375, 2945, 0, 863, 0, 478, 1247, 2247, 0, 836, |
| 0, 2710, 0, 0, 1247, 0, 2582, 2104, 187, 315, 0, 0, 1518, 0, 0, 0, |
| 2010, 411, 1179, 0, 576, 0, 738, 2508, 0, 194, 995, 947, 3029, 344, 0, 1109, |
| 0, 2200, 0, 933, 0, 0, 545, 2690, 2407, 1586, 0, 0, 2119, 1334, 555, 0, |
| 851, 0, 2586, 0, 306, 1156, 74, 1344, 2953, 0, 717, 1008, 0, 0, 2539, 0, |
| 0, 432, 0, 814, 1319, 764, 0, 0, 1838, 556, 2228, 0, 1192, 1750, 1597, 966, |
| 0, 0, 102, 0, 0, 0, 2731, 0, 2337, 2388, 1487, 0, 0, 0, 1193, 2140, |
| 225, 0, 614, 0, 110, 0, 1406, 582, 0, 0, 1084, 1474, 1225, 1961, 935, 799, |
| 2281, 0, 0, 2080, 717, 397, 2773, 1355, 2981, 809, 611, 2952, 0, 762, 2460, 819, |
| 977, 0, 374, 304, 752, 1498, 0, 508, 66, 787, 152, 0, 221, 1613, 969, 0, |
| 0, 2392, 603, 125, 2078, 0, 0, 1390, 25, 0, 2947, 1504, 1083, 0, 131, 0, |
| 2131, 742, 0, 1306, 0, 883, 0, 730, 1216, 0, 1161, 1934, 2278, 896, 1521, 0, |
| 1288, 0, 1638, 0, 463, 501, 0, 0, 392, 254, 1046, 1048, 1388, 2163, 0, 0, |
| 2687, 946, 0, 0, 1268, 0, 1615, 2891, 691, 0, 0, 0, 1468, 0, 1374, 0, |
| 1132, 940, 1798, 75, 0, 0, 1813, 0, 964, 0, 1478, 0, 0, 1028, 1645, 850, |
| 2141, 1522, 2179, 0, 0, 0, 2293, 0, 2593, 240, 0, 2044, 72, 143, 0, 2573, |
| 0, 2598, 2029, 0, 1083, 879, 510, 968, 0, 1526, 3024, 1504, 288, 0, 0, 0, |
| 0, 0, 1376, 1265, 2561, 80, 326, 0, 0, 1548, 460, 2253, 324, 1296, 1433, 8, |
| 0, 0, 1269, 2427, 285, 0, 1214, 320, 1706, 0, 0, 0, 519, 44, 0, 488, |
| 2943, 235, 0, 1400, 1697, 1022, 0, 2741, 0, 0, 356, 1247, 0, 474, 0, 0, |
| 0, 7, 618, 699, 2581, 1075, 1354, 0, 2975, 286, 0, 157, 2057, 568, 619, 1263, |
| 374, 0, 0, 753, 1346, 341, 124, 1460, 1046, 2616, 0, 0, 20, 468, 0, 2404, |
| 307, 0, 0, 0, 0, 2671, 0, 0, 0, 725, 2708, 744, 621, 0, 539, 0, |
| 2934, 986, 0, 1598, 0, 1280, 1546, 570, 2539, 0, 1895, 0, 1585, 233, 2952, 0, |
| 2185, 722, 1357, 353, 679, 1114, 836, 2421, 1941, 1195, 546, 2640, 1240, 0, 2635, 0, |
| 2862, 184, 1355, 0, 2300, 0, 633, 13, 1185, 2135, 0, 1667, 2281, 616, 0, 0, |
| 0, 0, 775, 0, 535, 1651, 0, 0, 2772, 0, 0, 0, 0, 0, 549, 746, |
| 1077, 0, 2495, 0, 358, 0, 0, 0, 0, 644, 2803, 0, 2974, 42, 252, 1086, |
| 2909, 0, 0, 733, 1103, 0, 1222, 0, 1389, 1342, 1227, 107, 998, 1069, 2223, 0, |
| 0, 0, 1000, 1430, 1492, 1314, 3002, 0, 2689, 0, 431, 0, 2844, 0, 518, 1899, |
| 0, 729, 104, 1646, 0, 736, 989, 0, 0, 708, 0, 1078, 227, 0, 0, 0, |
| 897, 5, 0, 0, 0, 692, 301, 0, 0, 0, 70, 0, 68, 136, 956, 2085, |
| 2664, 0, 1019, 316, 2909, 1297, 0, 1044, 95, 439, 1273, 0, 739, 1998, 1460, 1361, |
| 0, 231, 0, 260, 988, 2095, 2533, 322, 1044, 0, 2012, 0, 2206, 778, 318, 0, |
| 2248, 552, 0, 0, 2133, 0, 0, 0, 0, 1216, 1341, 0, 2375, 899, 0, 0, |
| 1496, 0, 0, 1444, 1342, 983, 0, 462, 499, 0, 0, 594, 333, 986, 687, 0, |
| 996, 613, 0, 16, 2444, 2848, 0, 264, 1021, 0, 2116, 10, 394, 2820, 1431, 2970, |
| 1994, 746, 1191, 2513, 2525, 0, 1274, 617, 0, 1199, 0, 0, 1428, 1454, 0, 2894, |
| 1437, 612, 956, 692, 589, 2688, 0, 440, 2287, 0, 0, 0, 401, 1576, 0, 0, |
| 2435, 0, 602, 1969, 149, 572, 1976, 717, 2475, 1117, 1076, 137, 1400, 2016, 0, 0, |
| 1608, 0, 0, 0, 0, 0, 1096, 2756, 511, 2096, 2680, 0, 0, 1399, 1149, 775, |
| 2754, 359, 0, 987, 0, 1665, 2248, 0, 26, 2221, 1555, 1122, 2456, 0, 2725, 2206, |
| 2397, 0, 1946, 871, 0, 1476, 653, 0, 0, 2916, 0, 0, 0, 1877, 183, 0, |
| 1292, 0, 446, 384, 1765, 378, 643, 984, 0, 0, 0, 1726, 2938, 0, 705, 0, |
| 0, 197, 557, 0, 2855, 0, 0, 1233, 0, 0, 0, 2021, 0, 2760, 2673, 672, |
| 26, 834, 0, 0, 2343, 722, 0, 828, 1512, 545, 1566, 0, 1911, 0, 1231, 0, |
| 1585, 2813, 1631, 2987, 0, 1331, 1323, 961, 0, 891, 1175, 1120, 0, 0, 0, 0, |
| 1355, 0, 251, 1572, 1081, 421, 2862, 0, 391, 0, 2989, 0, 0, 1333, 1031, 2656, |
| 2998, 1540, 935, 0, 1266, 0, 0, 0, 0, 0, 1015, 0, 0, 523, 1414, 506, |
| 970, 1704, 0, 0, 2379, 0, 1453, 2329, 1080, 0, 847, 0, 1341, 0, 364, 0, |
| 903, 0, 2540, 2987, 0, 0, 0, 0, 1107, 0, 1043, 2531, 579, 289, 1231, 0, |
| 1464, 1535, 0, 389, 628, 1214, 0, 0, 0, 0, 1620, 2748, 1006, 704, 348, 0, |
| 0, 0, 0, 1186, 697, 296, 489, 439, 1707, 0, 1810, 1194, 2427, 1052, 241, 696, |
| 1170, 0, 310, 0, 2875, 0, 2698, 629, 1196, 365, 0, 0, 1241, 0, 1979, 1521, |
| 772, 0, 0, 898, 50, 0, 976, 0, 341, 989, 239, 905, 2983, 0, 894, 303, |
| 1114, 0, 257, 49, 0, 1408, 0, 1934, 2447, 0, 494, 1027, 2002, 164, 0, 1687, |
| 0, 0, 0, 1832, 1614, 0, 0, 122, 0, 1407, 0, 1369, 0, 954, 1169, 0, |
| 201, 2998, 1283, 934, 2436, 451, 2231, 0, 620, 1549, 1645, 1720, 15, 868, 1826, 0, |
| 0, 1095, 0, 53, 0, 0, 0, 1108, 0, 1154, 204, 2420, 0, 1099, 860, 0, |
| 0, 0, 596, 995, 267, 0, 1026, 57, 89, 0, 1571, 312, 1607, 0, 0, 1118, |
| 19, 142, 431, 0, 1369, 0, 1590, 88, 1878, 2591, 190, 0, 977, 1187, 0, 0, |
| 38, 94, 681, 2015, 2274, 0, 0, 0, 0, 0, 575, 0, 2994, 707, 922, 268, |
| 0, 0, 983, 2544, 233, 1704, 421, 0, 0, 474, 2276, 943, 0, 278, 0, 2776, |
| 359, 0, 2457, 0, 0, 0, 0, 1415, 2739, 1955, 1880, 0, 1408, 0, 1319, 2586, |
| 299, 1565, 1554, 750, 1163, 0, 336, 550, 0, 0, 1611, 0, 828, 0, 359, 1149, |
| 216, 0, 195, 719, 0, 2435, 2627, 402, 1245, 1392, 2935, 683, 574, 1013, 0, 0, |
| 399, 0, 3011, 559, 0, 206, 0, 0, 0, 350, 268, 0, 1258, 0, 0, 0, |
| 500, 0, 1773, 0, 1225, 2584, 1341, 0, 0, 282, 1378, 469, 982, 0, 2044, 0, |
| 105, 2704, 2656, 0, 0, 0, 2289, 1302, 226, 2208, 1271, 689, 0, 2482, 800, 114, |
| 2305, 0, 0, 0, 107, 0, 868, 0, 1169, 753, 1582, 2877, 1393, 1309, 869, 406, |
| 1429, 116, 2016, 1280, 0, 1149, 252, 375, 344, 0, 499, 611, 0, 0, 0, 1266, |
| 744, 1112, 2321, 0, 0, 2233, 542, 0, 2938, 1178, 2987, 2708, 0, 0, 1347, 0, |
| 0, 2624, 894, 920, 152, 0, 875, 567, 1201, 996, 1016, 2228, 0, 0, 803, 0, |
| 0, 2160, 333, 776, 2187, 188, 2896, 391, 2750, 0, 915, 1389, 0, 0, 1276, 439, |
| 2939, 0, 686, 2548, 1353, 0, 2854, 2908, 240, 2868, 2845, 920, 0, 0, 0, 193}; |
| |
| 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 %= 3040; |
| } |
| return mangledkG[sum]; |
| } |
| |
| int MangledPerfectHash(const char *key) |
| { |
| if (strlen(key) > 40) |
| return 0; |
| |
| return (MangledHashG(key, mangledkT1) + MangledHashG(key, mangledkT2)) % 3040; |
| } |
| |
| constexpr int unmangledkT1[] = {86, 27, 189, 69, 7, 154, 151, 74, 122, 118, 240, 91, 8, |
| 82, 232, 116, 68, 86, 209, 110, 11, 166, 204, 202, 255, 67}; |
| constexpr int unmangledkT2[] = {166, 86, 137, 88, 236, 245, 31, 246, 157, 131, 152, 156, 20, |
| 220, 190, 221, 176, 32, 89, 208, 109, 166, 249, 144, 205, 95}; |
| constexpr int unmangledkG[] = { |
| 0, 0, 0, 0, 0, 89, 0, 87, 116, 0, 76, 0, 178, 0, 93, 0, 237, 0, 244, |
| 236, 29, 0, 0, 6, 0, 0, 115, 41, 0, 0, 35, 52, 72, 0, 92, 0, 7, 0, |
| 246, 0, 120, 0, 214, 93, 146, 102, 0, 0, 93, 50, 0, 0, 0, 0, 100, 177, 84, |
| 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 1, 134, 58, 0, 176, 0, 0, 27, 0, |
| 0, 110, 132, 126, 0, 99, 193, 0, 0, 10, 86, 188, 257, 0, 0, 0, 55, 60, 0, |
| 46, 0, 0, 96, 172, 0, 0, 5, 102, 211, 0, 234, 65, 0, 0, 137, 237, 240, 179, |
| 159, 45, 0, 0, 159, 236, 0, 119, 0, 59, 0, 0, 0, 28, 43, 0, 152, 0, 214, |
| 157, 250, 127, 23, 51, 37, 9, 0, 223, 155, 0, 0, 0, 0, 0, 111, 159, 108, 184, |
| 240, 0, 49, 0, 257, 40, 0, 181, 102, 31, 0, 129, 54, 124, 157, 2, 83, 144, 0, |
| 0, 0, 249, 0, 213, 248, 0, 240, 254, 56, 166, 103, 0, 0, 264, 0, 0, 46, 109, |
| 0, 0, 35, 68, 33, 17, 0, 192, 29, 104, 0, 81, 2, 106, 63, 69, 45, 0, 34, |
| 239, 118, 15, 245, 7, 101, 0, 114, 81, 115, 0, 0, 141, 139, 0, 119, 223, 71, 156, |
| 175, 18, 228, 0, 156, 62, 25, 37, 0, 0, 0, 107, 213, 8, 3, 106, 149, 38, 0, |
| 66, 91, 252, 121, 74, 0, 0, 152, 19, 213, 49, 226, 25, 88, 0, 232, 53, 111, 43}; |
| |
| 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 %= 266; |
| } |
| return unmangledkG[sum]; |
| } |
| |
| int UnmangledPerfectHash(const char *key) |
| { |
| if (strlen(key) > 26) |
| return 0; |
| |
| return (UnmangledHashG(key, unmangledkT1) + UnmangledHashG(key, unmangledkT2)) % 266; |
| } |
| |
| } // 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 |