| // 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[] = {1180, 782, 1103, 563, 2974, 1464, 855, 2226, 533, 946, |
| 2364, 1527, 2823, 1963, 1949, 406, 1029, 185, 2724, 2797, |
| 2341, 264, 1903, 2150, 3196, 1935, 1186, 1337, 65, 194, |
| 557, 2982, 1963, 2229, 2382, 1040, 776, 2536, 2699, 2002}; |
| constexpr int mangledkT2[] = {243, 2806, 2646, 900, 1556, 238, 1079, 2379, 1830, 1969, |
| 1294, 2251, 438, 1259, 2530, 476, 2188, 2765, 253, 197, |
| 3034, 1339, 1962, 2836, 1405, 1808, 2356, 1708, 1616, 2555, |
| 2384, 835, 1185, 1976, 1471, 1429, 2833, 3097, 1699, 752}; |
| constexpr int mangledkG[] = { |
| 0, 0, 0, 0, 0, 0, 0, 855, 969, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 1644, 2907, 0, 405, 946, 0, 0, 1104, 0, 969, 508, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 1376, 0, 0, 0, 0, 0, 0, 0, |
| 0, 2630, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 2774, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2151, 0, 675, 0, 0, 0, |
| 0, 0, 0, 0, 2606, 0, 1140, 1982, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 43, 1154, 0, 0, 0, 0, 2719, 963, 1401, 363, 0, |
| 0, 0, 1483, 0, 0, 2838, 0, 0, 0, 123, 0, 2637, 0, 0, 0, 1236, |
| 444, 252, 0, 1356, 756, 0, 0, 0, 0, 2619, 0, 321, 0, 0, 0, 0, |
| 0, 0, 133, 0, 0, 0, 2604, 388, 0, 0, 0, 0, 0, 0, 0, 0, |
| 1945, 0, 2090, 0, 0, 0, 0, 0, 196, 0, 0, 0, 47, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2965, 1013, 2305, 452, |
| 0, 193, 549, 0, 0, 0, 0, 0, 96, 0, 0, 1848, 0, 3189, 0, 0, |
| 1154, 0, 0, 2874, 0, 2297, 0, 0, 0, 3135, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 1043, 0, 1450, 0, 0, 2821, 0, 3104, 819, 588, 0, 1938, 0, |
| 0, 0, 370, 2518, 1986, 1323, 0, 1991, 1123, 0, 0, 1797, 0, 771, 639, 0, |
| 2709, 1573, 0, 1912, 2052, 0, 0, 0, 974, 3139, 0, 2030, 2481, 0, 0, 1962, |
| 138, 0, 0, 0, 0, 0, 901, 0, 743, 0, 2747, 0, 0, 231, 1597, 0, |
| 1303, 0, 2024, 0, 0, 0, 737, 0, 0, 495, 0, 0, 0, 0, 1542, 611, |
| 0, 931, 0, 473, 0, 0, 0, 172, 2730, 0, 0, 1885, 0, 989, 0, 0, |
| 0, 229, 0, 392, 725, 1583, 0, 3057, 0, 2412, 0, 0, 0, 0, 0, 0, |
| 1309, 2569, 0, 2881, 516, 938, 363, 3126, 2769, 0, 3188, 0, 0, 371, 215, 0, |
| 1239, 0, 598, 0, 0, 0, 0, 1223, 1217, 0, 0, 0, 1672, 0, 0, 0, |
| 698, 0, 0, 1312, 0, 2763, 0, 0, 1220, 1064, 0, 1607, 0, 0, 0, 0, |
| 1277, 0, 0, 0, 0, 885, 0, 1619, 0, 689, 2999, 0, 0, 0, 0, 236, |
| 0, 1099, 960, 0, 285, 1626, 0, 2138, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 673, 1940, 1604, 0, 0, 0, 0, 0, 0, 911, 538, 0, 0, 0, |
| 605, 2958, 0, 0, 1604, 0, 0, 0, 0, 0, 0, 0, 287, 429, 1698, 0, |
| 0, 0, 0, 1111, 0, 640, 1122, 3026, 0, 1379, 1185, 0, 0, 0, 757, 0, |
| 0, 144, 0, 0, 3013, 0, 0, 0, 2992, 2171, 1137, 1474, 2298, 0, 405, 0, |
| 0, 0, 1012, 0, 426, 0, 0, 0, 0, 141, 682, 0, 1762, 763, 1585, 0, |
| 0, 0, 0, 0, 3201, 542, 482, 0, 0, 749, 588, 0, 0, 0, 0, 1392, |
| 0, 377, 0, 0, 0, 2627, 0, 1923, 0, 0, 0, 0, 0, 2838, 678, 0, |
| 0, 0, 2586, 0, 2498, 0, 783, 0, 0, 1074, 0, 0, 0, 0, 0, 0, |
| 0, 2993, 328, 0, 0, 2725, 323, 0, 0, 0, 0, 0, 0, 0, 2952, 0, |
| 879, 0, 0, 0, 0, 0, 1499, 0, 0, 2175, 1279, 0, 2322, 0, 0, 2438, |
| 0, 184, 0, 125, 0, 0, 0, 1737, 0, 0, 2987, 165, 282, 850, 0, 88, |
| 0, 2603, 0, 1069, 0, 0, 2857, 0, 0, 0, 929, 279, 460, 650, 0, 0, |
| 0, 797, 0, 0, 0, 0, 0, 821, 0, 886, 284, 0, 0, 2650, 3009, 0, |
| 0, 2533, 2638, 2146, 155, 1466, 1350, 2416, 0, 2455, 0, 0, 0, 0, 0, 987, |
| 2649, 0, 1610, 0, 0, 0, 0, 1167, 62, 0, 588, 1092, 0, 0, 1220, 3141, |
| 757, 0, 0, 2569, 0, 0, 2823, 2966, 0, 0, 228, 1309, 1953, 2116, 2267, 802, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 3030, 3186, 376, 694, |
| 0, 1191, 3157, 826, 0, 0, 0, 0, 0, 967, 0, 245, 571, 2888, 0, 0, |
| 786, 1783, 148, 637, 0, 0, 1486, 0, 0, 426, 0, 0, 0, 0, 0, 3197, |
| 2927, 0, 0, 0, 155, 2111, 0, 0, 1771, 1625, 0, 0, 0, 0, 0, 0, |
| 2744, 1023, 1403, 2268, 867, 0, 0, 0, 0, 616, 0, 0, 258, 0, 259, 182, |
| 834, 2251, 54, 0, 1124, 0, 0, 445, 0, 3198, 1848, 0, 0, 0, 750, 0, |
| 0, 0, 0, 0, 695, 1103, 3085, 0, 0, 1016, 1090, 0, 151, 1358, 1369, 0, |
| 0, 0, 0, 0, 3083, 2677, 2820, 0, 0, 0, 0, 634, 0, 2467, 0, 2565, |
| 0, 0, 2056, 1294, 0, 1538, 0, 0, 1511, 2325, 0, 0, 25, 0, 0, 0, |
| 145, 0, 2458, 0, 2015, 517, 354, 823, 0, 0, 0, 0, 0, 1265, 141, 2476, |
| 0, 0, 0, 0, 1556, 184, 0, 0, 0, 0, 0, 1812, 134, 0, 1830, 0, |
| 0, 968, 1037, 0, 792, 2673, 527, 0, 0, 2445, 0, 0, 0, 0, 686, 0, |
| 0, 298, 1341, 0, 1020, 0, 0, 2045, 0, 0, 0, 0, 838, 329, 0, 2007, |
| 1092, 1121, 1411, 0, 0, 0, 0, 2377, 593, 213, 645, 849, 2232, 149, 676, 0, |
| 0, 0, 2902, 0, 1069, 1171, 892, 0, 416, 1281, 844, 0, 1081, 216, 397, 0, |
| 0, 138, 0, 322, 2527, 341, 2158, 0, 0, 1665, 2991, 6, 1405, 0, 0, 0, |
| 0, 0, 122, 394, 85, 0, 3201, 0, 447, 0, 0, 0, 679, 1489, 0, 2028, |
| 0, 2969, 1982, 3143, 2732, 1053, 0, 0, 2745, 0, 346, 0, 1071, 0, 528, 1848, |
| 0, 0, 879, 1929, 2839, 665, 0, 0, 282, 0, 0, 217, 0, 0, 632, 723, |
| 960, 0, 0, 0, 45, 334, 1890, 2771, 0, 0, 0, 0, 1452, 3012, 0, 1797, |
| 0, 0, 446, 0, 248, 3007, 421, 0, 0, 2754, 0, 2242, 0, 0, 1004, 0, |
| 0, 0, 0, 223, 3169, 0, 0, 529, 0, 0, 2802, 0, 0, 0, 0, 1625, |
| 0, 0, 2910, 324, 0, 2193, 1137, 3139, 0, 2970, 0, 1692, 2063, 1072, 1158, 0, |
| 0, 0, 765, 0, 631, 364, 0, 0, 0, 281, 777, 0, 1757, 0, 0, 1692, |
| 0, 192, 767, 0, 0, 451, 518, 0, 0, 0, 0, 3002, 1950, 0, 0, 200, |
| 0, 0, 854, 179, 2666, 0, 294, 0, 2888, 3080, 2207, 0, 944, 0, 0, 0, |
| 3072, 2662, 0, 0, 469, 256, 0, 0, 1339, 335, 0, 590, 600, 0, 998, 0, |
| 0, 0, 0, 0, 0, 0, 548, 2769, 0, 0, 0, 2405, 2348, 0, 215, 0, |
| 0, 0, 0, 0, 0, 0, 0, 612, 0, 0, 186, 210, 1350, 3104, 0, 54, |
| 402, 1150, 712, 0, 107, 0, 0, 0, 410, 2389, 0, 117, 2046, 2890, 2434, 2449, |
| 0, 729, 2658, 0, 0, 0, 2638, 0, 831, 512, 799, 0, 0, 0, 62, 0, |
| 0, 1865, 1887, 766, 46, 0, 0, 0, 0, 34, 0, 0, 0, 174, 2001, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 1548, |
| 0, 0, 1069, 832, 0, 1358, 0, 0, 0, 0, 0, 0, 160, 539, 0, 0, |
| 0, 0, 0, 304, 77, 0, 1532, 0, 0, 0, 278, 0, 0, 0, 0, 2794, |
| 0, 0, 0, 0, 2434, 0, 0, 1492, 0, 0, 0, 2511, 0, 0, 0, 1046, |
| 629, 0, 0, 0, 1037, 278, 0, 0, 0, 1507, 688, 2962, 0, 563, 679, 3159, |
| 0, 0, 0, 770, 2479, 0, 460, 1500, 2451, 351, 0, 83, 0, 775, 672, 0, |
| 1114, 429, 571, 0, 0, 0, 1136, 698, 0, 1131, 0, 0, 112, 0, 0, 0, |
| 0, 0, 22, 0, 0, 482, 516, 0, 2624, 0, 444, 2529, 0, 2683, 958, 0, |
| 1038, 0, 3099, 1311, 1111, 0, 983, 1281, 529, 1320, 0, 798, 1722, 0, 0, 2541, |
| 718, 0, 965, 0, 1454, 0, 2828, 0, 3144, 0, 0, 2759, 0, 0, 0, 0, |
| 0, 4, 0, 0, 125, 0, 0, 2418, 0, 870, 924, 1547, 0, 3193, 1083, 0, |
| 1199, 0, 3205, 0, 350, 0, 0, 0, 54, 892, 0, 0, 0, 1869, 0, 1868, |
| 2494, 831, 3183, 0, 1460, 0, 1654, 0, 0, 639, 0, 2164, 0, 0, 0, 0, |
| 724, 0, 0, 0, 476, 0, 1306, 931, 0, 3133, 2671, 549, 731, 0, 0, 0, |
| 0, 0, 0, 276, 0, 0, 0, 42, 0, 0, 2663, 1055, 0, 1355, 0, 0, |
| 2316, 2662, 347, 928, 0, 407, 0, 0, 0, 1033, 0, 0, 0, 0, 0, 0, |
| 674, 272, 0, 0, 593, 0, 729, 0, 0, 0, 0, 0, 2282, 0, 1260, 370, |
| 0, 2158, 0, 0, 684, 0, 715, 0, 0, 0, 759, 1102, 0, 1579, 0, 1137, |
| 0, 0, 0, 407, 0, 14, 981, 0, 0, 2715, 705, 0, 0, 78, 0, 0, |
| 0, 29, 2460, 0, 0, 0, 0, 558, 2871, 0, 2411, 0, 0, 604, 2641, 0, |
| 0, 0, 137, 0, 1223, 0, 561, 0, 0, 2788, 1225, 901, 0, 1681, 0, 0, |
| 454, 596, 0, 0, 0, 0, 2327, 0, 0, 0, 0, 1667, 1352, 0, 0, 506, |
| 0, 142, 0, 2654, 1603, 495, 1211, 443, 453, 1157, 584, 1576, 239, 1089, 373, 1536, |
| 1959, 0, 58, 30, 0, 0, 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, |
| 355, 1381, 254, 1563, 0, 418, 68, 2743, 1193, 0, 0, 782, 0, 102, 0, 2896, |
| 1325, 0, 662, 537, 3003, 3020, 933, 0, 0, 1759, 842, 0, 1676, 0, 0, 435, |
| 0, 0, 0, 2888, 0, 474, 1325, 0, 0, 957, 0, 0, 585, 0, 0, 767, |
| 298, 962, 671, 0, 2774, 299, 857, 0, 0, 1361, 0, 0, 426, 0, 2628, 0, |
| 776, 2366, 1266, 654, 0, 2283, 140, 0, 605, 0, 0, 0, 11, 245, 1288, 0, |
| 0, 827, 0, 3086, 1066, 48, 2279, 3000, 93, 3061, 2984, 0, 3004, 0, 0, 0, |
| 1374, 0, 1969, 0, 0, 0, 0, 2037, 1024, 2882, 499, 0, 0, 2051, 427, 0, |
| 82, 545, 1336, 0, 0, 0, 2521, 2316, 1155, 0, 0, 879, 0, 610, 0, 21, |
| 2280, 2856, 936, 0, 1043, 0, 2195, 0, 0, 664, 0, 872, 269, 0, 0, 0, |
| 144, 0, 0, 0, 133, 0, 0, 213, 1313, 103, 2534, 2122, 0, 1285, 21, 1213, |
| 871, 0, 982, 0, 309, 1478, 1980, 2587, 0, 0, 1246, 391, 2040, 792, 0, 858, |
| 302, 1299, 719, 0, 0, 726, 1142, 0, 36, 0, 21, 0, 1392, 0, 297, 0, |
| 0, 346, 656, 1295, 604, 1394, 0, 0, 1638, 0, 2648, 0, 0, 1522, 887, 2036, |
| 478, 2597, 657, 2538, 0, 598, 0, 0, 1596, 0, 1851, 0, 0, 826, 144, 894, |
| 1544, 717, 161, 606, 0, 396, 2646, 1182, 0, 5, 963, 677, 0, 0, 457, 1185, |
| 227, 2471, 1139, 0, 0, 0, 5, 5, 0, 40, 1048, 902, 2988, 820, 2093, 0, |
| 1015, 0, 0, 737, 0, 1144, 0, 449, 0, 388, 805, 312, 2547, 1230, 0, 0, |
| 2322, 2182, 269, 1447, 3134, 866, 0, 0, 1670, 1150, 0, 1419, 0, 2, 1491, 464, |
| 0, 2657, 0, 0, 0, 1033, 2789, 973, 1400, 2805, 906, 3150, 0, 1165, 1168, 2966, |
| 0, 1577, 0, 394, 1423, 0, 157, 2276, 0, 0, 1260, 211, 0, 0, 1240, 429, |
| 0, 176, 1050, 449, 31, 0, 0, 1326, 0, 0, 1126, 0, 352, 1205, 0, 2465, |
| 0, 1758, 0, 0, 18, 1449, 627, 262, 0, 2767, 0, 0, 0, 1294, 0, 0, |
| 0, 0, 208, 1539, 0, 0, 0, 0, 938, 0, 0, 2614, 0, 475, 843, 0, |
| 2668, 0, 1073, 0, 0, 186, 2444, 236, 8, 0, 110, 795, 0, 0, 0, 0, |
| 0, 0, 0, 2755, 1492, 0, 559, 727, 813, 0, 0, 542, 659, 406, 1463, 514, |
| 0, 0, 2976, 0, 1206, 740, 2036, 250, 961, 0, 999, 0, 1769, 0, 1330, 485, |
| 1402, 0, 1098, 3054, 2104, 0, 494, 0, 0, 3115, 0, 71, 0, 0, 0, 0, |
| 114, 345, 0, 0, 2819, 1036, 3108, 0, 407, 0, 638, 0, 0, 0, 1145, 562, |
| 0, 757, 2411, 0, 1141, 87, 3083, 3070, 0, 0, 87, 0, 3046, 0, 1255, 0, |
| 387, 0, 1151, 0, 0, 3038, 2228, 0, 0, 0, 540, 913, 1119, 0, 0, 0, |
| 562, 0, 0, 1024, 0, 455, 324, 0, 1010, 1483, 0, 793, 1188, 941, 0, 0, |
| 52, 94, 0, 0, 1409, 1261, 0, 2894, 709, 0, 873, 2970, 0, 3201, 2897, 0, |
| 3136, 285, 0, 2037, 2041, 240, 1357, 1148, 0, 2428, 0, 856, 1582, 0, 229, 0, |
| 1191, 1138, 0, 0, 818, 116, 355, 2621, 1176, 0, 1979, 1610, 594, 0, 0, 0, |
| 3174, 2985, 0, 1085, 255, 38, 2159, 1289, 774, 355, 0, 1281, 0, 2960, 639, 1247, |
| 0, 0, 3128, 2993, 1299, 386, 2256, 851, 3067, 0, 0, 887, 0, 0, 1334, 0, |
| 591, 160, 0, 89, 0, 669, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 2208, 0, 0, 2708, 0, 1022, 972, 0, 486, 0, 1438, 357, 1329, 975, 1271, 1129, |
| 3146, 0, 968, 869, 2210, 128, 2678, 0, 937, 0, 1063, 0, 0, 1267, 42, 2469, |
| 75, 0, 157, 0, 2659, 2776, 1855, 1146, 641, 0, 0, 330, 0, 0, 1294, 0, |
| 0, 0, 1229, 0, 826, 0, 878, 1398, 258, 0, 1713, 12, 0, 0, 246, 55, |
| 583, 1565, 1645, 0, 268, 0, 2754, 985, 0, 234, 1550, 1070, 2369, 1154, 0, 2750, |
| 0, 3037, 1408, 631, 941, 215, 268, 770, 3167, 2058, 1391, 0, 3153, 0, 1115, 2816, |
| 0, 0, 2933, 1875, 0, 1041, 330, 0, 1975, 364, 925, 12, 2946, 0, 1064, 2853, |
| 2069, 223, 3109, 2964, 112, 0, 1199, 0, 3196, 329, 1141, 696, 0, 1566, 0, 0, |
| 0, 0, 287, 0, 0, 658, 0, 0, 1575, 101, 0, 0, 0, 1399, 0, 0, |
| 782, 3054, 0, 0, 0, 0, 73, 0, 4, 0, 2300, 0, 212, 1217, 0, 0, |
| 0, 680, 509, 498, 701, 520, 0, 0, 2111, 2885, 0, 1471, 424, 824, 0, 0, |
| 0, 0, 1325, 0, 0, 0, 1697, 2443, 1076, 1630, 8, 1963, 0, 0, 563, 3013, |
| 0, 0, 3161, 2207, 0, 0, 729, 0, 845, 667, 0, 0, 522, 0, 766, 0, |
| 991, 3074, 2716, 2969, 1375, 0, 0, 0, 0, 3006, 273, 0, 0, 904, 275, 0, |
| 2320, 0, 0, 1365, 905, 720, 627, 0, 0, 1401, 1100, 0, 1509, 0, 38, 0, |
| 3148, 0, 0, 0, 249, 0, 0, 0, 1085, 281, 2243, 0, 315, 0, 0, 1172, |
| 0, 0, 0, 1088, 1517, 759, 2866, 0, 0, 0, 1293, 1974, 2572, 0, 1472, 0, |
| 86, 1416, 0, 1727, 114, 623, 1339, 1011, 3, 3203, 888, 2269, 268, 0, 679, 0, |
| 1231, 0, 1211, 921, 340, 1222, 0, 0, 0, 2686, 0, 1634, 0, 1594, 0, 664, |
| 0, 3086, 0, 1142, 911, 0, 836, 1155, 2773, 1536, 1800, 1394, 495, 0, 0, 2977, |
| 0, 0, 989, 296, 266, 0, 0, 522, 0, 1380, 994, 1327, 0, 1794, 987, 0, |
| 2402, 84, 0, 0, 3038, 0, 1163, 2073, 425, 0, 0, 755, 0, 1570, 0, 895, |
| 0, 2186, 0, 51, 392, 0, 0, 617, 0, 0, 256, 0, 0, 0, 0, 0, |
| 0, 631, 3142, 521, 2385, 2707, 0, 614, 3133, 0, 2818, 0, 0, 2522, 0, 1029, |
| 162, 0, 0, 1224, 1218, 0, 1445, 0, 1483, 992, 628, 1284, 0, 632, 183, 0, |
| 0, 1845, 1232, 3168, 2066, 2553, 0, 0, 0, 2826, 1495, 2032, 0, 2884, 1153, 602, |
| 0, 823, 1448, 1601, 2244, 33, 1979, 0, 93, 0, 0, 0, 2184, 2933, 0, 1416, |
| 1356, 210, 0, 1300, 0, 0, 0, 0, 1762, 2710, 2262, 0, 1089, 0, 1305, 2904, |
| 1257, 1744, 0, 703, 1094, 1398, 0, 2550, 1656, 3145, 0, 1392, 1802, 0, 0, 1081, |
| 866, 932, 1249, 0, 162, 416, 83, 42, 0, 2704, 2689, 0, 0, 0, 1800, 0, |
| 31, 97, 0, 65, 738, 434, 0, 0, 878, 0, 0, 0, 2466, 1019, 0, 0, |
| 3047, 0, 0, 0, 1187, 792, 0, 734, 2781, 1182, 0, 397, 2959, 908, 0, 1296, |
| 0, 0, 0, 2445, 1608, 190, 578, 0, 860, 0, 0, 258, 2765, 0, 0, 935, |
| 0, 0, 0, 0, 769, 655, 0, 1746, 0, 0, 3094, 1571, 1164, 0, 0, 40, |
| 1040, 437, 0, 93, 0, 1079, 2208, 0, 0, 1063, 3119, 0, 1109, 1135, 2512, 0, |
| 0, 489, 0, 568, 3181, 2263, 1243, 3113, 0, 0, 397, 0, 0, 0, 0, 0, |
| 267, 115, 2498, 1167, 583, 1654, 806, 0, 2534, 264, 0, 0, 0, 92, 218, 0, |
| 0, 7, 0, 0, 180, 0, 1239, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 1563, 1452, 2734, 790, 2687, 0, 1613, 2930, 0, 1770, 2508, 0, 840, 1695, 881, 2102, |
| 2997, 0, 763, 1075, 802, 473, 934, 1757, 0, 0, 3095, 0, 0, 1654, 0, 576, |
| 358, 2230, 0, 0, 1014, 0, 0, 193, 2930, 3126, 0, 1044, 2263, 1766, 87, 1069, |
| 471, 547, 263, 830, 1314, 58, 163, 2821, 0, 198, 0, 2403, 1528, 2865, 0, 826, |
| 0, 0, 206, 0, 2592, 1156, 0, 25, 1056, 3047, 2937, 0, 1452, 1814, 1519, 0, |
| 0, 0, 2025, 1113, 305, 0, 46, 0, 2218, 1248, 3063, 0, 281, 954, 124, 0, |
| 94, 383, 2078, 523, 2425, 43, 0, 552, 0, 0, 2589, 0, 0, 1162, 2884, 181, |
| 1766, 0, 2608, 0, 0, 936, 445, 104, 0, 0, 814, 0, 0, 0, 0, 0, |
| 647, 451, 1025, 1001, 1236, 2275, 1180, 0, 0, 0, 1578, 1183, 171, 0, 2602, 1436, |
| 0, 0, 0, 300, 0, 0, 596, 0, 1252, 1318, 2538, 1070, 435, 832, 0, 1317, |
| 257, 3014, 1181, 493, 39, 540, 768, 0, 1040, 308, 492, 0, 0, 0, 2442, 0, |
| 0, 1464, 1394, 0, 0, 1007, 0, 2657, 0, 0, 709, 1311, 0, 1237, 0, 0, |
| 0, 0, 0, 1552, 659, 959, 883, 0, 241, 1301, 2755, 0, 0, 3137, 0, 0, |
| 0, 1476, 13, 395, 0, 1916, 0, 0, 518, 0, 545, 2529, 0, 0, 0, 2965, |
| 1111, 385, 912, 2879, 0, 148, 1283, 325, 0, 2659, 781, 0, 235, 0, 341, 0, |
| 2833, 0, 0, 2066, 1100, 608, 0, 2918, 2971, 3182, 0, 451, 1703, 1705, 815, 142, |
| 2462, 282, 0, 0, 1621, 501, 0, 365, 327, 0, 373, 1344, 0, 762, 1473, 525, |
| 3094, 0, 0, 0, 0, 1173, 0, 0, 789, 2341, 2974, 0, 0, 1236, 3106, 2543, |
| 500, 2526, 1327, 973, 0, 694, 0, 2400, 2442, 1090, 130, 0, 2047, 0, 511, 0, |
| 620, 412, 0, 409, 942, 1193, 0, 3108, 1436, 508, 0, 1041, 1244, 722, 0, 1206, |
| 155, 2007, 374, 401, 13, 146, 622, 1276, 1018, 0, 0, 0, 1418, 1541, 0, 0, |
| 230, 0, 715, 358, 2305, 1057, 286, 0, 2675, 0, 2837, 1282, 0, 587, 0, 841, |
| 3139, 0, 1643, 0, 912, 0, 580, 1503, 0, 0, 69, 2560, 0, 0, 543, 90, |
| 80, 0, 0, 471, 313, 0, 0, 0, 0, 0, 0, 2621, 1547, 2913, 0, 63, |
| 1078, 384, 2778, 1182, 2878, 11, 0, 1108, 1542, 0, 0, 914, 1443, 0, 2337, 1529, |
| 0, 626, 0, 972, 0, 813, 0, 225, 1047, 1322, 1155, 1864, 510, 308, 0, 0, |
| 456, 0, 422, 2906, 758, 0, 2102, 425, 1426, 686, 0, 748, 752, 1614, 406, 86, |
| 519, 299, 0, 0, 161, 1362, 643, 0}; |
| |
| 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 %= 3208; |
| } |
| return mangledkG[sum]; |
| } |
| |
| int MangledPerfectHash(const char *key) |
| { |
| if (strlen(key) > 40) |
| return 0; |
| |
| return (MangledHashG(key, mangledkT1) + MangledHashG(key, mangledkT2)) % 3208; |
| } |
| |
| constexpr int unmangledkT1[] = {246, 133, 248, 237, 59, 207, 93, 240, 98, 265, 137, 42, 147, |
| 269, 280, 3, 248, 202, 278, 80, 240, 202, 142, 149, 257, 17}; |
| constexpr int unmangledkT2[] = {166, 291, 199, 102, 183, 190, 20, 31, 50, 30, 134, 213, 202, |
| 55, 268, 11, 15, 108, 22, 43, 119, 187, 239, 91, 190, 47}; |
| constexpr int unmangledkG[] = { |
| 0, 46, 0, 0, 0, 124, 0, 0, 0, 291, 0, 204, 0, 0, 230, 0, 0, 0, 0, |
| 48, 0, 0, 0, 0, 0, 152, 153, 0, 60, 0, 227, 127, 0, 0, 161, 0, 0, 53, |
| 0, 265, 0, 241, 0, 160, 155, 0, 0, 46, 22, 0, 106, 0, 147, 21, 0, 29, 0, |
| 0, 0, 0, 84, 23, 16, 142, 177, 0, 18, 0, 23, 60, 255, 142, 135, 59, 225, 53, |
| 35, 0, 0, 129, 142, 122, 0, 32, 0, 0, 75, 0, 0, 136, 291, 68, 0, 0, 0, |
| 19, 64, 208, 0, 238, 280, 176, 116, 80, 81, 108, 0, 201, 45, 0, 0, 57, 268, 3, |
| 277, 0, 39, 0, 31, 14, 0, 57, 181, 93, 277, 146, 0, 146, 153, 0, 0, 0, 158, |
| 282, 0, 0, 65, 238, 158, 0, 73, 276, 0, 0, 185, 136, 0, 0, 0, 179, 0, 38, |
| 0, 39, 0, 166, 88, 57, 0, 232, 0, 0, 57, 0, 80, 0, 0, 30, 0, 88, 0, |
| 0, 75, 0, 105, 0, 9, 182, 0, 55, 0, 192, 21, 0, 0, 153, 76, 269, 0, 0, |
| 125, 86, 0, 193, 279, 0, 0, 0, 128, 2, 0, 99, 0, 13, 64, 0, 28, 58, 67, |
| 0, 117, 159, 0, 0, 5, 29, 0, 56, 186, 54, 0, 254, 180, 84, 287, 0, 117, 0, |
| 204, 39, 5, 0, 0, 44, 151, 0, 0, 254, 0, 96, 136, 194, 152, 0, 166, 112, 87, |
| 0, 0, 0, 0, 137, 0, 62, 15, 0, 0, 41, 274, 90, 236, 110, 0, 0, 118, 246, |
| 273, 227, 0, 133, 0, 266, 0, 3, 0, 0, 95, 277, 89, 151, 156, 218, 282, 0, 0, |
| 0, 0, 29, 54, 0, 126, 57}; |
| |
| 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 %= 292; |
| } |
| return unmangledkG[sum]; |
| } |
| |
| int UnmangledPerfectHash(const char *key) |
| { |
| if (strlen(key) > 26) |
| return 0; |
| |
| return (UnmangledHashG(key, unmangledkT1) + UnmangledHashG(key, unmangledkT2)) % 292; |
| } |
| |
| } // 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 |