Edit

kc3-lang/angle/src/compiler/translator/ImmutableString_ESSL_autogen.cpp

Branch :

  • Show log

    Commit

  • Author : Mohan Maiya
    Date : 2020-12-14 14:11:11
    Hash : 8f9e17d5
    Message : Add EXT_clip_cull_distance extension autogen code Addition of shader autogen code for EXT_clip_cull_distance extension. Bug: angleproject:5458 Change-Id: I299528957c0e747fd84987c420588c314f54aae0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2590989 Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>

  • src/compiler/translator/ImmutableString_ESSL_autogen.cpp
  • // 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[] = {2557, 605,  1321, 1130, 1727, 1231, 727,  3007, 2250, 1369,
                                  2871, 3084, 1811, 947,  2085, 1454, 3131, 2883, 84,   18,
                                  561,  876,  2928, 943,  54,   2284, 960,  564,  1719, 2358,
                                  1936, 1978, 3204, 2124, 1802, 1893, 2707, 1513, 2168, 3020};
    constexpr int mangledkT2[] = {1014, 1853, 669,  390,  134,  630,  455,  3086, 1813, 416,
                                  3183, 2138, 1849, 2399, 2480, 1011, 2961, 450,  1843, 849,
                                  3206, 926,  2036, 1054, 1279, 2755, 1495, 1734, 5,    2194,
                                  2564, 2803, 442,  690,  3152, 2940, 1566, 1018, 2656, 351};
    constexpr int mangledkG[]  = {
        0,    0,    0,    0,    199,  0,    1821, 0,    0,    2017, 0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    2177, 0,    0,
        0,    0,    0,    0,    0,    1014, 0,    0,    2898, 0,    0,    0,    0,    0,    415,  0,
        1473, 0,    0,    2295, 0,    813,  0,    0,    0,    0,    1195, 0,    0,    966,  0,    0,
        0,    0,    0,    0,    0,    0,    843,  2206, 0,    1184, 0,    0,    0,    2525, 0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    2985, 934,  986,  0,    0,    1663, 0,    0,    0,    1019, 0,    3131, 627,  2572,
        0,    0,    0,    2742, 0,    691,  963,  0,    0,    0,    0,    0,    0,    601,  0,    0,
        719,  0,    0,    0,    0,    0,    0,    1706, 1266, 0,    0,    0,    0,    0,    1999, 0,
        0,    0,    311,  0,    0,    0,    9,    0,    3007, 0,    0,    0,    505,  2277, 0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    472,  0,    0,    0,    0,
        0,    0,    0,    631,  1012, 0,    0,    0,    1955, 130,  0,    0,    0,    1491, 0,    0,
        895,  0,    3033, 0,    0,    0,    0,    0,    0,    0,    3058, 0,    102,  1873, 0,    0,
        0,    0,    0,    1101, 0,    0,    399,  0,    839,  0,    1605, 0,    0,    2694, 113,  535,
        0,    0,    0,    975,  0,    0,    1637, 0,    0,    3076, 3071, 0,    1596, 1138, 0,    0,
        0,    0,    0,    0,    0,    2645, 0,    577,  0,    2366, 0,    0,    1895, 2773, 0,    0,
        0,    220,  0,    0,    0,    0,    0,    0,    0,    0,    2703, 0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    382,  0,    75,   1820, 0,    1436, 0,    0,
        1618, 844,  0,    0,    3188, 661,  625,  0,    0,    0,    1659, 0,    3070, 0,    1874, 0,
        0,    0,    0,    0,    0,    314,  0,    0,    2108, 3112, 0,    0,    0,    0,    0,    0,
        1832, 0,    0,    1469, 0,    746,  529,  0,    0,    0,    0,    0,    0,    267,  0,    0,
        0,    0,    0,    0,    0,    732,  0,    0,    0,    0,    0,    0,    1812, 0,    0,    0,
        0,    1488, 1740, 2326, 0,    0,    0,    0,    0,    0,    539,  0,    0,    0,    0,    0,
        0,    0,    0,    0,    1031, 0,    2565, 2531, 0,    160,  0,    0,    253,  0,    0,    0,
        0,    0,    0,    0,    0,    0,    1372, 3200, 1836, 0,    0,    32,   275,  0,    0,    716,
        0,    0,    269,  0,    0,    1896, 0,    863,  0,    0,    822,  0,    2584, 0,    1664, 736,
        0,    2471, 1064, 2702, 0,    0,    0,    0,    0,    2884, 2254, 1378, 0,    1401, 0,    137,
        0,    0,    0,    0,    0,    0,    0,    0,    927,  0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    1726, 0,    0,    2161, 0,    0,    0,    412,  0,    1366, 1038, 0,
        651,  0,    1667, 408,  0,    0,    0,    0,    0,    0,    90,   0,    0,    772,  0,    0,
        703,  0,    2857, 1327, 0,    574,  628,  1199, 3028, 0,    0,    0,    1245, 0,    104,  0,
        0,    0,    0,    0,    0,    0,    376,  1075, 0,    0,    0,    177,  0,    2987, 3202, 1367,
        1575, 0,    0,    0,    0,    1115, 0,    0,    596,  0,    594,  0,    0,    2541, 0,    0,
        0,    0,    0,    772,  0,    1174, 0,    0,    0,    0,    0,    0,    0,    0,    1120, 0,
        0,    0,    0,    2314, 113,  2470, 1583, 3193, 0,    0,    999,  0,    0,    0,    0,    2936,
        3191, 0,    806,  0,    2271, 0,    264,  0,    0,    0,    779,  0,    0,    277,  685,  601,
        0,    1246, 463,  0,    0,    0,    0,    307,  927,  0,    0,    857,  0,    3175, 0,    0,
        3017, 0,    1680, 0,    348,  0,    0,    0,    0,    1911, 0,    646,  0,    0,    0,    0,
        1958, 688,  0,    0,    0,    0,    0,    0,    0,    0,    0,    277,  401,  0,    1026, 0,
        1598, 428,  0,    2736, 797,  0,    0,    0,    0,    0,    2979, 0,    0,    3034, 2308, 2611,
        388,  0,    563,  2768, 1116, 0,    314,  0,    0,    502,  0,    0,    0,    0,    278,  1983,
        0,    2922, 0,    0,    2985, 1177, 1751, 0,    0,    2555, 164,  1853, 2484, 0,    0,    0,
        0,    92,   0,    0,    1188, 977,  859,  3044, 0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    506,  1464, 526,  617,  0,    0,    3162, 0,    2282, 0,    465,  1923, 1774,
        0,    0,    0,    0,    0,    0,    1453, 0,    1496, 1932, 1834, 0,    0,    0,    1976, 1755,
        0,    3179, 0,    375,  0,    342,  393,  1607, 129,  2309, 0,    0,    2369, 0,    1863, 1555,
        0,    377,  630,  0,    0,    0,    0,    0,    0,    45,   0,    0,    1506, 2540, 2721, 0,
        1347, 842,  0,    76,   2475, 2896, 3192, 0,    1423, 1549, 0,    0,    0,    2718, 1503, 302,
        0,    0,    1147, 416,  0,    1428, 0,    414,  2968, 0,    0,    0,    0,    0,    0,    200,
        0,    0,    0,    550,  2334, 0,    1183, 1545, 1456, 0,    0,    673,  0,    0,    0,    0,
        0,    0,    889,  0,    0,    1001, 254,  0,    0,    0,    0,    0,    3139, 3040, 1271, 1979,
        0,    0,    0,    0,    840,  1494, 0,    0,    0,    0,    2543, 0,    1087, 0,    0,    0,
        3207, 0,    0,    0,    0,    890,  727,  2929, 1600, 434,  0,    0,    0,    644,  0,    1277,
        0,    0,    0,    0,    0,    0,    0,    1765, 1544, 0,    0,    0,    0,    1583, 0,    0,
        0,    0,    2597, 0,    1644, 0,    0,    2455, 391,  0,    328,  0,    1556, 1230, 786,  366,
        0,    2806, 0,    1148, 0,    0,    618,  0,    10,   2687, 1604, 0,    0,    429,  0,    625,
        0,    0,    944,  0,    0,    0,    630,  2974, 721,  0,    0,    0,    787,  158,  0,    0,
        0,    2939, 0,    0,    1021, 472,  0,    0,    2735, 0,    2572, 1670, 67,   2969, 144,  1713,
        0,    652,  1974, 0,    40,   217,  1106, 0,    0,    832,  874,  2137, 2818, 0,    0,    0,
        0,    1114, 0,    1951, 0,    724,  0,    2484, 560,  0,    2951, 448,  0,    1072, 0,    0,
        1466, 0,    0,    0,    766,  2167, 0,    0,    0,    2790, 1051, 310,  0,    2243, 1288, 1291,
        707,  3175, 0,    600,  0,    0,    0,    0,    0,    0,    779,  160,  2398, 0,    1413, 0,
        0,    0,    0,    0,    0,    60,   0,    519,  0,    0,    0,    0,    0,    1255, 0,    0,
        0,    673,  0,    0,    3006, 1294, 2677, 0,    0,    0,    205,  0,    548,  0,    0,    355,
        2366, 0,    0,    2213, 50,   151,  0,    506,  1341, 2296, 2783, 0,    522,  0,    2712, 0,
        2201, 2152, 908,  1529, 987,  0,    0,    0,    0,    0,    1373, 0,    0,    384,  2648, 0,
        0,    1430, 0,    0,    2830, 0,    471,  171,  0,    2434, 0,    677,  0,    2998, 0,    1530,
        2854, 1423, 1857, 1907, 0,    0,    0,    1568, 0,    0,    0,    0,    0,    179,  293,  0,
        633,  1307, 2711, 1555, 1950, 0,    1335, 2261, 438,  0,    1708, 491,  433,  0,    1224, 0,
        1882, 7,    14,   13,   0,    2000, 0,    943,  0,    0,    1606, 901,  0,    0,    2753, 0,
        1536, 0,    19,   645,  0,    0,    0,    174,  0,    0,    0,    0,    0,    2134, 0,    3,
        1278, 0,    3108, 827,  797,  806,  0,    1400, 824,  53,   0,    584,  0,    249,  0,    1443,
        1809, 1699, 0,    0,    1769, 2925, 1754, 0,    1467, 2817, 0,    880,  52,   1361, 611,  1417,
        0,    0,    0,    0,    0,    0,    562,  0,    1503, 0,    0,    0,    2337, 0,    1528, 1481,
        1335, 0,    0,    1150, 1043, 0,    0,    2038, 1531, 0,    0,    0,    660,  1735, 902,  2386,
        0,    0,    3204, 0,    0,    0,    1235, 0,    1060, 722,  197,  0,    0,    871,  3077, 0,
        0,    676,  2647, 0,    1237, 0,    0,    0,    2958, 265,  2956, 1603, 0,    0,    0,    0,
        0,    0,    135,  1028, 0,    0,    2518, 3152, 2880, 0,    1423, 2834, 2500, 3034, 0,    0,
        0,    1718, 0,    110,  116,  243,  0,    393,  0,    0,    1327, 0,    131,  383,  0,    156,
        67,   1846, 374,  1924, 0,    0,    2803, 1831, 0,    0,    0,    2482, 0,    588,  123,  0,
        388,  1524, 0,    0,    0,    938,  1413, 2473, 0,    0,    1796, 878,  1292, 2676, 1043, 0,
        0,    170,  2579, 0,    518,  0,    2572, 0,    923,  0,    0,    0,    0,    2087, 0,    217,
        421,  0,    1867, 0,    0,    3124, 1397, 668,  1100, 2221, 1187, 0,    0,    0,    372,  2749,
        955,  0,    1523, 0,    2834, 3033, 1616, 1532, 1020, 24,   0,    27,   0,    0,    2535, 69,
        0,    2494, 0,    0,    210,  0,    0,    2898, 0,    0,    0,    0,    0,    2613, 55,   1800,
        1437, 0,    0,    320,  276,  0,    0,    2034, 444,  0,    1028, 244,  962,  0,    818,  0,
        816,  0,    2227, 0,    0,    833,  1343, 0,    0,    0,    0,    2297, 2946, 0,    0,    0,
        0,    537,  0,    978,  0,    0,    0,    1330, 188,  953,  0,    119,  827,  387,  0,    0,
        1043, 0,    3060, 759,  906,  0,    0,    0,    0,    675,  0,    2288, 2515, 3078, 0,    0,
        605,  0,    811,  1389, 1809, 2682, 0,    0,    228,  0,    0,    0,    0,    0,    1088, 722,
        1952, 2904, 0,    1699, 0,    200,  0,    96,   13,   2644, 0,    0,    0,    3091, 0,    756,
        0,    0,    957,  322,  3105, 0,    0,    0,    3000, 0,    2,    0,    803,  224,  0,    0,
        27,   0,    0,    0,    0,    0,    709,  0,    0,    318,  2742, 2477, 0,    0,    1312, 18,
        0,    3180, 0,    0,    3096, 0,    0,    1073, 0,    785,  0,    1523, 0,    0,    1061, 3182,
        730,  0,    0,    0,    339,  0,    0,    2318, 865,  0,    2875, 2469, 992,  757,  2630, 1846,
        0,    611,  0,    0,    0,    0,    3034, 1404, 3165, 2894, 0,    0,    0,    0,    0,    409,
        19,   0,    464,  1177, 0,    0,    0,    0,    2027, 0,    2814, 2260, 1203, 447,  0,    0,
        2143, 226,  403,  0,    565,  854,  0,    333,  2783, 510,  0,    600,  0,    522,  1065, 385,
        1578, 0,    0,    0,    2814, 0,    0,    550,  0,    1450, 1254, 1218, 1402, 0,    1219, 0,
        0,    550,  2826, 0,    1614, 500,  1427, 0,    976,  0,    0,    0,    0,    0,    1201, 0,
        584,  2189, 1174, 290,  903,  0,    0,    172,  926,  0,    0,    0,    0,    1454, 364,  1353,
        397,  1667, 0,    1151, 839,  0,    675,  1743, 0,    1344, 0,    0,    387,  405,  303,  320,
        0,    0,    0,    354,  0,    1317, 0,    1246, 0,    124,  1015, 557,  286,  460,  915,  0,
        3055, 0,    520,  0,    2296, 2276, 0,    0,    3055, 0,    871,  760,  2909, 0,    443,  0,
        304,  0,    2433, 523,  0,    823,  654,  2695, 0,    409,  1602, 0,    699,  3114, 0,    0,
        2984, 1050, 1585, 0,    0,    1576, 0,    2016, 0,    0,    19,   290,  0,    2980, 1020, 1221,
        738,  0,    2782, 0,    0,    1457, 0,    2734, 1300, 708,  1403, 0,    0,    0,    264,  1498,
        213,  0,    0,    2687, 0,    840,  1119, 1149, 0,    0,    0,    495,  554,  176,  0,    0,
        3064, 155,  327,  0,    0,    0,    1858, 2597, 0,    1175, 429,  0,    1942, 661,  573,  757,
        383,  285,  533,  0,    422,  0,    2567, 0,    0,    2635, 2837, 1099, 0,    0,    0,    831,
        0,    1263, 892,  1171, 1953, 0,    1156, 0,    0,    878,  0,    0,    0,    0,    1282, 0,
        0,    0,    145,  0,    1922, 0,    879,  112,  0,    429,  0,    2857, 0,    0,    1469, 2827,
        0,    1356, 378,  0,    394,  0,    1202, 755,  0,    1319, 2856, 1104, 0,    263,  0,    0,
        1032, 0,    0,    0,    2903, 0,    409,  570,  0,    1565, 2081, 2308, 0,    1070, 0,    0,
        144,  494,  2750, 150,  0,    0,    1044, 745,  946,  0,    656,  0,    2631, 0,    0,    2623,
        224,  0,    0,    0,    2409, 0,    0,    520,  0,    0,    0,    743,  911,  281,  0,    0,
        2497, 1066, 2430, 0,    1356, 0,    0,    1018, 0,    3161, 0,    0,    0,    321,  1554, 0,
        635,  161,  2593, 0,    0,    0,    0,    0,    0,    0,    0,    488,  1056, 1475, 0,    729,
        2118, 0,    2627, 1008, 2499, 0,    319,  681,  3184, 15,   215,  0,    1118, 2971, 655,  0,
        295,  0,    0,    341,  2377, 647,  0,    0,    531,  571,  2024, 2976, 0,    268,  2240, 667,
        0,    2163, 485,  0,    407,  1446, 0,    2563, 0,    678,  490,  0,    3087, 783,  0,    0,
        1444, 795,  0,    0,    630,  1185, 921,  1145, 0,    17,   0,    1778, 236,  674,  0,    340,
        1471, 0,    202,  3107, 0,    0,    964,  0,    6,    967,  2575, 0,    174,  0,    98,   0,
        851,  3058, 0,    0,    0,    0,    0,    0,    1080, 0,    0,    0,    0,    1126, 614,  0,
        0,    1062, 1140, 0,    0,    740,  0,    0,    1074, 0,    3087, 2871, 0,    3052, 40,   2835,
        979,  754,  0,    0,    0,    0,    2563, 1152, 0,    1748, 0,    1407, 0,    296,  903,  1204,
        195,  0,    2718, 0,    0,    0,    2223, 1621, 2631, 1231, 0,    823,  0,    0,    1252, 72,
        3159, 549,  132,  0,    916,  2786, 1056, 831,  0,    3105, 0,    0,    2367, 517,  0,    0,
        1210, 0,    633,  443,  0,    0,    1455, 477,  0,    2961, 1399, 2033, 2275, 0,    606,  1198,
        0,    3126, 484,  0,    0,    2831, 2157, 803,  0,    1200, 1131, 2217, 1136, 0,    223,  1927,
        946,  0,    0,    1310, 198,  0,    0,    952,  3184, 0,    216,  1157, 0,    461,  1267, 2061,
        3131, 847,  1546, 148,  574,  0,    0,    0,    82,   880,  1495, 1090, 0,    0,    0,    2423,
        3182, 0,    34,   2212, 2439, 2304, 0,    2504, 0,    0,    39,   766,  0,    3200, 157,  241,
        0,    0,    0,    1763, 0,    1148, 1564, 0,    0,    0,    0,    142,  1164, 3076, 722,  0,
        1899, 0,    1103, 0,    1099, 0,    406,  0,    0,    3084, 0,    0,    30,   352,  0,    391,
        556,  373,  0,    644,  0,    1557, 0,    31,   2704, 418,  0,    0,    0,    0,    1101, 472,
        3099, 972,  327,  0,    2921, 338,  1985, 378,  0,    2580, 0,    0,    0,    2416, 0,    1107,
        1622, 2991, 1057, 185,  1130, 172,  1320, 0,    0,    2384, 0,    1544, 2126, 403,  2522, 0,
        2050, 0,    1385, 0,    296,  2758, 0,    140,  1324, 2812, 754,  275,  1142, 354,  0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    2964, 94,   206,  703,  0,    0,    2435,
        0,    2225, 0,    682,  0,    269,  0,    860,  1295, 0,    2811, 940,  0,    0,    1070, 3207,
        1411, 343,  1107, 3117, 606,  1011, 1260, 86,   1061, 976,  1172, 0,    0,    0,    84,   0,
        2984, 200,  1075, 1545, 0,    0,    247,  0,    0,    0,    0,    3089, 178,  1540, 0,    1877,
        1105, 0,    9,    633,  0,    0,    275,  0,    1534, 913,  1069, 0,    0,    0,    2983, 0,
        2394, 0,    0,    0,    723,  910,  601,  32,   2572, 139,  0,    0,    2496, 0,    1611, 1326,
        0,    1089, 0,    1477, 3082, 0,    3140, 0,    431,  1015, 1164, 0,    0,    951,  1267, 175,
        0,    355,  2565, 0,    0,    0,    104,  862,  0,    0,    377,  2114, 510,  0,    0,    1227,
        2033, 1316, 1445, 269,  1266, 307,  741,  2569, 0,    0,    0,    0,    1009, 1522, 0,    1977,
        2837, 422,  440,  1539, 1398, 739,  1206, 2488, 0,    0,    210,  0,    1502, 0,    2721, 2608,
        717,  944,  2259, 2911, 652,  10,   226,  0,    0,    2224, 3104, 535,  0,    1125, 2805, 3203,
        2804, 0,    3200, 572,  0,    352,  1523, 2722, 553,  0,    2357, 0,    1120, 1514, 0,    0,
        0,    0,    582,  2827, 237,  736,  616,  771,  0,    0,    3150, 0,    0,    0,    1886, 3011,
        2106, 1495, 2163, 515,  633,  672,  0,    0,    177,  0,    3161, 767,  681,  0,    2564, 802,
        0,    0,    2758, 0,    2874, 769,  653,  0,    751,  0,    2778, 0,    577,  825,  0,    0,
        0,    1544, 919,  0,    0,    0,    0,    2860, 1026, 2079, 1452, 0,    0,    0,    0,    0,
        538,  1144, 0,    0,    0,    2597, 2440, 0,    0,    1064, 0,    0,    0,    779,  353,  0,
        2571, 0,    759,  2543, 1000, 295,  162,  0,    1548, 0,    1613, 0,    0,    1141, 1886, 0,
        958,  2240, 836,  0,    0,    0,    0,    2605, 0,    446,  0,    788,  1659, 1592, 0,    3153,
        1472, 0,    1497, 0,    596,  0,    0,    0,    0,    0,    3147, 0,    429,  0,    778,  0,
        517,  350,  1448, 1609, 2924, 0,    924,  0,    3106, 0,    1297, 2117, 0,    0,    1354, 1305,
        2684, 2562, 0,    0,    0,    140,  866,  1504, 0,    2915, 0,    0,    0,    0,    0,    1355,
        97,   196,  0,    392,  484,  0,    0,    0,    380,  0,    0,    596,  1252, 0,    1698, 267,
        2934, 0,    1013, 0,    3137, 1308, 0,    1359, 1315, 165,  0,    1420, 0,    0,    1410, 0,
        0,    234,  2902, 0,    1573, 0,    0,    1455, 3126, 531,  767,  3132, 935,  0,    0,    1220,
        0,    287,  1014, 3061, 0,    0,    2294, 0,    702,  0,    707,  978,  2462, 2758, 1124, 1650,
        280,  0,    0,    919,  0,    2510, 1595, 83,   1729, 0,    815,  1011, 2545, 59,   0,    845,
        0,    0,    20,   1392, 956,  1447, 254,  0,    0,    255,  0,    0,    0,    1608, 0,    0,
        198,  679,  0,    260,  2618, 0,    215,  1533, 0,    0,    0,    0,    509,  0,    111,  975,
        645,  0,    0,    278,  1189, 0,    0,    0,    0,    0,    2087, 0,    0,    0,    1487, 2687,
        0,    546,  0,    0,    1508, 331,  615,  0,    2529, 1373, 89,   508,  78,   0,    267,  0,
        797,  0,    613,  843,  995,  1339, 1439, 2847, 299,  2962, 867,  0,    0,    0,    0,    1739,
        490,  2822, 49,   0,    533,  3131, 1323, 0,    1485, 717,  0,    1895, 1006, 367,  639,  1411,
        961,  0,    647,  0,    0,    1166, 1734, 1121, 980,  3028, 122,  545,  366,  938,  220,  1197,
        0,    2037, 0,    166,  433,  0,    0,    0,    0,    988,  1618, 2576, 289,  475,  0,    0,
        596,  0,    255,  1352, 1212, 700,  0,    0,    0,    701,  873,  1194, 1246, 355,  66,   0,
        0,    0,    1086, 0,    0,    1623, 0,    2542, 593,  1030, 0,    218,  489,  615,  2069, 1836,
        0,    981,  0,    24,   108,  1516, 1098, 0,    896,  866,  0,    867,  456,  3060, 632,  0,
        762,  0,    0,    0,    0,    370,  466,  3142, 1240, 0,    0,    0,    868,  0,    142,  455,
        3019, 0,    2770, 0,    424,  711,  1326, 0,    0,    741,  853,  0,    631,  2839, 2022, 0,
        315,  2894, 35,   752,  1415, 282,  1135, 0,    2128, 1183, 0,    262,  726,  0,    0,    2150,
        0,    187,  608,  3192, 3090, 319,  995,  0,    0,    702,  954,  3077, 27,   0,    1311, 0,
        1239, 0,    1236, 314,  656,  660,  1467, 936,  905,  856,  1446, 1226, 0,    542,  842,  307,
        2486, 0,    1582, 3099, 238,  1058, 1682, 0,    55,   0,    2201, 708,  0,    25,   40,   1461,
        1187, 57,   568,  783,  285,  0,    152,  793,  0,    511,  1275, 0,    1210, 1352, 303,  1602,
        41,   59,   0,    1500, 1134, 705,  0,    0,    338,  200,  80,   194,  0,    649,  0,    2708,
        0,    2487, 2413, 0,    0,    0,    0,    0,    20,   513,  2748, 1571, 1534, 2088, 2009, 0,
        64,   813,  0,    0,    2475, 81,   149,  1690, 2795, 1363, 2989, 2227, 2597, 116,  0,    1480,
        0,    0,    944,  0,    0,    0,    460,  1336, 427,  0,    0,    1435, 0,    0,    0,    0,
        0,    0,    0,    2368, 0,    2274, 0,    893,  2374, 0,    997,  0,    2799, 0,    904,  2494,
        1026, 411,  0,    0,    0,    1143, 675,  1814, 0,    1074, 1332, 2656, 0,    0,    1424, 0,
        4,    0,    2904, 1477, 1299, 2960, 0,    99,   0,    0,    0,    1407, 3064, 160,  0,    1452,
        2804, 2099, 0,    306,  948,  0,    1470, 0,    3030, 3202, 0,    2732, 0,    1260, 1195, 453,
        471,  1017, 682,  0,    0,    0,    2620, 0,    1882, 0,    0,    911,  3062, 0,    838,  0,
        2437, 68,   0,    0,    1027, 256,  580,  507,  546,  912,  245,  0,    0,    777,  1104, 1463,
        970,  0,    0,    1945, 854,  1149, 0,    1343, 687,  0,    1329, 657,  0,    360,  0,    0,
        0,    0,    2813, 1591, 2489, 0,    0,    2128, 648,  0,    1637, 0,    0,    1522, 2337, 0,
        758,  2281, 708,  0,    103,  0,    2878, 1443, 0,    2074, 3200, 0,    0,    0,    0,    316,
        0,    461,  473,  0,    286,  3107, 0,    2850, 1451, 0,    128,  0,    186,  0,    0,    0,
        0,    2551, 1109, 330,  1214, 0,    0,    0,    0,    1081, 1833, 0,    0,    0,    107,  833,
        330,  658,  0,    2260, 0,    0,    940,  321,  507,  0,    1909, 1419, 0,    361,  1389, 1130,
        77,   0,    2427, 0,    0,    0,    0,    1173};
    
    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[] = {285, 346, 333, 258, 66, 132, 43,  79, 285, 59, 149, 22,  325,
                                    301, 223, 334, 172, 84, 66,  242, 91, 132, 80, 231, 269, 334};
    constexpr int unmangledkT2[] = {164, 118, 124, 168, 214, 55,  234, 346, 248, 200, 181, 9,  62,
                                    284, 229, 292, 208, 216, 282, 186, 221, 2,   283, 336, 81, 207};
    constexpr int unmangledkG[]  = {
        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,   31,  0,   0,   0,   0,   67,  0,   0,   0,
        106, 0,   0,   197, 0,   146, 299, 0,   0,   0,   89,  0,   0,   344, 121, 0,   0,   0,   0,
        0,   73,  58,  0,   0,   136, 0,   0,   105, 145, 349, 0,   0,   0,   0,   0,   0,   0,   52,
        51,  118, 274, 280, 89,  335, 38,  0,   0,   27,  16,  0,   297, 0,   0,   42,  0,   0,   0,
        0,   0,   0,   0,   295, 0,   57,  10,  0,   147, 0,   0,   39,  0,   0,   58,  0,   0,   57,
        0,   111, 337, 23,  141, 0,   128, 256, 13,  0,   300, 0,   0,   135, 315, 179, 0,   0,   55,
        150, 27,  0,   0,   340, 31,  0,   0,   0,   97,  62,  0,   69,  0,   17,  171, 0,   85,  61,
        0,   0,   0,   43,  0,   0,   0,   305, 0,   40,  0,   96,  0,   0,   0,   0,   293, 8,   93,
        0,   0,   0,   0,   21,  99,  158, 57,  0,   114, 261, 0,   120, 0,   0,   0,   0,   81,  0,
        88,  319, 38,  0,   341, 0,   245, 260, 0,   159, 0,   0,   36,  0,   0,   0,   265, 0,   0,
        0,   0,   11,  0,   0,   0,   0,   0,   151, 195, 0,   132, 82,  209, 0,   0,   0,   100, 129,
        132, 0,   0,   0,   16,  0,   32,  337, 123, 72,  29,  0,   257, 78,  20,  130, 0,   80,  0,
        0,   20,  0,   5,   0,   87,  0,   39,  317, 14,  0,   162, 0,   33,  0,   310, 29,  0,   0,
        122, 330, 0,   75,  0,   15,  99,  96,  100, 67,  319, 47,  114, 91,  27,  0,   0,   0,   0,
        0,   134, 303, 118, 133, 341, 0,   0,   0,   0,   0,   131, 0,   0,   334, 60,  113, 138, 0,
        0,   168, 311, 0,   294, 0,   233, 81,  0,   0,   0,   345, 150, 23,  0,   116, 0,   27,  26,
        142, 0,   0,   0,   31,  137, 170, 341, 83,  346, 18,  266, 21,  0,   4,   28,  30,  107, 0,
        0,   102, 14,  0,   290, 17,  344, 0,   119, 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 %= 353;
        }
        return unmangledkG[sum];
    }
    
    int UnmangledPerfectHash(const char *key)
    {
        if (strlen(key) > 26)
            return 0;
    
        return (UnmangledHashG(key, unmangledkT1) + UnmangledHashG(key, unmangledkT2)) % 353;
    }
    
    }  // 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