| // 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[] = {243, 1411, 674, 1682, 320, 3003, 2730, 1775, 2251, 2839, |
| 595, 1906, 1991, 2897, 28, 445, 1551, 407, 1678, 521, |
| 1582, 2176, 129, 680, 2437, 730, 1853, 2069, 185, 1985, |
| 1590, 1097, 2679, 2497, 2228, 2674, 2592, 2671, 2686, 166}; |
| constexpr int mangledkT2[] = {2703, 1866, 1948, 2198, 2747, 2641, 1286, 55, 1534, 94, |
| 337, 1013, 2156, 238, 2760, 1952, 2355, 2323, 1244, 2345, |
| 22, 2347, 888, 726, 1892, 782, 45, 2085, 1927, 3078, |
| 1859, 1384, 2519, 407, 696, 2356, 2752, 2952, 1833, 1987}; |
| 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, 0, 0, |
| 0, 0, 511, 0, 0, 0, 0, 2988, 0, 0, 433, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 1836, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, |
| 241, 0, 0, 0, 1063, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2309, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 1369, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 2056, 2788, 2630, 370, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 619, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2602, 0, 0, 0, 1257, 459, |
| 2666, 381, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 1339, 0, 20, 0, 0, 0, 0, 0, 0, 532, 903, 668, 0, 0, |
| 0, 0, 2528, 0, 0, 0, 0, 0, 0, 0, 278, 2885, 0, 2906, 0, 0, |
| 0, 0, 1420, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, 1975, 587, 0, |
| 0, 0, 0, 0, 0, 0, 859, 289, 0, 0, 2227, 0, 0, 0, 830, 0, |
| 0, 0, 0, 0, 690, 24, 1006, 0, 0, 1022, 0, 2531, 0, 0, 0, 0, |
| 0, 0, 0, 1021, 0, 0, 0, 0, 0, 3050, 0, 0, 0, 0, 0, 0, |
| 0, 0, 1311, 0, 2856, 0, 92, 0, 0, 0, 2759, 0, 0, 2071, 0, 1013, |
| 977, 0, 0, 0, 1019, 366, 0, 0, 270, 0, 2877, 0, 488, 0, 0, 2928, |
| 2907, 777, 0, 0, 0, 0, 0, 2951, 0, 358, 0, 0, 2665, 1329, 0, 0, |
| 0, 0, 0, 0, 0, 184, 2072, 0, 0, 0, 0, 0, 0, 0, 2953, 0, |
| 0, 0, 0, 0, 0, 0, 1293, 0, 0, 0, 443, 0, 0, 0, 0, 903, |
| 1420, 0, 0, 2843, 0, 1430, 0, 0, 2088, 0, 1148, 0, 1980, 2475, 0, 315, |
| 0, 0, 530, 0, 763, 0, 0, 0, 0, 761, 0, 0, 373, 0, 0, 0, |
| 0, 0, 0, 0, 0, 1429, 0, 398, 0, 0, 0, 0, 641, 159, 0, 0, |
| 0, 1108, 0, 0, 695, 0, 0, 2145, 0, 0, 2819, 391, 0, 0, 2000, 0, |
| 0, 788, 0, 2089, 0, 0, 0, 0, 2779, 0, 0, 187, 2562, 569, 271, 0, |
| 0, 2061, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1608, 0, 0, 0, |
| 0, 1368, 0, 0, 0, 2935, 0, 503, 0, 1189, 0, 0, 0, 1572, 216, 0, |
| 0, 0, 0, 0, 0, 525, 0, 0, 1084, 0, 590, 0, 0, 0, 964, 420, |
| 0, 0, 0, 0, 65, 0, 0, 937, 0, 0, 577, 145, 0, 0, 1285, 0, |
| 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, 909, 0, 0, 2512, |
| 0, 420, 0, 0, 0, 0, 0, 0, 2456, 0, 0, 0, 0, 759, 961, 0, |
| 1283, 0, 668, 1067, 1159, 0, 2518, 1277, 0, 560, 2666, 0, 2661, 0, 260, 0, |
| 0, 0, 644, 0, 2454, 0, 997, 0, 0, 2160, 0, 0, 0, 2112, 2538, 1754, |
| 0, 972, 0, 0, 0, 7, 682, 0, 1042, 0, 87, 0, 0, 0, 0, 0, |
| 0, 0, 807, 1887, 0, 0, 0, 3015, 951, 2916, 977, 0, 0, 0, 2920, 2291, |
| 0, 0, 0, 0, 0, 2740, 0, 0, 0, 0, 135, 0, 0, 0, 0, 105, |
| 442, 2308, 346, 0, 0, 1020, 0, 405, 608, 172, 0, 1454, 1013, 0, 2811, 1143, |
| 1365, 0, 0, 0, 0, 0, 0, 1095, 0, 0, 0, 0, 0, 0, 1035, 0, |
| 535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2678, 2044, 0, 0, 0, 1423, |
| 853, 0, 0, 117, 1429, 0, 0, 0, 0, 0, 0, 2590, 0, 0, 470, 0, |
| 613, 0, 2959, 1195, 0, 0, 1008, 299, 940, 0, 2522, 393, 2290, 0, 0, 0, |
| 0, 1153, 891, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 267, 2926, |
| 0, 455, 0, 0, 0, 0, 863, 0, 688, 0, 0, 0, 0, 47, 0, 629, |
| 967, 1080, 0, 0, 1368, 0, 1379, 122, 254, 0, 0, 1176, 0, 0, 0, 0, |
| 0, 638, 0, 858, 0, 0, 107, 651, 631, 0, 0, 0, 1299, 0, 3010, 2543, |
| 42, 0, 2661, 0, 0, 31, 1339, 740, 2948, 0, 2930, 246, 1140, 0, 1309, 651, |
| 0, 1175, 930, 0, 0, 206, 537, 0, 0, 3080, 1178, 937, 0, 0, 0, 0, |
| 278, 0, 0, 0, 0, 0, 2216, 0, 516, 0, 0, 0, 749, 2675, 0, 0, |
| 1146, 0, 1408, 1094, 57, 0, 0, 36, 0, 312, 794, 2981, 0, 0, 0, 0, |
| 154, 828, 0, 171, 0, 0, 0, 271, 0, 0, 0, 0, 0, 0, 1655, 0, |
| 0, 0, 0, 0, 0, 777, 0, 0, 0, 0, 500, 624, 0, 0, 0, 21, |
| 1204, 223, 1181, 0, 1286, 1961, 0, 0, 0, 0, 844, 0, 2793, 2572, 1731, 1644, |
| 0, 0, 0, 647, 0, 0, 2899, 2168, 2784, 585, 0, 598, 0, 0, 0, 0, |
| 1072, 886, 0, 0, 0, 0, 1536, 0, 0, 0, 968, 0, 1655, 0, 732, 18, |
| 2967, 2413, 59, 0, 0, 0, 303, 0, 364, 215, 3082, 0, 727, 0, 2145, 1079, |
| 33, 994, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 908, 2387, 2405, 0, |
| 0, 1177, 431, 31, 0, 0, 243, 0, 0, 0, 0, 995, 0, 0, 0, 330, |
| 0, 538, 0, 0, 896, 0, 77, 0, 247, 402, 0, 225, 185, 0, 498, 316, |
| 0, 0, 529, 117, 580, 0, 0, 0, 0, 229, 0, 0, 1001, 0, 567, 0, |
| 0, 0, 0, 0, 0, 0, 2970, 934, 2921, 0, 1284, 0, 472, 1340, 2554, 0, |
| 0, 3074, 481, 0, 2311, 0, 0, 206, 2688, 2753, 2281, 812, 1379, 0, 0, 0, |
| 0, 2820, 0, 0, 0, 714, 0, 0, 300, 2591, 942, 0, 0, 0, 0, 0, |
| 0, 0, 47, 2289, 0, 2737, 485, 0, 3030, 0, 146, 0, 0, 1240, 0, 0, |
| 0, 0, 0, 2925, 0, 0, 0, 0, 0, 2233, 628, 0, 1115, 321, 0, 0, |
| 1746, 0, 1029, 2622, 0, 0, 0, 2256, 2545, 101, 0, 0, 362, 0, 654, 0, |
| 0, 1299, 0, 0, 0, 566, 0, 476, 0, 2532, 270, 466, 0, 0, 1103, 0, |
| 0, 2303, 0, 118, 69, 0, 2364, 0, 434, 0, 0, 2856, 0, 523, 264, 2387, |
| 2184, 2114, 0, 477, 0, 0, 0, 0, 686, 653, 392, 0, 0, 0, 717, 0, |
| 0, 1286, 1377, 0, 501, 2893, 0, 0, 0, 0, 1345, 0, 2126, 1277, 1228, 558, |
| 1319, 1310, 0, 675, 0, 0, 2046, 0, 0, 158, 582, 194, 0, 0, 2736, 1136, |
| 365, 2864, 0, 2931, 0, 0, 550, 247, 2133, 123, 0, 617, 0, 0, 859, 0, |
| 0, 0, 0, 1234, 0, 1358, 81, 2202, 871, 672, 0, 0, 836, 99, 1120, 0, |
| 205, 802, 139, 2317, 0, 0, 0, 0, 0, 337, 554, 1287, 0, 0, 0, 1431, |
| 0, 0, 0, 0, 0, 259, 0, 382, 0, 0, 2928, 3075, 568, 592, 0, 0, |
| 0, 309, 2212, 41, 2538, 0, 0, 0, 0, 67, 1510, 0, 0, 0, 371, 839, |
| 93, 2817, 0, 0, 0, 0, 1853, 0, 110, 0, 2912, 0, 0, 0, 589, 3039, |
| 0, 383, 1128, 849, 0, 0, 0, 1331, 2873, 1397, 0, 1450, 0, 0, 0, 0, |
| 10, 1316, 614, 0, 3092, 2300, 0, 0, 0, 0, 1028, 1021, 0, 0, 939, 2202, |
| 0, 1381, 2818, 2366, 2728, 0, 710, 1271, 0, 426, 0, 0, 1152, 0, 0, 0, |
| 0, 646, 0, 706, 865, 429, 1202, 0, 0, 0, 1383, 1586, 0, 474, 2135, 555, |
| 0, 2245, 991, 1124, 2777, 0, 280, 0, 1294, 0, 2979, 0, 0, 3082, 1604, 96, |
| 2939, 261, 1389, 0, 0, 0, 1239, 0, 0, 0, 0, 0, 0, 2130, 33, 0, |
| 338, 0, 1972, 320, 375, 88, 0, 498, 0, 872, 0, 0, 0, 2447, 0, 0, |
| 0, 0, 0, 928, 1032, 0, 0, 2787, 0, 815, 1012, 0, 0, 0, 0, 0, |
| 0, 97, 594, 0, 0, 0, 0, 0, 0, 573, 499, 462, 142, 511, 0, 0, |
| 0, 394, 855, 0, 0, 683, 0, 2814, 482, 1224, 2544, 0, 0, 735, 0, 0, |
| 623, 2316, 76, 2831, 0, 198, 1336, 0, 0, 0, 0, 0, 0, 2181, 0, 2366, |
| 0, 0, 674, 0, 0, 0, 0, 0, 656, 49, 0, 2150, 2685, 0, 363, 895, |
| 0, 0, 0, 182, 0, 0, 2974, 0, 2879, 533, 0, 0, 0, 0, 0, 0, |
| 722, 1158, 0, 0, 859, 0, 1274, 0, 0, 0, 0, 911, 1390, 1418, 2947, 0, |
| 2981, 0, 2163, 250, 3078, 0, 0, 0, 2952, 0, 0, 425, 2786, 0, 0, 0, |
| 0, 0, 0, 0, 880, 828, 741, 728, 2530, 112, 350, 1324, 0, 1134, 2894, 0, |
| 2945, 1497, 326, 0, 747, 147, 2952, 502, 0, 0, 0, 2721, 2322, 454, 0, 119, |
| 0, 0, 982, 1355, 0, 100, 0, 3028, 699, 0, 0, 0, 478, 1122, 0, 1191, |
| 0, 272, 0, 2442, 0, 0, 0, 0, 0, 432, 0, 0, 0, 1410, 0, 0, |
| 94, 0, 2611, 0, 2008, 1405, 0, 0, 2677, 0, 1243, 0, 0, 0, 0, 530, |
| 0, 2594, 787, 0, 2086, 1379, 0, 0, 0, 0, 0, 258, 1056, 739, 0, 799, |
| 411, 0, 0, 0, 0, 2188, 959, 48, 219, 976, 360, 1880, 0, 0, 0, 537, |
| 0, 40, 823, 2048, 0, 814, 701, 0, 0, 0, 1544, 1726, 0, 0, 2103, 2533, |
| 0, 2955, 2913, 435, 0, 1148, 1002, 2156, 0, 0, 0, 0, 11, 0, 457, 1207, |
| 0, 2177, 632, 0, 0, 45, 0, 1494, 0, 1815, 0, 0, 0, 0, 0, 492, |
| 0, 0, 1102, 2880, 0, 572, 77, 0, 0, 498, 0, 0, 0, 0, 379, 556, |
| 0, 0, 2392, 0, 0, 527, 0, 1905, 2202, 437, 2390, 2877, 0, 1312, 0, 292, |
| 363, 0, 634, 0, 2304, 0, 739, 0, 570, 0, 0, 2647, 912, 658, 0, 0, |
| 0, 0, 662, 935, 0, 5, 0, 1237, 0, 2222, 2986, 720, 0, 631, 0, 160, |
| 0, 74, 0, 817, 0, 600, 0, 0, 0, 1089, 12, 0, 1210, 2498, 0, 997, |
| 803, 0, 623, 0, 0, 2979, 716, 1060, 636, 2987, 0, 0, 0, 2733, 0, 3012, |
| 0, 0, 0, 41, 301, 0, 0, 246, 0, 0, 0, 2080, 313, 0, 0, 2937, |
| 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 822, 1505, 0, 1202, 0, 0, |
| 207, 1006, 0, 0, 0, 0, 1924, 0, 0, 662, 216, 0, 0, 0, 733, 0, |
| 0, 0, 0, 0, 419, 2223, 2755, 2554, 0, 692, 111, 65, 0, 0, 158, 2222, |
| 0, 0, 80, 1993, 0, 0, 640, 49, 2737, 192, 212, 1020, 0, 0, 0, 0, |
| 0, 0, 2400, 0, 1163, 0, 1236, 0, 1213, 0, 0, 0, 0, 63, 631, 0, |
| 0, 0, 0, 29, 1343, 2964, 1223, 709, 0, 0, 0, 396, 0, 0, 0, 2265, |
| 1151, 209, 0, 457, 746, 0, 999, 0, 250, 0, 0, 0, 0, 0, 210, 677, |
| 1781, 1542, 0, 0, 0, 758, 0, 0, 1166, 516, 0, 0, 0, 0, 284, 404, |
| 0, 371, 1486, 423, 2670, 0, 1494, 210, 2733, 0, 0, 2699, 0, 2766, 0, 77, |
| 526, 0, 0, 0, 0, 1038, 226, 2894, 1057, 1434, 0, 810, 0, 310, 462, 0, |
| 851, 0, 420, 1725, 894, 0, 0, 0, 0, 0, 0, 595, 267, 201, 0, 2398, |
| 858, 1181, 1624, 2881, 279, 3016, 281, 221, 0, 0, 302, 0, 0, 133, 97, 676, |
| 899, 0, 0, 1385, 0, 342, 233, 0, 0, 1240, 2865, 0, 0, 0, 0, 2349, |
| 0, 0, 269, 987, 1235, 2305, 0, 708, 1104, 0, 0, 2910, 0, 881, 108, 0, |
| 0, 1409, 776, 0, 1009, 0, 0, 0, 685, 1412, 0, 2399, 0, 682, 0, 0, |
| 749, 886, 0, 0, 820, 1466, 45, 0, 302, 474, 0, 0, 1438, 815, 348, 0, |
| 0, 0, 0, 0, 0, 1256, 1222, 887, 828, 274, 0, 612, 20, 0, 246, 2245, |
| 0, 0, 0, 1040, 2376, 1344, 0, 2643, 0, 0, 1189, 3097, 1394, 888, 1206, 1996, |
| 0, 313, 0, 0, 1405, 0, 0, 2643, 0, 832, 1315, 0, 154, 0, 2384, 1, |
| 941, 432, 83, 2988, 0, 0, 2448, 1181, 2407, 0, 3085, 0, 512, 190, 380, 817, |
| 0, 130, 35, 235, 0, 0, 0, 1313, 1414, 0, 58, 923, 0, 217, 1338, 391, |
| 0, 2173, 0, 915, 0, 0, 471, 0, 998, 0, 373, 38, 941, 386, 0, 2007, |
| 0, 741, 0, 0, 0, 0, 612, 891, 2959, 0, 2450, 0, 1169, 3019, 0, 69, |
| 0, 2864, 0, 2477, 6, 2987, 453, 580, 62, 891, 0, 417, 2669, 0, 519, 741, |
| 0, 1665, 2998, 0, 519, 0, 0, 16, 2454, 245, 0, 1558, 0, 0, 464, 0, |
| 1214, 0, 0, 123, 2219, 344, 0, 0, 30, 0, 151, 0, 0, 1201, 0, 1471, |
| 2747, 0, 481, 0, 34, 981, 2456, 2297, 1524, 0, 983, 942, 191, 0, 1193, 0, |
| 2238, 0, 1042, 0, 0, 215, 0, 0, 326, 0, 1776, 0, 1695, 37, 177, 0, |
| 2749, 0, 1338, 951, 141, 0, 1423, 890, 1107, 1025, 115, 350, 252, 0, 611, 382, |
| 834, 2829, 0, 0, 821, 1398, 0, 0, 2797, 0, 0, 1149, 2556, 0, 1337, 247, |
| 2303, 2554, 2139, 312, 522, 1218, 226, 1542, 0, 2971, 0, 0, 447, 0, 0, 2845, |
| 156, 0, 0, 0, 1955, 0, 81, 792, 0, 0, 0, 3038, 0, 591, 797, 0, |
| 827, 1133, 0, 111, 0, 531, 33, 293, 0, 0, 528, 0, 0, 0, 0, 175, |
| 389, 0, 0, 523, 0, 0, 0, 489, 0, 690, 0, 0, 315, 1307, 0, 2675, |
| 0, 2467, 126, 0, 0, 0, 0, 195, 2795, 206, 1131, 1026, 382, 1132, 947, 381, |
| 0, 0, 0, 0, 0, 2964, 0, 0, 940, 0, 2968, 1484, 0, 991, 984, 0, |
| 0, 0, 0, 162, 1276, 2750, 0, 659, 0, 1196, 0, 0, 1281, 2158, 356, 508, |
| 0, 0, 0, 0, 227, 0, 0, 1142, 80, 2020, 2349, 0, 0, 434, 0, 0, |
| 380, 0, 0, 490, 0, 1261, 925, 1119, 784, 409, 0, 179, 3032, 0, 0, 604, |
| 2809, 1233, 996, 0, 368, 448, 0, 897, 774, 664, 2435, 2545, 797, 0, 1513, 0, |
| 0, 326, 0, 0, 0, 0, 0, 2125, 486, 277, 2868, 134, 385, 768, 2992, 772, |
| 0, 0, 855, 2326, 2901, 0, 0, 0, 0, 2791, 0, 1908, 54, 0, 0, 0, |
| 0, 0, 0, 998, 2668, 658, 604, 0, 298, 97, 640, 820, 713, 314, 750, 1627, |
| 1408, 0, 0, 0, 1832, 2164, 461, 0, 1283, 1049, 0, 1737, 85, 602, 188, 0, |
| 2990, 2155, 2339, 113, 0, 150, 2510, 0, 0, 0, 2954, 1535, 0, 0, 1267, 613, |
| 0, 290, 573, 860, 2587, 3047, 0, 0, 757, 0, 2204, 0, 0, 328, 240, 524, |
| 0, 3030, 844, 1073, 333, 388, 0, 505, 0, 0, 303, 2477, 0, 0, 0, 594, |
| 0, 2895, 2307, 121, 0, 0, 0, 0, 2576, 349, 1819, 541, 765, 0, 777, 2619, |
| 814, 613, 2439, 0, 2341, 503, 334, 0, 0, 0, 2687, 576, 3093, 435, 0, 0, |
| 0, 558, 0, 521, 641, 0, 542, 2761, 2536, 0, 0, 708, 0, 0, 1741, 1209, |
| 0, 0, 0, 33, 801, 302, 0, 579, 0, 0, 1326, 0, 0, 0, 0, 0, |
| 1144, 925, 0, 0, 1180, 0, 2331, 2264, 0, 746, 0, 0, 0, 0, 1177, 618, |
| 0, 2485, 2190, 0, 2999, 0, 1272, 0, 986, 0, 607, 696, 1290, 0, 962, 1631, |
| 214, 2804, 496, 0, 0, 0, 750, 2741, 0, 1036, 0, 56, 0, 1262, 0, 1395, |
| 752, 1241, 1759, 838, 0, 0, 0, 1522, 837, 194, 0, 671, 652, 1798, 999, 0, |
| 571, 0, 73, 0, 697, 599, 1211, 811, 129, 1041, 0, 2502, 71, 0, 885, 0, |
| 2966, 0, 0, 1125, 333, 0, 668, 551, 0, 0, 33, 2076, 0, 874, 0, 0, |
| 0, 2832, 2023, 0, 0, 2575, 0, 550, 0, 2700, 403, 0, 798, 0, 1298, 0, |
| 1191, 0, 268, 553, 154, 0, 3032, 684, 0, 2407, 2821, 59, 0, 1065, 395, 0, |
| 1237, 0, 1313, 0, 255, 1454, 1238, 3034, 712, 823, 200, 0, 1027, 0, 0, 0, |
| 0, 1321, 0, 0, 875, 0, 0, 0, 390, 367, 2930, 408, 0, 0, 60, 1350, |
| 1133, 3012, 0, 0, 430, 0, 0, 2580, 1707, 2484, 131, 0, 1254, 0, 2883, 79, |
| 387, 1352, 0, 136, 884, 262, 0, 157, 2136, 2585, 0, 262, 99, 0, 0, 299, |
| 2592, 0, 0, 1101, 0, 0, 804, 542, 115, 0, 885, 3054, 0, 922, 0, 0, |
| 23, 0, 0, 0, 734, 1098, 1011, 577, 0, 0, 1361, 0, 0, 0, 0, 983, |
| 347, 910, 1003, 2912, 0, 1225, 557, 1376, 908, 0, 833, 0, 2106, 0, 517, 0, |
| 525, 716, 0, 580, 1024, 21, 1245, 0, 187, 317, 1589, 766, 0, 0, 10, 0, |
| 0, 747, 872, 116, 0, 0, 0, 1108, 0, 1027, 1020, 1014, 2922, 0, 0, 1487, |
| 115, 1447, 0, 0, 493, 0, 807, 582, 1082, 0, 0, 0, 407, 1874, 0, 1150, |
| 346, 1115, 0, 0, 432, 263, 0, 936, 0, 1832, 0, 0, 1886, 1263, 0, 0, |
| 0, 0, 2456, 922, 1387, 2827, 0, 2197, 0, 0, 0, 1294, 0, 0, 0, 2186, |
| 716, 42, 0, 0, 729, 323, 329, 2679, 0, 0, 1692, 2656, 0, 0, 454, 0, |
| 2182, 1074, 1362, 1255, 275, 273, 0, 0, 2313, 0, 0, 0, 0, 0, 0, 629, |
| 1402, 0, 0, 325, 1220, 0, 0, 0, 1404, 1415, 0, 0, 451, 320, 0, 77, |
| 0, 681, 0, 0, 0, 0, 3082, 0, 1890, 1062, 1104, 659, 103, 52, 957, 2324, |
| 0, 0, 358, 0, 0, 0, 251, 0, 130, 0, 0, 439, 0, 423, 0, 1737, |
| 0, 0, 0, 0, 688, 700, 728, 266, 1086, 473, 3059, 2562, 0, 0, 1359, 1159, |
| 230, 0, 0, 1008, 0, 663, 1242, 2653, 726, 0, 1610, 280, 0, 0, 1368, 995, |
| 376, 0, 770, 0, 983, 1155, 1301, 584, 786, 222, 0, 213, 0, 788, 0, 0, |
| 0, 2565, 835, 923, 944, 0, 0, 643, 1126, 0, 43, 0, 0, 603, 221, 0, |
| 0, 0, 880, 1972, 1161, 0, 0, 1200, 894, 0, 428, 1325, 1018, 0, 102, 385, |
| 2597, 1004, 637, 22, 1103, 1210, 0, 0, 1837, 1144, 2700, 1715, 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 %= 3101; |
| } |
| return mangledkG[sum]; |
| } |
| |
| int MangledPerfectHash(const char *key) |
| { |
| if (strlen(key) > 40) |
| return 0; |
| |
| return (MangledHashG(key, mangledkT1) + MangledHashG(key, mangledkT2)) % 3101; |
| } |
| |
| constexpr int unmangledkT1[] = {28, 128, 1, 151, 144, 127, 90, 229, 212, 59, 3, |
| 94, 198, 281, 244, 119, 155, 315, 28, 217, 287, 281, |
| 241, 203, 130, 281, 49, 242, 34, 65, 171, 187}; |
| constexpr int unmangledkT2[] = {152, 112, 286, 48, 97, 327, 119, 261, 66, 87, 49, |
| 280, 100, 225, 100, 33, 68, 140, 149, 269, 138, 316, |
| 172, 193, 38, 302, 35, 211, 141, 204, 92, 157}; |
| constexpr int unmangledkG[] = { |
| 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 59, 133, 0, 0, 34, 0, 0, 0, 0, |
| 94, 0, 0, 0, 237, 42, 0, 0, 0, 0, 307, 24, 0, 17, 17, 0, 238, 111, 0, |
| 0, 0, 116, 0, 150, 63, 0, 0, 0, 0, 0, 323, 81, 86, 297, 0, 0, 0, 0, |
| 0, 5, 37, 220, 0, 0, 73, 0, 0, 328, 40, 285, 301, 51, 39, 324, 175, 0, 173, |
| 116, 0, 88, 0, 23, 272, 0, 0, 109, 0, 30, 0, 0, 33, 59, 0, 108, 0, 20, |
| 273, 0, 0, 197, 0, 62, 0, 0, 0, 295, 0, 0, 117, 95, 0, 0, 254, 0, 295, |
| 0, 155, 137, 0, 107, 0, 50, 0, 0, 266, 0, 143, 0, 0, 272, 0, 154, 286, 122, |
| 129, 210, 179, 0, 63, 0, 0, 0, 20, 19, 0, 173, 0, 0, 55, 29, 115, 253, 0, |
| 0, 0, 228, 316, 0, 129, 0, 255, 0, 0, 53, 0, 26, 159, 103, 133, 46, 151, 0, |
| 79, 0, 0, 97, 0, 105, 1, 266, 0, 0, 0, 0, 0, 0, 72, 31, 0, 0, 0, |
| 67, 0, 15, 162, 115, 45, 109, 0, 166, 67, 64, 326, 11, 79, 0, 0, 0, 55, 64, |
| 0, 28, 0, 52, 0, 62, 0, 113, 4, 40, 0, 2, 156, 0, 0, 0, 164, 0, 123, |
| 19, 252, 198, 196, 0, 0, 305, 290, 80, 142, 56, 0, 0, 0, 87, 99, 0, 63, 42, |
| 0, 0, 32, 0, 73, 14, 0, 0, 128, 68, 0, 0, 13, 165, 0, 37, 177, 0, 0, |
| 259, 233, 320, 272, 0, 0, 114, 80, 157, 53, 0, 85, 0, 177, 0, 0, 60, 54, 0, |
| 117, 0, 0, 0, 318, 0, 0, 3, 65, 109, 96, 0, 0, 252, 85, 44, 0, 82, 0, |
| 112, 84, 30, 56, 96, 0, 91, 47, 120, 67, 0, 226, 0, 201, 23, 157, 57, 109, 0, |
| 67, 47, 89, 34, 0, 77, 232, 124}; |
| |
| 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 %= 331; |
| } |
| return unmangledkG[sum]; |
| } |
| |
| int UnmangledPerfectHash(const char *key) |
| { |
| if (strlen(key) > 32) |
| return 0; |
| |
| return (UnmangledHashG(key, unmangledkT1) + UnmangledHashG(key, unmangledkT2)) % 331; |
| } |
| |
| } // 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 |