| // 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[] = {2324, 3570, 3888, 2418, 2383, 3870, 121, 2164, 476, 3290, |
| 3760, 2253, 1201, 3621, 412, 3171, 167, 3120, 3068, 3179, |
| 2664, 641, 656, 851, 2976, 2758, 1691, 3053, 2715, 239, |
| 441, 2110, 418, 2258, 2888, 2486, 37}; |
| constexpr int mangledkT2[] = {732, 3306, 900, 3331, 2519, 3385, 2162, 54, 3709, 2280, |
| 1793, 1837, 2274, 3142, 1271, 1722, 765, 1930, 3122, 171, |
| 3406, 3407, 759, 3634, 647, 645, 1347, 3761, 1022, 1840, |
| 2108, 3928, 1242, 2643, 3369, 2269, 895}; |
| 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, 3902, 0, |
| 0, 0, 0, 264, 3392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3741, 0, |
| 0, 0, 0, 392, 0, 0, 477, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 3159, 0, 0, 0, 0, 0, 495, 0, 3546, 0, 0, 1571, 490, 0, 0, 0, |
| 0, 0, 0, 2236, 3717, 0, 0, 0, 0, 0, 0, 2282, 2101, 0, 2889, 0, |
| 0, 0, 2409, 0, 0, 0, 0, 0, 0, 0, 2022, 0, 0, 2539, 0, 3741, |
| 0, 0, 1831, 764, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 3891, 0, 0, 0, 0, 2481, 0, 0, 268, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, 1532, 3509, 3579, 0, 1446, |
| 0, 1669, 0, 1017, 0, 0, 0, 0, 0, 0, 0, 0, 3186, 2727, 0, 1869, |
| 0, 0, 0, 0, 0, 0, 0, 824, 3762, 2482, 0, 0, 2124, 0, 0, 1722, |
| 0, 0, 0, 0, 0, 3442, 0, 0, 0, 0, 0, 1674, 0, 0, 3440, 3356, |
| 0, 3699, 0, 1596, 0, 0, 2667, 0, 359, 0, 0, 0, 0, 0, 0, 405, |
| 1051, 1440, 0, 0, 0, 3687, 0, 2676, 0, 0, 0, 3327, 0, 0, 625, 2116, |
| 3415, 0, 0, 0, 0, 0, 723, 1443, 0, 0, 0, 0, 0, 3605, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 1113, 0, 0, 0, 0, 0, 267, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 374, 0, |
| 0, 1662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3990, 0, 0, 1443, |
| 152, 0, 1018, 707, 0, 3202, 0, 0, 0, 1313, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 2641, 0, 585, 3479, 0, 0, 1793, 851, 2757, 0, 0, 2965, 3464, |
| 0, 447, 748, 0, 0, 0, 0, 2403, 0, 0, 0, 0, 0, 0, 1916, 0, |
| 0, 0, 3108, 1330, 3612, 921, 1577, 283, 0, 145, 3648, 2045, 0, 1618, 0, 1722, |
| 2, 3421, 0, 3297, 0, 715, 0, 2125, 0, 1391, 3712, 0, 0, 0, 0, 976, |
| 0, 0, 3195, 0, 0, 3570, 0, 3505, 0, 0, 0, 0, 0, 3910, 3417, 0, |
| 1962, 0, 759, 0, 0, 1135, 2536, 2961, 0, 0, 1612, 0, 0, 0, 0, 117, |
| 0, 0, 0, 0, 0, 849, 0, 0, 0, 701, 1559, 0, 146, 0, 575, 0, |
| 0, 0, 0, 0, 33, 0, 1630, 0, 0, 1283, 0, 3633, 0, 0, 438, 0, |
| 25, 3082, 0, 0, 46, 0, 211, 0, 0, 0, 666, 0, 0, 3766, 962, 0, |
| 2601, 0, 107, 0, 2225, 1728, 0, 0, 123, 0, 133, 0, 0, 0, 0, 0, |
| 0, 2783, 0, 1123, 0, 0, 0, 1021, 0, 0, 0, 2675, 0, 0, 0, 19, |
| 1915, 0, 0, 0, 0, 0, 0, 0, 3206, 0, 2446, 0, 0, 0, 0, 0, |
| 0, 0, 206, 0, 0, 0, 0, 866, 0, 0, 3134, 0, 3915, 0, 0, 0, |
| 0, 517, 0, 1312, 0, 0, 0, 2213, 0, 0, 3560, 0, 0, 0, 2943, 0, |
| 0, 0, 0, 1302, 1375, 301, 0, 305, 0, 645, 3814, 0, 1755, 3767, 0, 3307, |
| 2684, 0, 685, 0, 0, 0, 0, 294, 1068, 0, 3349, 1240, 1102, 451, 0, 0, |
| 0, 0, 0, 0, 956, 3207, 0, 0, 1128, 314, 2708, 166, 218, 0, 2202, 0, |
| 0, 3970, 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, |
| 1103, 0, 1425, 234, 2109, 0, 3322, 0, 678, 0, 0, 0, 0, 3909, 0, 3765, |
| 0, 0, 0, 0, 0, 693, 0, 0, 0, 0, 746, 0, 0, 0, 0, 3176, |
| 0, 0, 0, 0, 1514, 3835, 0, 0, 0, 0, 0, 71, 0, 3635, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 782, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 2992, 0, 0, 0, 0, 0, 129, |
| 0, 1399, 4003, 0, 0, 0, 1424, 2962, 0, 0, 265, 0, 0, 0, 0, 3233, |
| 0, 0, 0, 0, 476, 1507, 0, 0, 0, 3160, 2873, 1991, 0, 0, 0, 1548, |
| 0, 903, 0, 0, 0, 2942, 0, 3960, 0, 4011, 3164, 442, 0, 2685, 2655, 2557, |
| 0, 0, 0, 0, 39, 1188, 2352, 0, 1402, 3872, 2087, 264, 283, 1970, 0, 2154, |
| 539, 1920, 3139, 0, 0, 556, 0, 0, 2623, 920, 405, 2402, 0, 3886, 0, 647, |
| 464, 0, 76, 955, 371, 579, 2455, 0, 0, 1975, 0, 209, 2051, 0, 0, 0, |
| 1328, 0, 3578, 68, 0, 0, 1151, 0, 0, 0, 3734, 0, 612, 0, 0, 0, |
| 1955, 3378, 0, 2571, 0, 0, 3344, 0, 941, 2924, 765, 0, 3040, 2312, 412, 868, |
| 0, 0, 0, 898, 0, 222, 1718, 0, 0, 0, 0, 0, 1513, 1833, 0, 0, |
| 0, 0, 0, 2078, 3211, 367, 344, 3873, 276, 0, 741, 1347, 0, 1150, 0, 981, |
| 1040, 0, 3067, 0, 0, 1934, 1416, 3567, 3154, 702, 0, 1745, 2874, 1077, 3665, 68, |
| 0, 3788, 0, 0, 3418, 0, 873, 1274, 2025, 1900, 0, 0, 3924, 1120, 244, 840, |
| 3573, 19, 0, 0, 0, 1019, 0, 0, 3895, 0, 0, 2141, 0, 0, 0, 0, |
| 1227, 0, 3691, 0, 0, 1035, 0, 3778, 1982, 0, 0, 0, 0, 107, 0, 0, |
| 0, 0, 0, 925, 0, 0, 0, 0, 1653, 1064, 52, 0, 1462, 1097, 0, 0, |
| 0, 2923, 0, 492, 87, 1641, 2680, 1510, 0, 2718, 0, 0, 594, 0, 650, 487, |
| 0, 0, 2729, 0, 1075, 0, 3807, 0, 0, 3961, 0, 0, 1313, 1690, 0, 0, |
| 2405, 0, 1253, 1199, 3748, 0, 1432, 0, 0, 0, 399, 3372, 1088, 0, 3807, 0, |
| 1662, 0, 0, 0, 1744, 0, 2451, 1625, 2313, 2201, 1829, 317, 0, 0, 120, 0, |
| 52, 0, 0, 1028, 0, 0, 0, 2282, 33, 715, 0, 161, 552, 0, 3115, 1086, |
| 0, 0, 0, 1654, 1349, 0, 0, 0, 1029, 1902, 0, 2125, 2186, 3922, 784, 0, |
| 0, 0, 2297, 0, 0, 1450, 0, 0, 2759, 2039, 1325, 0, 3051, 0, 0, 1304, |
| 0, 3924, 0, 0, 1444, 755, 3675, 3720, 0, 0, 0, 1976, 2679, 3793, 0, 0, |
| 3527, 0, 2023, 744, 3760, 0, 0, 0, 0, 0, 0, 496, 1174, 3554, 1935, 1247, |
| 0, 0, 0, 0, 0, 0, 0, 1247, 0, 0, 2556, 289, 2210, 1120, 1382, 750, |
| 0, 1539, 0, 2145, 0, 0, 1875, 0, 0, 1904, 0, 0, 289, 3116, 0, 0, |
| 0, 0, 0, 0, 0, 0, 1174, 1348, 3987, 1317, 1434, 0, 662, 668, 3001, 0, |
| 0, 143, 508, 0, 896, 0, 838, 0, 0, 1461, 3248, 1887, 2619, 0, 0, 0, |
| 0, 1599, 0, 0, 3997, 0, 9, 0, 603, 618, 1242, 3980, 0, 0, 0, 1324, |
| 0, 0, 0, 0, 51, 0, 193, 624, 2309, 0, 3217, 2123, 1682, 3969, 0, 1981, |
| 0, 863, 2086, 0, 0, 0, 0, 2363, 0, 1231, 2597, 2713, 0, 3084, 0, 3475, |
| 0, 0, 0, 91, 0, 3859, 0, 0, 381, 2625, 0, 3968, 0, 165, 0, 456, |
| 3777, 1216, 2235, 395, 0, 204, 0, 0, 0, 1936, 0, 299, 827, 3567, 3165, 0, |
| 509, 162, 0, 3551, 1464, 0, 0, 2997, 102, 363, 0, 2106, 0, 1702, 1775, 3157, |
| 0, 2529, 0, 3676, 297, 0, 0, 0, 0, 0, 1697, 617, 0, 0, 282, 0, |
| 2304, 0, 1439, 0, 1563, 1481, 1942, 1367, 74, 538, 0, 3827, 2021, 0, 0, 0, |
| 0, 0, 300, 0, 0, 3072, 3368, 0, 104, 2379, 0, 854, 2958, 1473, 2014, 0, |
| 0, 4011, 0, 1211, 0, 0, 3307, 134, 1350, 0, 0, 0, 0, 0, 0, 0, |
| 2562, 0, 0, 0, 455, 0, 3345, 0, 917, 0, 0, 929, 0, 1796, 0, 0, |
| 796, 0, 2271, 2751, 0, 0, 0, 186, 578, 0, 1780, 3751, 0, 0, 0, 1393, |
| 361, 2841, 3964, 2613, 2617, 0, 0, 0, 2008, 0, 1008, 0, 228, 0, 9, 2911, |
| 3552, 0, 1532, 3140, 3634, 1274, 0, 6, 0, 436, 0, 208, 1026, 699, 0, 0, |
| 0, 1099, 0, 2819, 0, 0, 0, 0, 0, 3840, 1688, 3765, 0, 158, 1224, 2826, |
| 0, 0, 0, 729, 0, 835, 0, 3458, 0, 0, 0, 27, 1599, 2661, 1955, 0, |
| 3742, 2708, 0, 1763, 0, 1063, 0, 777, 0, 788, 565, 0, 1617, 707, 0, 0, |
| 2001, 411, 1532, 0, 0, 1710, 3468, 0, 1059, 1492, 0, 570, 0, 0, 0, 0, |
| 3491, 0, 1254, 3023, 0, 3830, 0, 0, 393, 0, 0, 3942, 3390, 988, 0, 3759, |
| 1426, 232, 3969, 1482, 2816, 2587, 484, 0, 0, 0, 1751, 0, 1495, 0, 0, 1444, |
| 1405, 362, 2099, 0, 0, 0, 0, 3461, 656, 0, 503, 0, 0, 2848, 0, 3947, |
| 1282, 3393, 2021, 0, 0, 0, 851, 0, 0, 0, 3558, 389, 0, 0, 0, 1054, |
| 518, 2742, 0, 2758, 998, 2050, 1399, 0, 0, 0, 0, 3258, 0, 2410, 0, 0, |
| 1995, 2288, 3814, 0, 336, 3876, 0, 641, 1543, 0, 3284, 905, 0, 0, 995, 0, |
| 0, 0, 1148, 0, 0, 881, 0, 1426, 470, 2068, 0, 0, 0, 0, 0, 3205, |
| 664, 1838, 2145, 924, 1217, 840, 0, 24, 0, 437, 724, 3180, 1290, 2747, 0, 2064, |
| 3028, 670, 0, 498, 1306, 0, 611, 2080, 0, 0, 0, 0, 1893, 2553, 0, 869, |
| 872, 1093, 591, 1428, 414, 0, 70, 3834, 0, 0, 200, 0, 0, 0, 0, 293, |
| 0, 3391, 3089, 0, 0, 663, 3657, 3881, 0, 0, 469, 1334, 0, 1933, 253, 1387, |
| 2969, 0, 1076, 1238, 0, 0, 0, 0, 1479, 1693, 532, 2937, 133, 1350, 0, 0, |
| 3695, 658, 0, 1220, 0, 1462, 1698, 0, 1406, 2730, 0, 0, 0, 0, 1873, 0, |
| 682, 0, 3697, 3413, 1669, 0, 0, 866, 0, 3054, 3269, 0, 3841, 0, 3895, 2225, |
| 1312, 434, 0, 359, 3647, 647, 0, 1816, 0, 1172, 1889, 0, 0, 0, 0, 0, |
| 1805, 3443, 0, 0, 2732, 1236, 0, 2897, 1133, 919, 0, 0, 0, 0, 3321, 0, |
| 64, 0, 0, 2276, 1647, 0, 0, 508, 0, 0, 0, 0, 0, 4016, 1974, 1140, |
| 0, 0, 0, 576, 970, 1531, 0, 0, 3547, 1788, 0, 2340, 0, 0, 3885, 85, |
| 0, 0, 0, 0, 0, 2675, 0, 0, 215, 0, 0, 0, 1976, 2403, 1141, 415, |
| 2740, 0, 266, 1531, 0, 0, 402, 0, 988, 1774, 1542, 205, 1292, 1593, 337, 2006, |
| 749, 0, 0, 0, 0, 0, 49, 2688, 742, 1343, 669, 1138, 528, 1498, 182, 0, |
| 1296, 3909, 359, 50, 0, 310, 2463, 0, 0, 2436, 1891, 322, 396, 0, 0, 0, |
| 1971, 2978, 2176, 3732, 0, 0, 0, 6, 3137, 3203, 0, 108, 1050, 0, 0, 0, |
| 0, 953, 1154, 0, 0, 689, 1257, 311, 2567, 2131, 1487, 0, 3180, 1308, 360, 0, |
| 0, 3413, 3380, 3495, 1436, 1018, 3332, 318, 2619, 0, 485, 263, 0, 0, 0, 0, |
| 0, 949, 1286, 0, 3119, 0, 543, 3012, 0, 0, 0, 0, 826, 110, 2605, 0, |
| 2683, 0, 2225, 3692, 267, 2693, 336, 555, 665, 0, 0, 1448, 0, 0, 1939, 0, |
| 0, 1980, 0, 2262, 3961, 0, 86, 0, 0, 421, 2520, 3458, 817, 3975, 2679, 2961, |
| 1093, 287, 2110, 1069, 0, 3070, 0, 258, 3303, 0, 0, 0, 1708, 0, 2210, 0, |
| 0, 0, 0, 397, 902, 2677, 918, 0, 728, 0, 2744, 1108, 0, 2456, 0, 0, |
| 0, 2153, 924, 1147, 124, 3687, 335, 0, 374, 0, 1637, 1243, 1380, 0, 1600, 1451, |
| 436, 0, 598, 0, 0, 349, 0, 0, 0, 1823, 0, 0, 0, 0, 3192, 304, |
| 1710, 0, 0, 9, 443, 1143, 3491, 588, 0, 119, 4000, 0, 401, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 1807, 1047, 61, 2442, 0, 612, 3005, 663, 45, 0, |
| 471, 915, 0, 0, 1758, 1548, 0, 0, 1007, 0, 0, 0, 1359, 2621, 1793, 142, |
| 913, 2738, 69, 0, 0, 3622, 0, 2179, 0, 0, 472, 928, 282, 0, 0, 979, |
| 0, 840, 3889, 0, 0, 2584, 0, 2738, 1149, 719, 679, 1280, 424, 3106, 0, 2143, |
| 856, 547, 0, 0, 3458, 428, 0, 2109, 2395, 0, 1320, 2224, 0, 0, 0, 0, |
| 1993, 0, 31, 0, 1999, 0, 1471, 0, 0, 2533, 1084, 1031, 0, 242, 0, 0, |
| 0, 286, 0, 0, 1224, 348, 2918, 0, 1930, 1949, 847, 0, 547, 0, 2251, 0, |
| 235, 2594, 653, 510, 95, 1438, 0, 2129, 0, 0, 0, 0, 0, 255, 1573, 3691, |
| 0, 2444, 0, 1330, 0, 108, 0, 1147, 64, 1296, 970, 771, 1078, 888, 1703, 1447, |
| 697, 0, 0, 2665, 3261, 0, 1662, 0, 2549, 1829, 3665, 3156, 0, 0, 3624, 0, |
| 0, 0, 0, 399, 382, 3842, 3493, 1668, 1092, 0, 503, 290, 3294, 1722, 4017, 0, |
| 1600, 0, 0, 950, 567, 0, 0, 1457, 0, 0, 0, 1386, 3002, 1557, 3744, 605, |
| 3013, 3906, 0, 247, 0, 0, 0, 3162, 1738, 2117, 1392, 0, 1912, 806, 0, 802, |
| 1209, 2253, 0, 0, 0, 0, 0, 1509, 2112, 0, 3467, 0, 0, 1468, 0, 3344, |
| 2120, 0, 840, 1026, 0, 1650, 238, 0, 1429, 1968, 0, 1456, 3555, 3765, 938, 3662, |
| 0, 2246, 2027, 718, 0, 0, 0, 0, 2748, 0, 3125, 0, 681, 1801, 0, 3833, |
| 581, 0, 933, 2636, 0, 759, 1514, 0, 1627, 1353, 222, 282, 0, 1814, 0, 1506, |
| 0, 783, 693, 2370, 1864, 0, 3086, 0, 0, 537, 868, 0, 103, 0, 0, 0, |
| 0, 3849, 3773, 0, 0, 1757, 0, 1545, 1313, 0, 85, 36, 0, 0, 1971, 0, |
| 1513, 3225, 1408, 1164, 1886, 0, 940, 3699, 2076, 0, 1280, 2727, 0, 0, 0, 0, |
| 0, 0, 3011, 407, 996, 0, 759, 1838, 1275, 1120, 0, 0, 2034, 0, 0, 2121, |
| 0, 258, 2426, 0, 0, 683, 0, 0, 0, 0, 25, 0, 855, 1373, 0, 2114, |
| 1102, 0, 2776, 917, 3731, 1119, 3353, 1869, 3813, 0, 2178, 0, 0, 0, 0, 0, |
| 0, 3575, 0, 0, 1073, 1488, 0, 0, 0, 0, 0, 2834, 3635, 0, 3972, 0, |
| 0, 1235, 0, 0, 1069, 2097, 0, 309, 1426, 1964, 1725, 1056, 3700, 0, 0, 504, |
| 0, 1004, 0, 3829, 279, 123, 2600, 1548, 955, 0, 2737, 1544, 0, 2881, 3319, 658, |
| 0, 0, 0, 1541, 1716, 0, 0, 0, 0, 0, 1644, 0, 4016, 1743, 1803, 3718, |
| 1671, 3874, 2028, 1585, 0, 0, 0, 1574, 1535, 3268, 517, 374, 0, 0, 3787, 0, |
| 1420, 0, 1215, 0, 0, 1043, 3621, 0, 598, 0, 896, 1347, 0, 540, 0, 0, |
| 3832, 0, 429, 1952, 750, 1773, 0, 1038, 0, 0, 1723, 1195, 0, 1093, 260, 3628, |
| 0, 2118, 0, 214, 0, 548, 0, 3107, 303, 198, 3001, 0, 1593, 0, 2725, 0, |
| 0, 3117, 3300, 0, 450, 1029, 2937, 768, 2995, 0, 3644, 1807, 299, 0, 0, 613, |
| 729, 0, 948, 0, 657, 0, 0, 3797, 0, 1576, 0, 59, 3535, 0, 2040, 0, |
| 2524, 0, 0, 0, 1635, 1048, 0, 3783, 3985, 2985, 3954, 0, 258, 744, 1244, 3900, |
| 0, 906, 53, 0, 165, 17, 3573, 1538, 0, 0, 0, 0, 3845, 2431, 0, 0, |
| 2096, 0, 1592, 880, 2718, 0, 41, 0, 66, 0, 3212, 2634, 484, 1045, 1213, 1834, |
| 0, 423, 0, 498, 27, 3972, 2285, 1322, 2206, 0, 1857, 0, 2499, 1931, 0, 0, |
| 1870, 96, 0, 1323, 0, 0, 594, 682, 0, 0, 1312, 2715, 0, 2566, 1050, 0, |
| 918, 170, 1085, 0, 49, 1053, 1894, 0, 0, 333, 3904, 0, 754, 331, 2666, 2559, |
| 0, 2165, 3565, 3885, 3773, 0, 2672, 2585, 1414, 1076, 869, 0, 2170, 1072, 0, 0, |
| 2503, 2304, 0, 2748, 1044, 987, 1267, 570, 0, 0, 0, 0, 0, 150, 0, 3567, |
| 2423, 66, 0, 762, 0, 0, 3674, 0, 12, 3077, 0, 251, 0, 58, 0, 0, |
| 704, 253, 0, 2787, 0, 0, 0, 562, 952, 0, 0, 3133, 0, 702, 569, 552, |
| 0, 0, 2116, 0, 0, 1488, 1828, 292, 0, 1641, 0, 1616, 0, 0, 0, 3732, |
| 1577, 0, 0, 0, 1332, 0, 0, 1826, 686, 772, 3809, 0, 269, 164, 264, 0, |
| 534, 0, 1471, 2696, 0, 296, 3622, 1624, 0, 0, 3847, 608, 0, 760, 3400, 0, |
| 3613, 0, 539, 138, 0, 0, 0, 0, 0, 0, 0, 0, 2362, 2009, 3910, 2368, |
| 498, 2085, 632, 61, 627, 1052, 0, 3115, 2076, 0, 2271, 0, 898, 1143, 3331, 0, |
| 3348, 1061, 1109, 295, 0, 0, 0, 0, 176, 1068, 0, 0, 0, 33, 0, 0, |
| 0, 2904, 924, 0, 1556, 3159, 863, 0, 0, 0, 0, 3286, 2093, 1314, 561, 3244, |
| 435, 0, 0, 3712, 0, 1230, 0, 803, 0, 0, 0, 244, 133, 0, 1927, 0, |
| 1689, 0, 1881, 2801, 1421, 1021, 0, 0, 318, 644, 0, 1343, 0, 0, 305, 0, |
| 707, 1932, 0, 979, 0, 373, 0, 0, 1867, 0, 0, 488, 0, 166, 41, 185, |
| 1910, 0, 0, 1724, 0, 1975, 0, 2029, 1686, 1607, 1358, 0, 0, 0, 0, 610, |
| 0, 0, 3240, 0, 2226, 0, 4003, 0, 1431, 0, 3783, 0, 483, 2608, 0, 1778, |
| 0, 0, 608, 1671, 8, 0, 0, 0, 30, 0, 244, 0, 833, 0, 0, 3595, |
| 2899, 2378, 0, 2089, 2528, 0, 0, 1217, 0, 0, 999, 2868, 1923, 0, 1914, 0, |
| 0, 121, 832, 1779, 535, 0, 0, 0, 0, 1882, 2904, 0, 0, 0, 636, 2251, |
| 1238, 206, 0, 0, 40, 0, 613, 1118, 3759, 0, 0, 0, 3088, 1083, 2763, 0, |
| 1306, 0, 1971, 2012, 0, 602, 31, 1568, 1310, 1529, 0, 2856, 2687, 3451, 1961, 690, |
| 3288, 0, 1352, 852, 1127, 0, 3661, 3301, 0, 0, 0, 1963, 0, 274, 2182, 864, |
| 1709, 1872, 811, 2712, 0, 0, 0, 0, 2919, 0, 4016, 0, 2047, 1855, 1663, 107, |
| 3335, 40, 1956, 0, 1648, 2066, 0, 0, 270, 3350, 1739, 2818, 1819, 782, 139, 90, |
| 126, 0, 0, 0, 3964, 2025, 3571, 2108, 1486, 0, 3334, 0, 0, 0, 291, 0, |
| 3163, 0, 0, 1033, 0, 151, 0, 0, 453, 0, 0, 174, 0, 643, 1078, 0, |
| 1227, 416, 1376, 77, 832, 0, 905, 140, 1232, 136, 0, 55, 1401, 0, 0, 0, |
| 0, 3012, 0, 0, 0, 1310, 1914, 2608, 261, 756, 0, 3623, 223, 521, 1926, 0, |
| 3748, 0, 0, 288, 1428, 200, 0, 1506, 528, 0, 0, 0, 1983, 0, 637, 1557, |
| 0, 3820, 1832, 1669, 0, 1596, 0, 1588, 1454, 0, 0, 0, 2429, 3381, 588, 559, |
| 0, 388, 1044, 0, 2065, 2043, 1279, 0, 926, 0, 1374, 0, 0, 3479, 258, 0, |
| 0, 1070, 3431, 2042, 0, 0, 603, 0, 2822, 505, 580, 1696, 3987, 1171, 967, 362, |
| 1379, 0, 98, 664, 2728, 3841, 0, 0, 1347, 0, 2163, 0, 921, 2592, 439, 3454, |
| 0, 225, 125, 3823, 803, 1046, 2578, 478, 0, 0, 0, 772, 0, 1466, 0, 2341, |
| 736, 1534, 0, 1400, 1218, 1515, 1200, 165, 492, 2100, 2529, 1436, 509, 129, 3601, 3347, |
| 0, 0, 3998, 0, 81, 1198, 1014, 936, 0, 898, 1427, 0, 807, 1057, 0, 0, |
| 2676, 0, 168, 3934, 0, 360, 2476, 2012, 1252, 826, 2730, 0, 1205, 2165, 0, 997, |
| 0, 3556, 1966, 1711, 980, 349, 507, 819, 3844, 2866, 490, 354, 2105, 0, 904, 1691, |
| 375, 0, 0, 403, 2015, 527, 0, 0, 0, 0, 542, 1454, 2754, 1155, 0, 0, |
| 0, 1972, 3563, 194, 0, 0, 130, 202, 1866, 653, 60, 0, 0, 3185, 2030, 3433, |
| 762, 2046, 1167, 0, 3699, 0, 0, 0, 3999, 0, 0, 0, 1686, 1334, 0, 2140, |
| 399, 3680, 137, 0, 2207, 3748, 1332, 448, 0, 0, 0, 491, 820, 0, 0, 2305, |
| 402, 1016, 765, 3777, 0, 458, 2625, 252, 0, 0, 306, 2974, 0, 794, 844, 947, |
| 768, 0, 0, 0, 0, 672, 3771, 0, 1888, 1125, 1297, 314, 1390, 216, 0, 0, |
| 0, 3905, 3170, 915, 802, 0, 1570, 233, 1135, 3396, 0, 195, 784, 0, 738, 1426, |
| 969, 2463, 463, 126, 436, 926, 1317, 3997, 0, 0, 895, 0, 1112, 772, 0, 325, |
| 1447, 0, 0, 205, 0, 1272, 825, 0, 0, 1448, 0, 1890, 0, 3334, 0, 3721, |
| 0, 2076, 0, 515, 0, 0, 0, 3099, 2151, 0, 3468, 0, 0, 30, 0, 1661, |
| 1382, 0, 907, 948, 0, 0, 1115, 0, 1390, 0, 4003, 1493, 3119, 1063, 1867, 0, |
| 1923, 0, 876, 3783, 817, 846, 1642, 1701, 3743, 0, 0, 0, 0, 2082, 1122, 1679, |
| 3983, 0, 227, 1530, 0, 1289, 0, 0, 0, 0, 0, 1336, 0, 0, 0, 2695, |
| 0, 406, 1281, 0, 973, 964, 3248, 2035, 0, 975, 0, 0, 533, 0, 3463, 335, |
| 0, 1100, 0, 1073, 251, 0, 0, 0, 2464, 1000, 0, 0, 0, 104, 895, 0, |
| 1666, 0, 0, 0, 1270, 3914, 2011, 0, 703, 1034, 0, 366, 1636, 1207, 2593, 3672, |
| 2186, 0, 1738, 2114, 387, 658, 447, 2663, 1033, 1192, 2079, 0, 1616, 1369, 3104, 779, |
| 0, 1196, 2496, 0, 2222, 2434, 2470, 1268, 0, 1953, 1294, 1572, 0, 0, 1493, 2890, |
| 2519, 0, 2837, 0, 3485, 0, 0, 1420, 3939, 1033, 2620, 491, 0, 0, 0, 0, |
| 1415, 0, 1495, 2516, 0, 269, 0, 3303, 2411, 2282, 3753, 2209, 534, 0, 1027, 0, |
| 324, 1742, 2081, 0, 1899, 0, 13, 3115, 4005, 0, 0, 382, 0, 3892, 3407, 0, |
| 3885, 1783, 0, 1328, 1643, 1528, 2260, 483, 0, 417, 3101, 0, 0, 2492, 286, 383, |
| 0, 188, 0, 0, 0, 3776, 0, 1016, 932, 1041, 2095, 0, 3696, 0, 0, 0, |
| 0, 1918, 0, 1713, 0, 1970, 1691, 3397, 1531, 0, 1638, 0, 0, 593, 0, 1337, |
| 239, 2292, 0, 2173, 485, 947, 3952, 346, 776, 0, 0, 580, 829, 1353, 0, 3180, |
| 0, 3448, 728, 2326, 0, 0, 0, 1578, 3997, 0, 1329, 2092, 2354, 1652, 0, 0, |
| 0, 2175, 679, 493, 3813, 0, 3460, 3525, 1072, 0, 1490, 1926, 1897, 1815, 1838, 1, |
| 0, 692, 0, 1116, 0, 0, 0, 0, 0, 0, 0, 0, 655, 3199, 0, 0, |
| 17, 1089, 0, 718, 1085, 237, 3826, 0, 2005, 0, 0, 775, 0, 315, 1315, 0, |
| 753, 1110, 0, 2443, 2031, 3187, 367, 0, 1873, 113, 63, 0, 1771, 3987, 0, 0, |
| 346, 113, 993, 333, 3159, 0, 1727, 2059, 1709, 1750, 3520, 0, 0, 3974, 284, 2693, |
| 328, 0, 1648, 2944, 1497, 399, 1572, 0, 3550, 575, 2523, 0, 3717, 1153, 0, 2857, |
| 2275, 191, 1588, 0, 1736, 2904, 597, 0, 0, 192, 2300, 0, 0, 511, 136, 0, |
| 0, 3709, 2729, 0, 3529, 3580, 183, 0, 0, 828, 0, 2737, 820, 0, 1608, 0, |
| 0, 0, 2769, 2752, 817, 1290, 1903, 180, 785, 633, 0, 2229, 0, 3586, 1269, 0, |
| 2004, 36, 1568, 0, 341, 0, 0, 0, 0, 846, 0, 1843, 1380, 11, 0, 1057, |
| 0, 885, 176, 587, 1874, 2328, 0, 1030, 3391, 2073, 686, 0, 0, 339, 1897, 39, |
| 0, 3124, 0, 0, 0, 0, 721, 2384, 0, 0, 455, 0, 0, 0, 0, 692, |
| 3600, 3420, 1022, 1288, 533, 0, 1624, 3401, 0, 0, 0, 0, 3480, 3777, 0, 1595, |
| 0, 0, 2035, 0, 805, 275, 1324, 3571, 3003, 0, 842, 786, 692, 3251, 2871, 1938, |
| 885, 0, 1584, 0, 0, 272, 0, 2096, 204, 1022, 1615, 1443, 0, 1013, 0, 3531, |
| 1224, 1518, 630, 2755, 1542, 717, 0, 0, 0, 764, 3510, 0, 19, 0, 346, 57, |
| 3972, 2515, 3978, 0, 265, 3235, 906, 0, 0, 3443, 10, 0, 254, 3965, 742, 2045, |
| 0, 937, 0, 0, 1377, 3011, 893, 1229, 0, 568, 61, 0, 1987, 2037, 633, 737, |
| 3203, 0, 2364, 2826, 0, 549, 508, 3905, 1678, 1869, 0, 0, 1228, 1525, 0, 0, |
| 0, 574, 3877, 975, 0, 949, 1268, 3875, 95, 0, 2139, 0, 161, 944, 0, 1479, |
| 2573, 3230, 659, 2553, 94, 3097, 2007, 1949, 1802, 0, 3378, 0, 0, 1755, 1573, 0, |
| 390, 2281, 0, 3730, 1315, 2037, 613, 0, 1351, 566, 3836, 1519, 1298, 415, 1041, 213, |
| 2271, 0, 954, 0, 1090, 0, 0, 74, 1335, 3453, 2627, 0, 1597, 3455, 2134, 2468, |
| 1708, 913, 0, 1120, 1460, 0, 2262, 3951, 0, 1199, 3928, 3087, 1460, 0, 1890, 0, |
| 1344, 3294, 1368, 1287, 3653, 0, 1760, 0, 172, 0, 1420, 0, 0, 220, 977, 1089, |
| 3790, 405, 0, 2450, 3821, 0, 0, 0, 2624, 0, 3245, 589, 1501, 0, 1932, 0, |
| 3762, 1679, 12}; |
| |
| 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 %= 4019; |
| } |
| return mangledkG[sum]; |
| } |
| |
| int MangledPerfectHash(const char *key) |
| { |
| if (strlen(key) > 37) |
| return 0; |
| |
| return (MangledHashG(key, mangledkT1) + MangledHashG(key, mangledkT2)) % 4019; |
| } |
| |
| constexpr int unmangledkT1[] = {300, 235, 154, 260, 346, 345, 249, 45, 233, 222, 304, 137, 74, |
| 372, 57, 44, 310, 11, 4, 182, 54, 39, 71, 306, 218, 339}; |
| constexpr int unmangledkT2[] = {216, 37, 310, 175, 220, 134, 156, 16, 193, 203, 314, 328, 103, |
| 366, 369, 30, 281, 104, 218, 234, 80, 211, 111, 56, 366, 234}; |
| constexpr int unmangledkG[] = { |
| 0, 0, 0, 0, 72, 0, 0, 0, 0, 209, 0, 0, 346, 46, 28, 0, 250, 0, 0, |
| 0, 0, 0, 0, 0, 162, 0, 0, 0, 87, 361, 0, 345, 0, 162, 0, 0, 81, 0, |
| 242, 33, 0, 79, 0, 0, 0, 55, 0, 0, 0, 229, 0, 156, 133, 0, 271, 0, 0, |
| 0, 215, 321, 312, 0, 330, 0, 0, 271, 0, 161, 0, 163, 0, 0, 0, 0, 100, 0, |
| 59, 0, 0, 249, 316, 0, 0, 195, 378, 41, 16, 362, 0, 0, 0, 0, 0, 160, 0, |
| 0, 274, 95, 327, 0, 85, 257, 0, 0, 144, 0, 0, 0, 0, 0, 325, 153, 97, 0, |
| 0, 350, 0, 371, 0, 239, 0, 0, 0, 0, 57, 0, 0, 345, 0, 138, 43, 121, 0, |
| 0, 89, 0, 0, 172, 0, 0, 0, 120, 72, 68, 332, 0, 216, 93, 0, 19, 0, 82, |
| 13, 0, 0, 324, 0, 165, 148, 140, 287, 356, 194, 42, 76, 108, 379, 250, 0, 130, 0, |
| 112, 23, 0, 0, 43, 0, 73, 0, 0, 0, 56, 0, 0, 117, 147, 126, 77, 173, 0, |
| 160, 341, 239, 0, 0, 116, 75, 16, 0, 171, 34, 226, 53, 14, 357, 32, 304, 196, 0, |
| 0, 0, 13, 0, 0, 0, 0, 190, 0, 96, 165, 0, 5, 168, 98, 37, 56, 8, 268, |
| 0, 0, 0, 139, 0, 0, 0, 22, 0, 55, 103, 165, 145, 0, 329, 153, 65, 94, 0, |
| 101, 0, 284, 363, 214, 87, 0, 176, 0, 0, 0, 0, 0, 97, 0, 240, 64, 105, 0, |
| 6, 270, 275, 27, 0, 0, 160, 101, 0, 297, 0, 0, 66, 0, 0, 241, 0, 380, 33, |
| 169, 121, 0, 351, 0, 0, 232, 0, 45, 0, 189, 83, 144, 314, 335, 0, 318, 227, 0, |
| 331, 158, 0, 332, 0, 0, 12, 183, 73, 0, 6, 0, 271, 0, 291, 297, 0, 136, 0, |
| 21, 283, 49, 9, 182, 0, 315, 137, 0, 118, 0, 0, 0, 0, 364, 271, 30, 0, 66, |
| 15, 256, 122, 261, 0, 39, 0, 134, 222, 0, 30, 23, 158, 0, 42, 84, 106, 0, 0, |
| 59, 0, 243, 70, 34, 0, 12, 152, 142, 99, 21, 297, 0, 0, 146, 0, 332, 357, 223, |
| 0, 0}; |
| |
| 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 %= 382; |
| } |
| return unmangledkG[sum]; |
| } |
| |
| int UnmangledPerfectHash(const char *key) |
| { |
| if (strlen(key) > 26) |
| return 0; |
| |
| return (UnmangledHashG(key, unmangledkT1) + UnmangledHashG(key, unmangledkT2)) % 382; |
| } |
| |
| } // 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 |