| // 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" |
| |
| 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[] = {3064, 1851, 1414, 3139, 4344, 3861, 2198, 569, 2942, 936, |
| 1011, 2797, 994, 3172, 2246, 1929, 3580, 2059, 3211, 2760, |
| 3315, 3834, 4289, 1359, 1965, 849, 1949, 3923, 2685, 4274, |
| 4060, 2274, 1752, 1405, 743, 2453, 2110}; |
| constexpr int mangledkT2[] = {3974, 952, 3020, 19, 962, 3302, 1369, 968, 2483, 3954, |
| 2409, 949, 1306, 577, 1474, 224, 2913, 2365, 494, 208, |
| 654, 3238, 2268, 54, 1039, 35, 3881, 44, 150, 967, |
| 1157, 2004, 4019, 4114, 1201, 3022, 2477}; |
| constexpr int mangledkG[] = { |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 4415, 0, 0, 1691, 0, 0, 0, 0, 0, 0, 4425, 0, |
| 0, 0, 0, 0, 0, 0, 4035, 1669, 0, 0, 0, 0, 2801, 0, 0, 0, |
| 0, 2968, 0, 294, 0, 3469, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 909, 0, 0, 0, 0, 0, 0, 2401, 0, 2142, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 858, 0, 0, 0, 0, 0, |
| 0, 1663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 1876, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 640, 811, 0, 3417, 0, |
| 0, 3687, 0, 0, 3802, 4331, 0, 0, 2261, 0, 0, 0, 1718, 0, 0, 0, |
| 0, 0, 1387, 0, 1507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, 431, 0, 0, 0, 1199, 0, |
| 0, 0, 0, 0, 2446, 0, 0, 218, 0, 0, 3861, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 3600, 919, 0, 0, 0, 0, 0, 0, 1694, 0, 0, 0, |
| 0, 0, 1161, 0, 0, 0, 0, 0, 381, 0, 221, 0, 3810, 0, 1467, 3945, |
| 0, 3178, 0, 0, 331, 61, 0, 0, 0, 606, 680, 0, 3568, 0, 0, 0, |
| 437, 0, 3806, 0, 0, 0, 1330, 0, 0, 0, 945, 0, 0, 0, 3384, 2674, |
| 0, 0, 0, 4287, 4141, 454, 0, 4099, 0, 0, 0, 0, 0, 0, 684, 1247, |
| 4248, 0, 0, 0, 0, 0, 0, 0, 0, 1705, 0, 0, 0, 0, 204, 0, |
| 0, 3605, 1783, 889, 0, 0, 0, 533, 841, 0, 0, 0, 722, 2641, 0, 0, |
| 0, 3827, 1320, 701, 4165, 0, 2297, 1239, 0, 2147, 0, 0, 0, 0, 0, 74, |
| 0, 0, 0, 2019, 0, 0, 0, 0, 0, 1982, 0, 0, 0, 0, 75, 0, |
| 0, 0, 578, 1658, 0, 0, 0, 0, 2822, 240, 0, 0, 27, 0, 0, 1251, |
| 0, 2305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1199, 3986, 0, 0, 0, |
| 0, 0, 1984, 0, 0, 0, 1930, 3656, 0, 0, 0, 0, 1516, 0, 0, 593, |
| 0, 0, 0, 0, 0, 0, 0, 0, 478, 0, 882, 0, 0, 0, 0, 0, |
| 1844, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1101, 0, 0, 0, 0, |
| 3866, 559, 0, 0, 0, 0, 4302, 0, 0, 0, 0, 780, 0, 0, 1982, 0, |
| 0, 0, 4234, 0, 0, 0, 0, 0, 0, 0, 2297, 0, 0, 0, 659, 0, |
| 0, 3233, 0, 0, 0, 0, 0, 0, 0, 321, 393, 4385, 1088, 520, 0, 1157, |
| 1939, 0, 0, 0, 662, 865, 3747, 0, 959, 1862, 0, 408, 0, 0, 0, 1528, |
| 0, 0, 0, 0, 0, 0, 0, 3562, 0, 210, 0, 604, 3749, 869, 0, 859, |
| 787, 0, 0, 3851, 0, 0, 0, 0, 2430, 4363, 1549, 1784, 0, 0, 0, 0, |
| 0, 208, 0, 4183, 4422, 0, 0, 0, 0, 1393, 0, 0, 0, 1002, 0, 0, |
| 0, 0, 0, 0, 1081, 0, 0, 0, 0, 0, 0, 3531, 0, 0, 0, 0, |
| 507, 2505, 0, 0, 0, 0, 0, 0, 0, 1709, 806, 1352, 209, 0, 813, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 653, 0, 0, 0, 0, 0, 0, 4320, |
| 0, 0, 111, 655, 0, 256, 0, 0, 315, 4069, 3518, 0, 0, 0, 0, 0, |
| 0, 0, 0, 3080, 968, 1823, 1486, 0, 432, 0, 0, 3856, 0, 0, 4251, 2293, |
| 0, 0, 0, 0, 0, 0, 1118, 0, 0, 1023, 0, 2048, 4190, 0, 3663, 0, |
| 0, 0, 802, 0, 0, 0, 0, 0, 0, 0, 2511, 0, 0, 0, 0, 70, |
| 359, 0, 872, 0, 0, 0, 0, 1357, 4197, 0, 0, 0, 2161, 509, 0, 1160, |
| 0, 0, 0, 0, 0, 1966, 57, 0, 0, 4399, 0, 3118, 0, 0, 3220, 0, |
| 35, 0, 1408, 0, 0, 0, 693, 0, 0, 1501, 0, 0, 4442, 0, 1162, 0, |
| 660, 0, 0, 0, 0, 0, 1589, 0, 0, 0, 0, 0, 0, 847, 0, 0, |
| 0, 536, 0, 1852, 0, 0, 0, 0, 3950, 4010, 0, 0, 1443, 0, 0, 0, |
| 235, 0, 0, 1930, 2636, 0, 1948, 2125, 0, 631, 0, 0, 1626, 0, 0, 4130, |
| 0, 0, 2700, 1002, 0, 0, 948, 2542, 1493, 0, 4345, 0, 0, 151, 0, 0, |
| 2828, 0, 0, 0, 0, 0, 0, 278, 4191, 756, 0, 3986, 0, 0, 380, 0, |
| 1810, 0, 3423, 0, 0, 0, 183, 0, 0, 0, 813, 0, 304, 4453, 0, 647, |
| 0, 0, 96, 0, 0, 1125, 0, 0, 0, 0, 0, 3813, 0, 0, 2261, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 3774, 0, 0, 2771, 0, 0, 0, |
| 784, 3419, 0, 4000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 986, 0, |
| 3, 4422, 0, 0, 0, 0, 1085, 0, 2105, 0, 0, 0, 0, 0, 0, 1935, |
| 0, 0, 1532, 536, 0, 0, 0, 0, 0, 0, 1204, 3610, 0, 0, 0, 0, |
| 0, 1032, 0, 0, 2706, 0, 4084, 0, 3679, 0, 0, 0, 515, 0, 4210, 0, |
| 0, 357, 0, 0, 0, 0, 1868, 0, 2116, 0, 0, 0, 0, 2537, 0, 4146, |
| 0, 0, 0, 0, 0, 1774, 1202, 4192, 0, 38, 0, 0, 4239, 1431, 0, 0, |
| 0, 2086, 3359, 313, 1257, 3045, 1014, 0, 0, 0, 2549, 0, 938, 0, 0, 0, |
| 0, 4095, 0, 0, 0, 2625, 1961, 0, 0, 0, 3687, 3390, 0, 0, 325, 0, |
| 0, 0, 0, 1933, 0, 667, 0, 338, 0, 0, 0, 0, 1111, 0, 0, 0, |
| 0, 1483, 0, 320, 0, 1248, 0, 925, 0, 0, 0, 0, 1074, 0, 0, 0, |
| 0, 4239, 3207, 0, 396, 0, 0, 0, 85, 0, 1418, 127, 0, 1372, 0, 0, |
| 0, 0, 0, 710, 0, 2599, 2053, 4316, 0, 2708, 570, 0, 0, 1248, 0, 0, |
| 1187, 0, 0, 3899, 1895, 0, 0, 0, 1498, 594, 2018, 553, 2649, 911, 0, 2538, |
| 0, 0, 0, 3433, 0, 0, 0, 0, 2340, 0, 0, 461, 0, 0, 0, 0, |
| 0, 4014, 0, 3287, 647, 0, 0, 0, 466, 229, 0, 1544, 0, 1576, 0, 0, |
| 0, 3251, 0, 0, 698, 0, 0, 3516, 0, 0, 0, 0, 0, 653, 0, 2703, |
| 0, 0, 0, 2212, 0, 2015, 0, 0, 0, 0, 0, 0, 0, 0, 1307, 663, |
| 0, 179, 0, 0, 0, 0, 2717, 929, 358, 0, 4142, 1092, 3578, 0, 3160, 0, |
| 0, 0, 0, 932, 590, 85, 3483, 1580, 3628, 0, 0, 0, 0, 0, 0, 3354, |
| 0, 0, 166, 0, 0, 3413, 1430, 0, 0, 4427, 0, 0, 0, 0, 328, 0, |
| 0, 0, 0, 0, 856, 0, 0, 4415, 0, 0, 4389, 446, 0, 0, 1645, 0, |
| 0, 0, 0, 0, 0, 0, 3077, 0, 0, 1571, 472, 1588, 0, 0, 0, 17, |
| 0, 653, 815, 3015, 400, 0, 0, 0, 0, 0, 0, 4004, 0, 0, 1981, 2016, |
| 0, 935, 0, 0, 0, 0, 0, 0, 4100, 644, 1623, 0, 0, 91, 2507, 0, |
| 1311, 0, 2364, 0, 0, 327, 0, 0, 0, 264, 0, 3167, 3276, 4162, 1591, 0, |
| 0, 736, 0, 0, 0, 4089, 0, 3221, 1136, 0, 0, 0, 0, 867, 2968, 1781, |
| 0, 0, 4040, 2958, 0, 3499, 0, 3382, 1149, 2819, 266, 802, 133, 0, 0, 0, |
| 3176, 0, 1650, 3802, 0, 0, 0, 0, 0, 2732, 0, 0, 0, 151, 0, 0, |
| 1117, 3687, 0, 696, 2046, 0, 814, 0, 0, 0, 0, 3982, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 279, 2735, 0, 689, 853, 349, 0, 574, 2143, 0, |
| 0, 0, 3275, 0, 3086, 0, 0, 0, 0, 562, 1960, 0, 0, 0, 4129, 312, |
| 2687, 4370, 347, 1881, 1648, 1442, 0, 4226, 1609, 0, 0, 386, 2767, 0, 956, 0, |
| 0, 3301, 2280, 812, 0, 0, 66, 0, 0, 0, 0, 0, 0, 3085, 203, 0, |
| 709, 0, 235, 177, 0, 0, 0, 0, 2512, 1450, 0, 3215, 0, 0, 0, 1514, |
| 1008, 1860, 0, 3610, 908, 0, 0, 0, 158, 0, 153, 719, 0, 1184, 397, 256, |
| 0, 0, 517, 4241, 2402, 2208, 0, 4057, 0, 0, 1261, 0, 0, 0, 701, 604, |
| 0, 0, 135, 0, 0, 2102, 3714, 0, 826, 2268, 344, 0, 0, 4015, 0, 3958, |
| 1357, 0, 354, 0, 0, 598, 0, 0, 0, 0, 294, 3554, 0, 1277, 0, 0, |
| 0, 0, 141, 0, 0, 4115, 0, 0, 0, 1945, 0, 3230, 0, 972, 101, 1382, |
| 0, 0, 1014, 3534, 4383, 1312, 125, 2647, 0, 2014, 0, 1866, 0, 0, 3715, 99, |
| 515, 0, 0, 167, 2621, 0, 0, 0, 0, 3900, 3592, 0, 0, 0, 0, 0, |
| 0, 0, 1972, 0, 1653, 4378, 1975, 0, 950, 0, 0, 1553, 0, 0, 0, 0, |
| 145, 1093, 1404, 314, 0, 0, 0, 0, 1668, 0, 1042, 0, 2900, 1355, 0, 0, |
| 0, 0, 0, 858, 0, 0, 0, 958, 1889, 0, 0, 0, 0, 3924, 0, 0, |
| 2819, 0, 2638, 0, 0, 2585, 0, 0, 807, 1852, 0, 0, 0, 4051, 0, 3570, |
| 0, 0, 0, 0, 0, 0, 0, 0, 883, 0, 1526, 0, 847, 0, 532, 0, |
| 1214, 3981, 1205, 1023, 664, 1264, 2773, 0, 0, 73, 0, 1555, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 2701, 2088, 811, 339, 0, 2050, 3888, 4133, 73, |
| 0, 0, 0, 1749, 1278, 232, 1113, 0, 0, 0, 0, 1423, 369, 589, 0, 0, |
| 0, 0, 0, 3947, 0, 192, 0, 1500, 2058, 0, 3093, 0, 0, 253, 686, 0, |
| 0, 0, 1847, 0, 0, 0, 0, 1531, 0, 222, 0, 0, 1291, 1154, 0, 0, |
| 0, 1422, 0, 0, 92, 1761, 0, 3482, 175, 3016, 0, 0, 0, 2091, 0, 1083, |
| 0, 1331, 2074, 573, 1650, 1903, 0, 0, 358, 3934, 1000, 0, 0, 0, 0, 135, |
| 4136, 0, 0, 0, 288, 0, 0, 0, 464, 0, 890, 408, 2370, 979, 0, 2494, |
| 3640, 0, 0, 0, 0, 1013, 1172, 1937, 2471, 0, 0, 0, 84, 519, 0, 1452, |
| 1596, 0, 1521, 0, 3417, 0, 1555, 0, 1997, 4116, 1537, 3657, 0, 0, 445, 451, |
| 2039, 835, 3931, 0, 4100, 1128, 0, 501, 0, 0, 0, 248, 0, 0, 4088, 2388, |
| 629, 0, 801, 0, 0, 1568, 771, 0, 949, 0, 140, 0, 0, 1806, 1568, 0, |
| 0, 2030, 1755, 0, 0, 2075, 0, 2829, 0, 0, 0, 0, 854, 1779, 0, 1022, |
| 2947, 0, 2714, 0, 668, 1835, 106, 0, 0, 111, 1656, 1230, 0, 0, 0, 0, |
| 3187, 406, 0, 752, 972, 0, 2872, 73, 0, 4400, 2630, 0, 1194, 399, 0, 948, |
| 0, 429, 0, 4344, 2988, 0, 1482, 3078, 0, 3811, 0, 0, 0, 453, 0, 1268, |
| 0, 0, 0, 1643, 1883, 0, 391, 1478, 1476, 0, 0, 907, 432, 0, 556, 0, |
| 0, 3783, 0, 2575, 2017, 4024, 0, 0, 0, 570, 2698, 1749, 0, 0, 0, 2650, |
| 1490, 0, 0, 0, 0, 906, 0, 0, 488, 1274, 0, 310, 436, 4202, 3961, 0, |
| 255, 2232, 2841, 0, 0, 0, 1666, 262, 1320, 0, 2744, 4376, 0, 0, 1651, 0, |
| 110, 0, 0, 0, 0, 775, 0, 0, 2425, 4122, 0, 1814, 0, 1951, 0, 0, |
| 0, 924, 3999, 0, 1109, 202, 0, 1719, 1045, 230, 0, 1359, 102, 0, 0, 0, |
| 542, 0, 872, 676, 0, 1685, 0, 0, 44, 0, 798, 553, 0, 239, 0, 0, |
| 0, 0, 881, 2692, 0, 4224, 0, 3537, 0, 0, 2051, 0, 0, 0, 0, 4291, |
| 0, 1617, 126, 4440, 1170, 491, 0, 0, 3101, 0, 0, 1044, 1499, 1290, 0, 0, |
| 0, 278, 0, 0, 1600, 0, 0, 0, 0, 0, 0, 0, 2903, 0, 0, 0, |
| 0, 684, 472, 0, 742, 3004, 0, 0, 1851, 1386, 1160, 1494, 1859, 0, 3500, 4048, |
| 581, 0, 0, 226, 1737, 0, 0, 0, 354, 0, 3818, 0, 4092, 0, 0, 1895, |
| 0, 1866, 1629, 0, 696, 0, 0, 1811, 0, 0, 0, 0, 0, 0, 0, 3865, |
| 753, 0, 0, 1902, 0, 0, 403, 831, 0, 1269, 0, 0, 0, 0, 2689, 0, |
| 0, 0, 0, 0, 0, 1275, 0, 0, 1799, 968, 0, 0, 0, 471, 466, 109, |
| 0, 0, 4410, 0, 2886, 3928, 725, 0, 0, 0, 1271, 2067, 2790, 1810, 0, 0, |
| 0, 0, 98, 0, 867, 1424, 1558, 1665, 1393, 0, 940, 692, 0, 0, 290, 803, |
| 0, 0, 1839, 0, 3825, 0, 1040, 0, 0, 0, 0, 0, 0, 0, 0, 3660, |
| 1943, 0, 0, 959, 1505, 4212, 238, 0, 0, 0, 119, 0, 0, 0, 407, 0, |
| 0, 0, 0, 3009, 1974, 1309, 0, 775, 0, 3398, 0, 532, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 785, 0, 0, 2087, 0, 0, 0, 1647, 0, 0, 840, |
| 3232, 1827, 0, 336, 3195, 0, 12, 0, 778, 0, 1004, 1148, 0, 513, 3952, 0, |
| 0, 155, 567, 0, 0, 0, 1905, 0, 0, 950, 1021, 0, 2350, 1140, 0, 870, |
| 218, 291, 0, 1859, 3042, 708, 1500, 4199, 2385, 0, 0, 2040, 0, 276, 710, 3508, |
| 0, 0, 3049, 0, 0, 183, 219, 1025, 0, 4272, 3738, 0, 2222, 0, 1224, 1984, |
| 4319, 374, 0, 0, 0, 0, 0, 945, 2352, 496, 0, 1759, 0, 0, 0, 425, |
| 2723, 0, 0, 0, 771, 0, 0, 1185, 961, 3977, 0, 0, 0, 0, 0, 0, |
| 934, 0, 1340, 2162, 1199, 0, 0, 0, 0, 110, 851, 0, 0, 0, 0, 540, |
| 2149, 415, 0, 3873, 208, 0, 1655, 495, 1902, 0, 0, 2135, 0, 0, 0, 639, |
| 3197, 0, 0, 0, 3487, 0, 234, 0, 0, 0, 1378, 0, 0, 723, 107, 955, |
| 0, 0, 3313, 0, 3589, 419, 0, 4015, 1633, 2623, 0, 1129, 0, 1347, 2147, 0, |
| 0, 3079, 2172, 1649, 0, 0, 505, 0, 0, 2215, 0, 3567, 1279, 3671, 526, 1356, |
| 0, 1078, 507, 347, 0, 695, 0, 162, 0, 1867, 1923, 0, 530, 0, 0, 555, |
| 0, 0, 0, 0, 2208, 0, 0, 1838, 0, 0, 0, 0, 0, 1924, 1492, 0, |
| 1738, 1337, 0, 3595, 0, 690, 1269, 0, 1946, 0, 395, 0, 0, 13, 0, 0, |
| 866, 2298, 1771, 0, 0, 0, 728, 2447, 3227, 3237, 667, 0, 0, 0, 1279, 2780, |
| 0, 0, 0, 435, 4301, 2397, 4103, 672, 1657, 0, 0, 4024, 0, 0, 0, 0, |
| 3357, 0, 0, 1010, 0, 0, 0, 0, 1660, 3424, 0, 0, 0, 616, 371, 0, |
| 1705, 4365, 999, 275, 0, 0, 963, 0, 0, 794, 4047, 1749, 1406, 0, 55, 1751, |
| 0, 0, 0, 0, 0, 0, 0, 0, 739, 0, 649, 0, 0, 0, 3989, 0, |
| 3272, 0, 0, 0, 0, 0, 0, 0, 3295, 0, 1427, 0, 0, 811, 0, 351, |
| 0, 3834, 0, 1564, 0, 0, 1059, 2743, 3304, 1938, 0, 923, 378, 3177, 0, 0, |
| 1470, 0, 286, 0, 3065, 1371, 0, 675, 1708, 0, 0, 1203, 0, 0, 0, 0, |
| 376, 0, 345, 983, 2009, 0, 3788, 27, 247, 822, 0, 835, 1903, 575, 561, 1806, |
| 0, 107, 0, 1466, 0, 0, 1155, 85, 0, 2077, 0, 0, 838, 731, 289, 0, |
| 0, 0, 2114, 3728, 1067, 2248, 1546, 1000, 0, 0, 550, 3066, 1987, 0, 0, 0, |
| 0, 202, 0, 1788, 0, 981, 0, 3628, 882, 3969, 1795, 639, 4323, 0, 0, 0, |
| 614, 751, 0, 0, 3917, 326, 4035, 452, 1688, 4105, 4053, 0, 0, 797, 755, 3429, |
| 0, 4058, 0, 0, 0, 512, 3446, 0, 0, 0, 2624, 0, 3564, 1335, 0, 1245, |
| 2282, 301, 0, 0, 945, 0, 0, 0, 3408, 0, 0, 0, 4298, 0, 0, 1612, |
| 312, 1740, 0, 491, 3070, 0, 222, 3974, 1172, 898, 0, 1213, 0, 0, 1076, 2750, |
| 582, 0, 4030, 297, 0, 0, 3209, 0, 2012, 0, 409, 459, 102, 0, 0, 0, |
| 0, 318, 3156, 4381, 0, 243, 0, 1066, 3613, 3654, 2871, 3545, 0, 0, 585, 904, |
| 274, 0, 1457, 0, 0, 4058, 693, 15, 0, 1009, 4195, 0, 0, 0, 524, 0, |
| 0, 0, 0, 844, 203, 1782, 2118, 0, 672, 2269, 0, 0, 1905, 0, 0, 4417, |
| 0, 3797, 454, 0, 195, 0, 930, 4168, 480, 743, 4217, 0, 0, 3706, 2915, 2273, |
| 1063, 677, 0, 4420, 2326, 0, 0, 0, 1179, 1725, 0, 0, 3730, 0, 39, 4270, |
| 1585, 0, 1925, 3912, 0, 0, 0, 0, 0, 0, 4274, 0, 824, 0, 971, 0, |
| 0, 0, 0, 1928, 298, 0, 734, 0, 0, 10, 2811, 850, 0, 2731, 1322, 4050, |
| 2774, 0, 4322, 786, 346, 2108, 0, 0, 1920, 0, 0, 1660, 280, 174, 518, 3704, |
| 3169, 0, 0, 3434, 3345, 3828, 3865, 0, 196, 1421, 0, 0, 2368, 483, 1716, 0, |
| 0, 0, 0, 0, 0, 0, 593, 420, 0, 829, 0, 248, 1450, 4228, 0, 190, |
| 0, 3538, 4358, 3070, 0, 1222, 33, 0, 0, 16, 355, 0, 364, 606, 297, 0, |
| 1159, 1532, 0, 486, 0, 0, 0, 60, 749, 463, 861, 0, 4408, 463, 0, 0, |
| 849, 218, 0, 0, 0, 1062, 1411, 0, 1276, 45, 0, 0, 0, 87, 669, 861, |
| 570, 1206, 0, 0, 0, 0, 1367, 163, 353, 2631, 688, 1288, 0, 383, 0, 0, |
| 0, 0, 1901, 1817, 532, 1743, 438, 0, 3196, 0, 1135, 3962, 0, 0, 0, 1458, |
| 500, 253, 1314, 3690, 519, 0, 1729, 0, 1513, 692, 1127, 257, 0, 534, 0, 302, |
| 0, 0, 0, 0, 0, 1193, 50, 0, 314, 0, 0, 332, 4102, 265, 0, 1208, |
| 0, 2236, 0, 0, 0, 917, 0, 0, 2083, 2924, 543, 2492, 3603, 762, 423, 0, |
| 1293, 3452, 0, 2499, 0, 1700, 0, 0, 812, 1928, 1280, 2631, 436, 1422, 0, 0, |
| 1201, 0, 0, 1339, 68, 1872, 4153, 4268, 4238, 0, 1704, 0, 0, 0, 523, 0, |
| 0, 2026, 987, 292, 177, 1381, 1034, 518, 0, 0, 1611, 4312, 3213, 0, 0, 952, |
| 0, 0, 541, 818, 0, 0, 1349, 0, 0, 525, 0, 1459, 0, 1408, 3696, 823, |
| 0, 1883, 109, 4102, 1011, 700, 1049, 1167, 840, 0, 3919, 1405, 0, 2137, 1293, 0, |
| 0, 0, 698, 1169, 45, 0, 578, 0, 3507, 0, 4197, 379, 0, 0, 228, 519, |
| 0, 0, 4270, 0, 28, 0, 581, 1071, 1434, 0, 267, 0, 0, 408, 2883, 64, |
| 1411, 730, 1394, 0, 0, 2112, 1307, 0, 0, 236, 0, 0, 3601, 4029, 0, 0, |
| 716, 0, 2456, 0, 3915, 4440, 2555, 3643, 0, 628, 1357, 1373, 1008, 0, 0, 3022, |
| 1346, 230, 0, 0, 1991, 432, 101, 0, 0, 0, 0, 1767, 0, 0, 3903, 0, |
| 236, 3881, 0, 1921, 0, 2200, 0, 4411, 0, 1007, 3900, 0, 0, 282, 0, 1362, |
| 1018, 0, 0, 1191, 4441, 0, 0, 1280, 741, 2106, 1910, 0, 0, 394, 1720, 0, |
| 970, 0, 0, 0, 0, 4025, 0, 4150, 95, 3451, 132, 2737, 1448, 0, 230, 3911, |
| 0, 0, 713, 0, 0, 2156, 314, 382, 3165, 158, 1849, 0, 3498, 4204, 179, 0, |
| 0, 0, 913, 0, 0, 0, 3279, 1766, 2680, 4279, 591, 0, 4045, 3673, 3881, 0, |
| 1562, 421, 1387, 4121, 4154, 4200, 0, 3912, 97, 3476, 242, 0, 0, 258, 1299, 460, |
| 0, 0, 0, 0, 0, 4257, 0, 0, 440, 0, 0, 1967, 736, 2881, 0, 164, |
| 0, 2813, 3015, 2070, 0, 0, 0, 0, 294, 1999, 1933, 4131, 1509, 2148, 0, 0, |
| 1969, 1583, 2383, 2596, 986, 1628, 0, 49, 0, 0, 0, 0, 9, 0, 1127, 49, |
| 0, 0, 52, 0, 1012, 0, 1351, 0, 2061, 2487, 1716, 1424, 0, 3255, 967, 1752, |
| 0, 4326, 0, 639, 0, 1348, 2053, 3758, 1296, 1818, 1805, 0, 0, 0, 4321, 2091, |
| 0, 0, 2320, 0, 0, 3821, 193, 3423, 0, 2160, 0, 1107, 1631, 25, 0, 0, |
| 0, 0, 1436, 3024, 1003, 0, 2325, 0, 0, 683, 1023, 1760, 0, 1894, 16, 780, |
| 1558, 244, 1005, 0, 492, 2069, 1020, 1315, 3756, 764, 0, 0, 30, 0, 467, 1511, |
| 414, 0, 0, 0, 570, 0, 0, 0, 2072, 1627, 0, 0, 2037, 0, 539, 832, |
| 899, 0, 0, 638, 651, 901, 462, 1216, 0, 1074, 0, 0, 1006, 0, 0, 0, |
| 0, 3390, 1987, 0, 831, 1710, 0, 0, 3856, 2599, 960, 3988, 0, 4209, 0, 771, |
| 0, 0, 4415, 2729, 0, 0, 2165, 772, 0, 0, 2181, 431, 4130, 1508, 48, 790, |
| 3068, 0, 4306, 1596, 0, 0, 859, 0, 823, 3596, 2052, 3141, 0, 4377, 0, 194, |
| 414, 0, 0, 1051, 964, 1532, 0, 0, 1266, 3492, 0, 0, 0, 829, 1504, 0, |
| 1895, 0, 648, 831, 2964, 37, 3224, 1426, 3699, 1203, 1929, 1302, 2167, 0, 993, 1771, |
| 106, 0, 842, 0, 1152, 0, 0, 0, 1605, 0, 1533, 0, 709, 96, 658, 2045, |
| 2865, 618, 0, 3439, 0, 4312, 2084, 371, 0, 1961, 142, 0, 0, 0, 1552, 0, |
| 0, 0, 3070, 0, 1381, 1099, 1423, 0, 2743, 0, 46, 3081, 62, 3152, 0, 1067, |
| 3948, 2254, 808, 0, 0, 1791, 0, 2956, 1336, 153, 0, 1695, 2180, 335, 0, 502, |
| 896, 3491, 0, 925, 441, 464, 0, 0, 3206, 3577, 408, 2565, 2166, 4007, 734, 1520, |
| 766, 0, 0, 586, 0, 1025, 0, 1346, 2, 0, 140, 1355, 1884, 4337, 916, 1411, |
| 0, 0, 0, 76, 0, 1202, 4196, 1720, 1176, 0, 3222, 1724, 785, 0, 0, 45, |
| 0, 1286, 0, 144, 0, 4040, 0, 0, 0, 910, 0, 0, 277, 1484, 1494, 3994, |
| 0, 0, 364, 953, 582, 623, 1748, 952, 0, 0, 799, 0, 0, 3675, 7, 884, |
| 2132, 0, 497, 703, 0, 0, 0, 1527, 0, 0, 0, 558, 3175, 0, 2886, 20, |
| 0, 863, 0, 1542, 1194, 0, 0, 0, 1530, 0, 1426, 3370, 1184, 1888, 0, 0, |
| 0, 1879, 0, 0, 0, 0, 1373, 0, 0, 3925, 0, 0, 609, 3556, 886, 512, |
| 0, 1443, 1158, 0, 1601, 0, 496, 0, 0, 0, 0, 3980, 316, 0, 3999, 608, |
| 1375, 4451, 2447, 334, 0, 614, 1540, 3033, 3997, 0, 4215, 1469, 0, 1137, 925, 1312, |
| 0, 1765, 0, 2335, 645, 0, 943, 0, 2472, 0, 1214, 1635, 0, 0, 83, 4375, |
| 1993, 207, 291, 1175, 0, 2020, 0, 1194, 0, 540, 0, 641, 0, 0, 0, 1652, |
| 4302, 4210, 1077, 0, 4000, 0, 700, 3918, 3319, 3820, 750, 2117, 3307, 0, 3891, 1427, |
| 3662, 2483, 0, 14, 0, 0, 0, 2064, 0, 0, 0, 0, 1040, 0, 2024, 857, |
| 0, 1671, 879, 684, 682, 0, 846, 0, 1964, 3883, 0, 2651, 0, 0, 0, 3344, |
| 3567, 1574, 0, 1079, 1181, 1637, 482, 0, 2037, 265, 0, 1412, 0, 2269, 1227, 0, |
| 315, 297, 0, 2, 512, 0, 1097, 1347, 0, 4166, 0, 0, 0, 0, 0, 0, |
| 1372, 368, 1293, 0, 0, 0, 2843, 571, 1965, 4451, 1207, 1894, 1973, 2267, 0, 1274, |
| 0, 1584, 1144, 0, 2289, 1717, 3714, 1001, 0, 0, 1008, 834, 346, 1993, 1330, 4271, |
| 2874, 2332, 0, 0, 951, 0, 0, 0, 0, 3962, 1194, 1830, 1537, 3864, 807, 1958, |
| 0, 0, 4321, 0, 0, 0, 2290, 1033, 1590, 0, 340, 444, 3595, 3436, 425, 1916, |
| 0, 12, 182, 1544, 2176, 0, 1535, 1624, 0, 0, 1212, 0, 0, 4223, 0, 0, |
| 614, 2131, 0, 430, 1003, 667, 2642, 2027, 0, 1845, 631, 1056, 1252, 0, 468, 4019, |
| 0, 0, 0, 0, 1481, 1951, 3403, 1374, 0, 0, 0, 4294, 1220, 114, 0, 418, |
| 651, 98, 1015, 4403, 0, 1295, 0, 1338, 3941, 0, 542, 3496, 75, 916, 404, 329, |
| 0, 1438, 300, 957, 0, 0, 602, 373, 0, 2540, 2585, 23, 1959, 293, 3627, 1485, |
| 1242, 0, 0, 0, 1108, 0, 533, 0, 1842, 772, 0, 879, 1240, 0, 1545, 0, |
| 0, 0, 159, 111, 731, 0, 0, 0, 1284, 127, 2538, 2422, 0, 1077, 657, 862, |
| 3393, 3538, 398, 859, 1477, 0, 3066, 0, 0, 1873, 0, 1188, 39, 3293, 397, 0, |
| 0, 1098, 1549, 0, 0, 0, 6, 4275, 3349, 1906, 518, 1259, 1310, 167, 754, 329, |
| 0, 2196, 778, 3061, 0, 1447, 811, 0, 984, 0, 0, 1386, 1267, 0, 0, 0, |
| 1429, 1565, 1976, 3102, 0, 0, 0, 3727, 0, 2404, 0, 0, 3510, 2113, 0, 1147, |
| 0, 1704, 0, 0, 75, 0, 3848, 0, 0, 0, 0, 822, 3353, 4291, 978, 1393, |
| 1631, 0, 4272, 1276, 0, 0, 0, 2093, 774, 0, 3925, 901, 0, 3714, 0, 0, |
| 1582, 0, 1742, 4026, 748, 2962, 1209, 0, 0, 1440, 940, 2826, 0, 797, 2567, 4275, |
| 252, 2842, 3771, 0, 1223, 0, 0, 1900, 0, 3580, 1282, 1112, 0, 1261, 123, 117, |
| 381, 537, 1615, 2429, 1559, 1102, 2475, 1722, 0, 903, 0, 3890, 466, 3629, 338, 0, |
| 887, 4365, 676, 1438, 837, 120, 0, 941, 0, 1869, 353, 1742, 0, 1479, 0, 3562, |
| 0, 1483, 3730, 0, 3009, 0, 0, 0, 1887, 161, 635, 0, 3014, 0, 4170, 0, |
| 0, 947, 0, 119, 1617, 0, 0, 2562, 169, 458, 0, 1047, 1108, 1879, 504, 0, |
| 2102, 0, 1144, 2339, 364, 0, 0, 0, 40, 0, 2062, 283, 0, 745, 4330, 0, |
| 99, 1996, 0, 2711, 1765, 0, 1424, 3705, 0, 0, 0, 0, 1358, 4383, 3326, 0, |
| 0, 3030, 499, 2276, 0, 3230, 0, 923, 0, 0, 4362, 4025, 871, 0, 0, 0, |
| 1529, 0, 2906, 916, 0, 0, 4269, 1211, 0, 1802, 0, 0, 2895, 1825, 873, 1053, |
| 1322, 1833, 360, 0, 1586, 1730, 0, 1072, 0, 0, 0, 943, 1379, 0, 3869, 4429, |
| 3154, 1312, 2013, 0, 4232, 1317, 336, 637, 2071, 16, 4384, 0, 832, 0, 3, 0, |
| 0, 0, 1650, 4308, 0, 1869, 0, 0, 4115, 1017, 316, 0, 0, 1843, 0, 1378, |
| 577, 0, 0, 4440, 81, 3849, 0, 1644, 4385, 3917, 1747, 0, 1664, 0, 1217, 367, |
| 0, 0, 2700, 0, 208, 2033, 0, 413, 656, 632, 433, 0, 0, 934, 0, 37, |
| 4004, 0, 0, 1536, 342, 0, 0, 666, 363, 118, 4353, 0, 0, 0, 249, 105, |
| 1553, 1547, 19, 0, 493, 1350, 1917, 1691, 0, 1349, 0, 380, 756, 0, 0, 0, |
| 0, 0, 1415, 0, 1643, 0, 0, 241, 3884, 2489, 1276, 0, 0, 717, 0, 1468, |
| 0, 146, 1965, 0, 1116, 0, 2624, 0, 878, 2182, 1566, 1770, 850, 699, 0, 0, |
| 1846, 535, 0, 584, 0, 2002, 244, 0, 3769, 1094, 2006, 0, 0, 0, 4207, 3761, |
| 4353, 1046, 310, 3707, 0, 1253, 1284, 0, 0, 3085, 337, 2234, 162, 4231, 0, 422, |
| 5, 694, 1721, 0, 1853, 1474, 191, 1298, 0, 0, 2918, 4065, 0, 0, 1089, 0, |
| 0, 1310, 2035, 4324, 34, 0, 0, 1853, 0, 4390, 1251, 0, 1095, 1677, 1126, 1035, |
| 1048, 773, 2534, 767, 16, 343, 3632, 768, 538, 0, 1909, 672, 0, 461, 1732, 0, |
| 4193, 0, 1434, 1387, 2036, 0, 0, 2293, 0, 0, 920, 0, 1138, 1125, 0, 0, |
| 0, 1453, 0, 1990, 0, 1289, 76}; |
| |
| 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 %= 4455; |
| } |
| return mangledkG[sum]; |
| } |
| |
| int MangledPerfectHash(const char *key) |
| { |
| if (strlen(key) > 37) |
| return 0; |
| |
| return (MangledHashG(key, mangledkT1) + MangledHashG(key, mangledkT2)) % 4455; |
| } |
| |
| constexpr int unmangledkT1[] = {152, 85, 131, 46, 141, 140, 355, 227, 157, 95, 193, 274, 113, |
| 293, 338, 312, 38, 56, 305, 7, 299, 103, 63, 14, 147, 26}; |
| constexpr int unmangledkT2[] = {16, 254, 132, 341, 351, 23, 144, 38, 280, 327, 291, 81, 145, |
| 376, 164, 258, 319, 373, 246, 29, 53, 104, 148, 299, 8, 288}; |
| constexpr int unmangledkG[] = { |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, 207, 0, 0, 0, 0, 155, |
| 106, 0, 305, 0, 0, 8, 0, 0, 0, 0, 0, 195, 0, 252, 0, 0, 0, 84, 0, |
| 0, 0, 179, 24, 0, 0, 0, 0, 0, 54, 317, 0, 288, 264, 8, 0, 0, 342, 0, |
| 0, 0, 122, 0, 0, 365, 135, 361, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, |
| 212, 0, 0, 152, 0, 25, 0, 134, 0, 167, 0, 0, 0, 355, 92, 0, 265, 374, 0, |
| 92, 0, 102, 0, 158, 152, 0, 0, 0, 0, 0, 288, 32, 0, 139, 0, 103, 365, 296, |
| 0, 66, 0, 370, 122, 149, 0, 0, 0, 0, 0, 349, 148, 191, 281, 172, 0, 374, 0, |
| 0, 0, 148, 0, 357, 272, 0, 115, 50, 0, 142, 11, 0, 0, 367, 49, 223, 54, 0, |
| 0, 0, 171, 84, 130, 0, 252, 0, 0, 85, 0, 116, 0, 0, 0, 0, 119, 270, 296, |
| 23, 71, 180, 59, 216, 284, 73, 0, 0, 0, 63, 0, 236, 115, 71, 171, 4, 0, 369, |
| 0, 0, 0, 267, 330, 90, 133, 81, 39, 0, 378, 190, 23, 346, 0, 0, 176, 0, 119, |
| 0, 0, 0, 0, 0, 0, 12, 298, 248, 97, 0, 34, 0, 53, 80, 247, 150, 387, 88, |
| 21, 0, 183, 341, 23, 363, 0, 14, 143, 111, 26, 0, 40, 28, 46, 0, 0, 165, 182, |
| 0, 0, 19, 0, 0, 0, 0, 235, 209, 305, 74, 339, 198, 14, 0, 200, 250, 35, 190, |
| 22, 194, 0, 122, 66, 167, 0, 0, 135, 0, 0, 201, 0, 157, 0, 255, 163, 339, 73, |
| 0, 271, 0, 0, 0, 101, 0, 0, 182, 0, 27, 364, 0, 87, 20, 0, 385, 383, 33, |
| 0, 0, 128, 0, 213, 232, 74, 150, 8, 16, 244, 0, 0, 55, 5, 72, 189, 186, 0, |
| 17, 116, 378, 55, 352, 148, 0, 285, 0, 123, 0, 43, 0, 0, 0, 305, 240, 0, 131, |
| 0, 69, 185, 174, 0, 34, 70, 378, 170, 104, 208, 281, 118, 0, 260, 173, 0, 0, 166, |
| 6, 30, 0, 254, 214, 204, 0, 0, 153, 0, 67, 368, 121, 2, 0, 139, 193, 0, 0, |
| 285, 325, 0, 0, 0, 0, 0, 96}; |
| |
| 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 %= 388; |
| } |
| return unmangledkG[sum]; |
| } |
| |
| int UnmangledPerfectHash(const char *key) |
| { |
| if (strlen(key) > 26) |
| return 0; |
| |
| return (UnmangledHashG(key, unmangledkT1) + UnmangledHashG(key, unmangledkT2)) % 388; |
| } |
| |
| } // 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 |