| // 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" |
| |
| namespace sh |
| { |
| |
| std::ostream &operator<<(std::ostream &os, const ImmutableString &str) |
| { |
| return os.write(str.data(), str.length()); |
| } |
| |
| } // namespace sh |
| |
| #if defined(_MSC_VER) |
| # pragma warning(disable : 4309) // truncation of constant value |
| #endif |
| |
| namespace |
| { |
| |
| constexpr int mangledkT1[] = {2540, 2567, 1310, 307, 1429, 81, 1838, 2549, 711, 1470, |
| 2521, 195, 1556, 1823, 1551, 104, 51, 1880, 1024, 869, |
| 228, 428, 561, 1055, 1733, 1166, 279, 2393, 1386, 947, |
| 193, 2129, 975, 1305, 174, 2147, 831, 2207, 613, 987}; |
| constexpr int mangledkT2[] = {1206, 1083, 2011, 7, 1824, 646, 999, 1423, 955, 464, |
| 2624, 2648, 2452, 150, 1328, 721, 1905, 420, 1639, 2301, |
| 1082, 239, 42, 2148, 2379, 1366, 1972, 1087, 1369, 1811, |
| 2143, 73, 1567, 467, 2299, 998, 123, 1281, 2343, 2017}; |
| constexpr int mangledkG[] = { |
| 0, 0, 1363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 869, 0, |
| 0, 1014, 0, 0, 0, 0, 0, 0, 0, 0, 1225, 0, 0, 0, 2421, 0, |
| 0, 0, 0, 0, 0, 0, 0, 2039, 0, 0, 2370, 0, 0, 479, 0, 0, |
| 0, 0, 681, 0, 0, 0, 0, 1966, 0, 0, 0, 511, 461, 2570, 0, 0, |
| 0, 0, 0, 0, 0, 0, 336, 0, 0, 388, 0, 0, 0, 0, 0, 0, |
| 0, 0, 1496, 827, 0, 0, 0, 0, 0, 1915, 0, 988, 0, 0, 1057, 0, |
| 0, 0, 0, 0, 0, 0, 0, 1090, 0, 0, 0, 0, 0, 0, 206, 0, |
| 1532, 1554, 219, 0, 0, 45, 1120, 0, 2637, 0, 0, 0, 0, 0, 1206, 0, |
| 0, 0, 0, 1979, 0, 0, 0, 2538, 1237, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 455, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 1069, 0, 1324, |
| 0, 0, 2436, 0, 0, 140, 0, 0, 0, 238, 0, 0, 0, 2553, 0, 0, |
| 2201, 456, 1493, 0, 0, 1389, 545, 1528, 2471, 0, 2399, 1869, 0, 722, 156, 846, |
| 0, 0, 0, 0, 0, 236, 0, 1076, 693, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 734, 0, 0, 2266, 2041, 0, 0, 0, 839, 0, 0, 2477, 0, |
| 1816, 0, 0, 548, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 273, 0, 2014, 0, 2324, 2371, 864, 2414, 112, 0, 0, 0, 395, 0, 0, |
| 0, 1181, 0, 583, 0, 0, 0, 591, 2470, 1014, 0, 680, 425, 0, 0, 2200, |
| 1137, 801, 1270, 0, 0, 0, 713, 0, 250, 1105, 0, 0, 2658, 0, 1967, 0, |
| 123, 0, 0, 2380, 809, 1422, 0, 2394, 0, 0, 0, 0, 0, 1291, 0, 0, |
| 602, 2442, 0, 0, 1082, 2667, 0, 1841, 674, 0, 0, 1412, 0, 0, 2387, 0, |
| 0, 1060, 1066, 0, 0, 2037, 0, 0, 1897, 0, 0, 0, 128, 0, 0, 0, |
| 0, 0, 1890, 0, 0, 0, 0, 453, 1322, 0, 0, 425, 0, 0, 0, 0, |
| 105, 2615, 601, 1801, 0, 1334, 0, 435, 0, 0, 0, 0, 0, 664, 0, 666, |
| 0, 89, 229, 0, 0, 278, 0, 2415, 0, 1616, 579, 467, 518, 0, 0, 1241, |
| 337, 1243, 2324, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 1761, 469, 934, |
| 0, 1009, 0, 355, 588, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, |
| 0, 2032, 0, 0, 0, 2222, 0, 67, 0, 0, 0, 0, 0, 1184, 1656, 1765, |
| 696, 0, 0, 704, 0, 308, 648, 795, 0, 0, 1480, 0, 0, 1595, 1691, 1109, |
| 0, 0, 1682, 0, 0, 392, 0, 0, 0, 0, 0, 1197, 1207, 1725, 0, 0, |
| 0, 0, 628, 0, 1853, 1126, 0, 0, 0, 0, 0, 1256, 0, 399, 1481, 12, |
| 2614, 1886, 0, 0, 0, 0, 0, 2676, 2081, 0, 1295, 1919, 0, 0, 0, 0, |
| 775, 1055, 0, 0, 0, 2420, 0, 0, 0, 2355, 2573, 0, 2171, 1228, 2412, 86, |
| 0, 651, 0, 0, 774, 408, 0, 791, 0, 1821, 0, 719, 0, 2640, 0, 1054, |
| 0, 0, 0, 0, 1560, 0, 444, 2172, 0, 115, 0, 0, 1684, 747, 0, 1183, |
| 0, 0, 0, 743, 0, 1422, 2131, 808, 449, 1294, 0, 0, 866, 0, 0, 0, |
| 0, 1834, 1941, 1356, 0, 1468, 2558, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 179, 0, 1072, 0, 1467, 320, 1685, 0, 1009, 0, 0, 1834, 1226, 0, 611, |
| 465, 0, 879, 0, 0, 203, 1142, 0, 0, 0, 0, 0, 0, 324, 0, 1088, |
| 0, 0, 0, 0, 688, 1348, 2599, 55, 0, 909, 323, 0, 0, 0, 207, 0, |
| 1020, 0, 217, 2425, 0, 2001, 0, 1193, 0, 0, 1984, 0, 0, 235, 0, 0, |
| 0, 542, 2316, 916, 2048, 2653, 1178, 0, 0, 497, 1212, 0, 1907, 571, 0, 683, |
| 218, 641, 1865, 0, 366, 0, 960, 0, 0, 0, 0, 27, 0, 1486, 413, 138, |
| 0, 2508, 284, 0, 0, 571, 0, 0, 0, 0, 0, 543, 0, 471, 1240, 2315, |
| 1349, 1380, 1781, 0, 0, 578, 0, 1433, 1602, 0, 2585, 0, 1267, 135, 0, 284, |
| 454, 0, 0, 448, 0, 250, 0, 0, 225, 232, 0, 1248, 0, 0, 202, 906, |
| 384, 940, 0, 0, 278, 2456, 0, 738, 1089, 2431, 1530, 985, 0, 974, 0, 0, |
| 86, 1820, 0, 2641, 0, 1908, 898, 1747, 0, 1116, 1973, 2397, 0, 0, 0, 0, |
| 956, 0, 1046, 2357, 321, 0, 1033, 0, 498, 1184, 0, 0, 0, 801, 1354, 0, |
| 0, 1882, 0, 0, 2585, 0, 382, 270, 877, 2208, 0, 1837, 1695, 0, 0, 0, |
| 405, 478, 828, 307, 15, 170, 640, 1223, 0, 0, 0, 9, 0, 604, 825, 0, |
| 294, 0, 1016, 66, 279, 0, 2370, 0, 0, 0, 670, 0, 2225, 0, 0, 47, |
| 0, 759, 298, 0, 1008, 2336, 0, 0, 44, 128, 1720, 0, 1181, 2074, 0, 1015, |
| 1407, 0, 0, 0, 429, 0, 0, 517, 0, 1177, 923, 1177, 1832, 2381, 680, 621, |
| 1074, 529, 1115, 0, 0, 284, 211, 0, 1791, 1410, 176, 0, 0, 1983, 0, 931, |
| 1295, 0, 0, 0, 255, 2632, 160, 0, 603, 0, 0, 942, 0, 0, 2313, 825, |
| 2095, 0, 0, 0, 0, 1365, 1295, 0, 721, 1798, 1828, 0, 0, 1404, 0, 1874, |
| 1437, 0, 563, 935, 0, 0, 0, 0, 40, 1085, 1765, 370, 0, 0, 0, 2422, |
| 0, 0, 0, 0, 616, 819, 662, 0, 0, 835, 2273, 0, 2322, 0, 0, 0, |
| 1504, 483, 400, 2386, 2510, 1988, 1149, 2580, 1084, 2355, 0, 0, 0, 484, 0, 0, |
| 408, 0, 0, 217, 0, 1317, 0, 1633, 0, 980, 481, 351, 469, 678, 2319, 0, |
| 1275, 0, 775, 2031, 1275, 0, 1009, 667, 857, 790, 695, 2312, 0, 1829, 417, 934, |
| 0, 0, 243, 0, 1367, 0, 0, 713, 0, 0, 0, 785, 2153, 2254, 0, 244, |
| 0, 0, 0, 0, 2661, 0, 0, 270, 2429, 0, 659, 1639, 0, 0, 1743, 0, |
| 775, 2613, 0, 0, 649, 399, 653, 462, 593, 2450, 499, 0, 2217, 2468, 365, 0, |
| 0, 2400, 1539, 0, 0, 369, 2103, 0, 871, 232, 1208, 126, 0, 0, 289, 1592, |
| 1421, 0, 0, 0, 391, 485, 0, 408, 0, 515, 0, 1926, 2661, 0, 0, 0, |
| 0, 0, 0, 1352, 0, 0, 0, 0, 0, 577, 0, 830, 0, 1041, 1038, 0, |
| 938, 1163, 0, 0, 0, 2386, 445, 0, 707, 0, 2190, 0, 0, 610, 661, 1200, |
| 493, 0, 777, 1640, 99, 0, 0, 1043, 0, 465, 582, 0, 1042, 801, 1174, 1502, |
| 1394, 0, 0, 2025, 762, 1057, 0, 0, 0, 1137, 0, 0, 547, 391, 801, 336, |
| 1787, 1058, 0, 281, 664, 0, 1622, 257, 0, 0, 0, 2124, 0, 0, 2304, 0, |
| 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, 2504, 2519, 2502, 752, 2308, 2193, |
| 2277, 2640, 0, 923, 0, 1340, 1057, 0, 690, 0, 1142, 0, 2504, 0, 1263, 0, |
| 897, 122, 494, 0, 0, 1199, 0, 0, 0, 0, 0, 878, 1612, 0, 0, 0, |
| 73, 1093, 0, 925, 0, 0, 0, 2391, 0, 781, 1691, 736, 739, 0, 0, 361, |
| 711, 135, 0, 0, 550, 1768, 0, 0, 199, 0, 0, 791, 2447, 0, 0, 2557, |
| 1155, 829, 0, 1758, 2175, 1578, 1388, 1346, 1364, 0, 2289, 765, 1399, 0, 0, 961, |
| 512, 2633, 0, 0, 387, 1128, 1125, 278, 0, 346, 1007, 1932, 0, 0, 0, 2385, |
| 2490, 1161, 1251, 400, 2029, 1773, 0, 0, 0, 0, 373, 0, 0, 453, 0, 1874, |
| 343, 306, 0, 2029, 778, 233, 0, 0, 2246, 0, 875, 1252, 1913, 0, 0, 192, |
| 635, 2565, 0, 0, 0, 0, 1988, 2277, 0, 1111, 409, 0, 0, 0, 2422, 181, |
| 0, 0, 516, 925, 0, 0, 562, 130, 126, 2220, 505, 1102, 318, 0, 0, 0, |
| 427, 0, 0, 0, 2196, 0, 0, 675, 706, 0, 219, 0, 0, 0, 341, 947, |
| 350, 0, 104, 0, 0, 0, 0, 0, 276, 0, 0, 1806, 1245, 783, 366, 0, |
| 765, 0, 1850, 1754, 0, 581, 805, 0, 0, 2307, 0, 48, 844, 0, 466, 0, |
| 13, 1327, 2168, 693, 1182, 0, 0, 0, 1345, 197, 0, 1067, 150, 1123, 357, 0, |
| 0, 988, 0, 0, 0, 39, 1191, 516, 0, 2357, 774, 0, 633, 194, 2495, 0, |
| 155, 0, 0, 390, 0, 672, 0, 0, 0, 1033, 0, 0, 0, 1307, 1506, 0, |
| 0, 1258, 279, 484, 0, 0, 979, 2510, 536, 0, 2270, 0, 0, 0, 0, 2083, |
| 487, 9, 821, 0, 0, 0, 884, 357, 0, 1289, 0, 0, 0, 583, 500, 0, |
| 1194, 0, 1554, 0, 2047, 2642, 0, 0, 325, 0, 2536, 0, 184, 927, 1448, 0, |
| 0, 0, 1591, 2057, 0, 291, 0, 10, 0, 0, 523, 2673, 864, 0, 0, 414, |
| 0, 721, 0, 698, 604, 0, 0, 0, 5, 0, 0, 0, 2389, 2292, 0, 0, |
| 0, 1955, 2082, 0, 64, 2227, 697, 0, 0, 0, 1096, 0, 379, 225, 0, 0, |
| 0, 0, 0, 1545, 2316, 0, 457, 0, 418, 0, 914, 0, 2030, 0, 0, 0, |
| 186, 119, 0, 0, 624, 98, 0, 0, 0, 1066, 0, 2258, 0, 0, 1720, 1500, |
| 0, 170, 0, 1378, 320, 2418, 0, 0, 223, 0, 0, 679, 535, 2289, 0, 0, |
| 460, 704, 837, 476, 0, 1358, 628, 0, 0, 614, 0, 0, 854, 0, 839, 281, |
| 2181, 302, 807, 0, 0, 261, 1340, 0, 614, 0, 0, 2103, 0, 762, 222, 0, |
| 0, 0, 0, 0, 964, 2307, 1442, 2573, 0, 0, 1156, 1928, 1261, 0, 0, 1123, |
| 1080, 0, 378, 293, 1593, 0, 837, 326, 1478, 0, 1181, 0, 1251, 0, 0, 1360, |
| 0, 428, 0, 503, 1372, 0, 2600, 918, 383, 201, 387, 0, 36, 2057, 0, 0, |
| 999, 0, 728, 1295, 0, 877, 2034, 916, 619, 862, 0, 1722, 0, 178, 1121, 0, |
| 1776, 728, 297, 892, 0, 477, 913, 2385, 108, 1272, 0, 0, 0, 655, 0, 0, |
| 1862, 371, 0, 1407, 1043, 1222, 694, 28, 831, 1677, 1224, 835, 0, 564, 2471, 2625, |
| 523, 0, 15, 0, 0, 0, 0, 0, 2210, 1035, 149, 0, 0, 2537, 0, 0, |
| 2381, 555, 0, 21, 1014, 941, 1, 483, 2402, 1011, 928, 855, 1662, 721, 0, 0, |
| 2512, 0, 0, 0, 815, 622, 0, 2670, 353, 392, 0, 1273, 0, 358, 457, 668, |
| 0, 260, 32, 0, 1788, 1083, 1407, 0, 0, 2467, 1731, 0, 204, 0, 0, 2230, |
| 1916, 0, 0, 0, 1201, 0, 0, 0, 669, 1341, 1585, 2444, 0, 0, 993, 1176, |
| 526, 0, 1197, 1186, 0, 0, 0, 332, 1215, 0, 0, 0, 928, 1687, 0, 364, |
| 1766, 964, 2127, 845, 0, 1015, 970, 879, 594, 0, 0, 1000, 118, 0, 703, 88, |
| 0, 0, 2221, 0, 0, 1715, 2528, 1723, 2390, 0, 1667, 574, 0, 0, 100, 894, |
| 0, 2361, 2309, 412, 692, 0, 0, 82, 2400, 0, 424, 881, 0, 0, 1303, 0, |
| 0, 0, 0, 0, 1347, 0, 404, 180, 1027, 1235, 0, 0, 2550, 2586, 0, 0, |
| 290, 0, 284, 0, 1306, 0, 0, 2559, 0, 0, 1283, 0, 0, 297, 529, 0, |
| 0, 0, 616, 0, 1761, 0, 1726, 677, 183, 0, 214, 1409, 0, 1903, 0, 0, |
| 2258, 2544, 2654, 701, 69, 731, 133, 0, 39, 2446, 1330, 181, 0, 2193, 0, 110, |
| 0, 2663, 618, 460, 918, 0, 0, 0, 606, 0, 1233, 255, 0, 650, 389, 2220, |
| 0, 827, 0, 2416, 0, 87, 1041, 1608, 291, 2232, 1133, 1851, 1491, 1238, 1856, 0, |
| 0, 363, 1321, 2267, 0, 332, 507, 1877, 333, 0, 0, 0, 1537, 0, 1105, 2371, |
| 459, 1543, 296, 0, 1318, 0, 2402, 0, 0, 113, 684, 0, 0, 0, 541, 0, |
| 0, 0, 391, 1015, 1060, 0, 1144, 1247, 0, 1202, 0, 1070, 1511, 0, 0, 978, |
| 628, 577, 463, 0, 1229, 774, 0, 0, 666, 60, 1623, 2259, 0, 0, 2554, 1099, |
| 761, 385, 26, 575, 0, 0, 2377, 353, 689, 0, 0, 0, 0, 2464, 1926, 0, |
| 841, 2290, 663, 256, 0, 0, 678, 0, 2600, 0, 1085, 147, 1025, 0, 0, 969, |
| 0, 0, 2640, 2302, 1065, 844, 2391, 0, 564, 1933, 1337, 0, 2564, 361, 0, 424, |
| 2432, 2238, 0, 191, 671, 616, 1397, 974, 629, 888, 0, 0, 0, 0, 1701, 2183, |
| 1092, 1791, 172, 2539, 0, 361, 2301, 237, 2636, 716, 1314, 2570, 0, 0, 0, 0, |
| 2001, 2084, 2645, 0, 0, 456, 1398, 477, 565, 110, 210, 210, 1034, 137, 291, 0, |
| 1843, 0, 1723, 0, 0, 0, 669, 1962, 726, 1924, 1544, 0, 2501, 635, 816, 0, |
| 1225, 756, 0, 0, 574, 712, 2201, 1379, 0, 0, 171, 256, 836, 0, 2513, 0, |
| 472, 2523, 2187, 714, 1648, 0, 0, 0, 0, 709, 0, 2434, 0, 132, 0, 0, |
| 0, 861, 729, 1643, 1478, 0, 148, 1787, 548, 1105, 0, 0, 2456, 2671, 0, 0, |
| 950, 0, 2557, 310, 0, 105, 378, 0, 1653, 1581, 0, 52, 0, 0, 523, 1019, |
| 2080, 27, 0, 0, 0, 924, 581, 5, 835, 568, 2528, 2301, 0, 0, 0, 0, |
| 1226, 0, 1311, 0, 2320, 925, 0, 1312, 1279, 501, 0, 745, 1221, 0, 2106, 217, |
| 470, 0, 0, 15, 0, 718, 0, 0, 0, 957, 2446, 0, 1083, 0, 1209, 157, |
| 201, 0, 1389, 906, 2113, 177, 1907, 0, 407, 0, 1095, 1955, 1238, 2317, 0, 474, |
| 0, 442, 0, 83, 1308, 650, 1922, 0, 1402, 0, 462, 632, 2424, 0, 1040, 0, |
| 2419, 2545, 0, 1637, 339, 0, 1939, 0, 998, 1900, 122, 0, 186, 0, 129, 0, |
| 388, 411, 0, 577, 199, 1823, 789, 0, 935, 0, 0, 0, 0, 0, 2010, 0, |
| 792, 2408, 0, 0, 0, 2325, 2634, 8, 0, 0, 0, 0, 1660, 1953, 481, 189, |
| 1747, 2396, 0, 0, 0, 1948, 0, 0, 0, 118, 269, 1572, 0, 0, 691, 2527, |
| 1553, 305, 1931, 982, 0, 0, 990, 9, 216, 622, 1370, 0, 1337, 93, 0, 608, |
| 1946, 1159, 0, 0, 1159, 527, 1637, 1554, 0, 1058, 1556, 2366, 0, 1175, 2119, 252, |
| 0, 1502, 1921, 0, 2419, 0, 34, 0, 596, 51, 317, 0, 0, 0, 971, 396, |
| 1260, 0, 0, 0, 2456, 859, 0, 0, 0, 251, 1918, 0, 316, 0, 0, 377, |
| 547, 1305, 108, 190, 0, 0, 1899, 0, 109, 1064, 1509, 0, 2641, 330, 0, 151, |
| 300, 0, 2349, 0, 475, 0, 2054, 2045, 685, 1823, 0, 423, 2445, 1255, 426, 1878, |
| 582, 773, 0, 0, 1196, 2341, 869, 0, 84, 58, 0, 755, 40, 2632, 1544, 1274, |
| 0, 1036, 0, 1626, 446, 63, 586, 2030, 724, 0, 393, 2447, 560, 163, 0, 0, |
| 0, 801, 131, 696, 419, 895, 852, 0, 346, 2195, 113, 0, 2144, 0, 0, 473, |
| 1779, 0, 909, 1187, 2045, 0, 0, 1355, 658, 2256, 1098, 968, 0, 83, 1188, 0, |
| 0, 95, 0, 0, 0, 803, 1589, 0, 436, 89, 1908, 376, 0, 36, 53, 578, |
| 769, 1360, 0, 0, 0, 2085, 0, 0, 0, 0, 623, 991, 183, 1772, 247, 166, |
| 0, 0, 0, 2342, 0, 2153, 501, 1002, 445, 800, 0, 1019, 1224, 745, 152, 812, |
| 142, 0, 578, 1371, 2320, 1372, 977, 379, 0, 0, 0, 1016, 1262, 0, 0, 0, |
| 0, 2257, 1392, 0, 2491, 0, 0, 0, 572, 0, 0, 0, 0, 299, 0, 0, |
| 1611, 571, 0, 0, 830, 403, 1160, 1111, 0, 859, 548, 1087, 2387, 889, 0, 397, |
| 1288, 0, 466, 0, 287, 1112, 807, 953, 1190, 992, 576, 509, 335, 546, 0, 0, |
| 482, 0, 2141, 1028, 600, 1818, 1771, 280, 225, 2589, 297, 2429, 0, 0, 0, 2597, |
| 0, 0, 0, 863, 0, 1213, 0, 678, 919, 1296, 296, 1341, 0, 0, 0, 1054, |
| 573, 2455, 0, 0, 567, 0, 1211, 1081, 2151, 631, 351, 822, 0, 0, 0, 0, |
| 982, 0, 0, 384, 1423, 0, 136, 397, 117, 0, 1496, 0, 0, 999, 1104, 0, |
| 0, 1145, 776, 0, 1269, 0, 1152, 678, 0, 1022, 95, 2268, 0, 0, 190, 373, |
| 691, 752, 0, 1804, 0, 1341, 0, 0, 0, 0, 0, 0, 129, 0, 243, 1588, |
| 361, 325, 0, 172, 324, 590}; |
| |
| 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 %= 2678; |
| } |
| return mangledkG[sum]; |
| } |
| |
| int MangledPerfectHash(const char *key) |
| { |
| if (strlen(key) > 40) |
| { |
| return 0; |
| } |
| |
| return (MangledHashG(key, mangledkT1) + MangledHashG(key, mangledkT2)) % 2678; |
| } |
| |
| constexpr int unmangledkT1[] = {141, 187, 20, 214, 16, 317, 21, 202, 208, 161, 55, |
| 320, 91, 91, 268, 308, 221, 262, 118, 260, 195, 55, |
| 0, 209, 41, 176, 190, 93, 50, 126, 183, 265}; |
| constexpr int unmangledkT2[] = {100, 311, 0, 74, 44, 103, 261, 51, 123, 161, 42, |
| 272, 120, 248, 312, 47, 289, 171, 138, 263, 227, 289, |
| 150, 279, 29, 24, 17, 169, 280, 120, 293, 114}; |
| constexpr int unmangledkG[] = { |
| 0, 0, 0, 0, 0, 54, 0, 123, 288, 0, 0, 0, 0, 0, 206, 0, 0, 0, 174, |
| 28, 157, 4, 296, 0, 221, 0, 283, 0, 0, 255, 323, 0, 0, 0, 0, 0, 9, 0, |
| 171, 0, 0, 0, 78, 288, 0, 0, 0, 302, 227, 0, 174, 0, 0, 0, 277, 42, 229, |
| 217, 237, 0, 274, 0, 0, 316, 220, 15, 0, 0, 77, 0, 0, 192, 287, 287, 242, 20, |
| 0, 159, 0, 77, 107, 0, 0, 0, 0, 249, 0, 121, 0, 0, 0, 10, 114, 0, 75, |
| 0, 0, 196, 0, 268, 0, 116, 86, 0, 145, 0, 24, 0, 282, 0, 25, 0, 307, 259, |
| 0, 0, 0, 0, 2, 294, 85, 0, 142, 0, 87, 0, 140, 0, 80, 46, 65, 0, 208, |
| 0, 0, 0, 0, 290, 67, 0, 0, 0, 0, 0, 38, 0, 0, 0, 150, 0, 163, 100, |
| 190, 41, 92, 318, 0, 0, 0, 0, 18, 0, 0, 29, 38, 215, 53, 239, 0, 46, 0, |
| 16, 163, 0, 16, 297, 307, 267, 91, 217, 101, 0, 166, 0, 0, 268, 224, 0, 0, 43, |
| 91, 137, 0, 82, 188, 84, 0, 0, 0, 0, 147, 0, 63, 0, 0, 28, 205, 0, 153, |
| 0, 104, 0, 0, 0, 0, 0, 0, 0, 230, 196, 67, 307, 113, 61, 325, 132, 58, 0, |
| 0, 0, 146, 114, 0, 0, 0, 0, 169, 0, 139, 0, 19, 152, 0, 0, 62, 69, 265, |
| 108, 0, 189, 0, 155, 60, 137, 43, 156, 0, 109, 0, 93, 0, 43, 123, 90, 162, 31, |
| 303, 0, 14, 211, 324, 0, 0, 5, 296, 77, 315, 171, 51, 154, 0, 43, 144, 274, 180, |
| 111, 111, 274, 7, 0, 0, 19, 103, 88, 136, 168, 0, 29, 49, 72, 0, 266, 83, 123, |
| 5, 262, 117, 0, 0, 43, 0, 110, 188, 194, 0, 0, 0, 164, 0, 0, 0, 291, 104, |
| 89, 0, 0, 133}; |
| |
| 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 %= 327; |
| } |
| return unmangledkG[sum]; |
| } |
| |
| int UnmangledPerfectHash(const char *key) |
| { |
| if (strlen(key) > 32) |
| { |
| return 0; |
| } |
| |
| return (UnmangledHashG(key, unmangledkT1) + UnmangledHashG(key, unmangledkT2)) % 327; |
| } |
| |
| } // 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 |