Edit

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

Branch :

  • Show log

    Commit

  • Author : Mohan Maiya
    Date : 2020-11-19 07:58:05
    Hash : 8a401051
    Message : Vulkan: Support OES_sample_variables extension Enable OES_sample_variables extension on Vulkan backend. Add support for built-in variables, uniform state and constants - gl_SampleId, gl_SamplePosition, gl_SampleMask, gl_SampleMaskIn - gl_NumSamples - gl_MaxSamples Bug: angleproject:3588 Tests: dEQP-GLES31.functional.shaders.sample_variables.* KHR-GLES31.core.sample_variables.* Change-Id: Idf37c7b4ccb0331dbda7acd6389ff4e1022ba959 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2477907 Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>

  • src/compiler/translator/ImmutableString_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_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[] = {1933, 3877, 3968, 1159, 2915, 2389, 3868, 1299, 1908, 2556,
                                  1802, 1796, 861,  3187, 3496, 2798, 2418, 3782, 3695, 85,
                                  2918, 3445, 1723, 1534, 2916, 1648, 4054, 2733, 1231, 2732,
                                  2374, 2498, 2316, 1106, 2812, 346,  1336, 3187, 1642, 1572};
    constexpr int mangledkT2[] = {88,   1749, 863,  880,  1872, 196,  3113, 2111, 3750, 1174,
                                  4156, 4137, 1645, 663,  537,  295,  181,  3731, 1564, 2008,
                                  1873, 2826, 1968, 2441, 1729, 1088, 2529, 1304, 1866, 11,
                                  879,  3669, 3403, 57,   2607, 2213, 418,  1556, 2613, 3582};
    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,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    1467,
        0,    618,  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,    4150,
        1899, 0,    0,    0,    0,    0,    58,   0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    643,  0,    0,    0,    0,    0,    0,    0,    0,    2429, 2155, 0,    0,
        0,    0,    0,    0,    0,    0,    2570, 0,    0,    0,    0,    0,    0,    0,    0,    2338,
        0,    1894, 3883, 313,  3859, 0,    3868, 0,    0,    0,    0,    0,    0,    2521, 0,    0,
        0,    0,    0,    0,    0,    1791, 0,    0,    0,    0,    0,    0,    0,    0,    0,    2651,
        0,    0,    0,    1620, 0,    0,    0,    0,    0,    0,    0,    3826, 0,    3348, 0,    0,
        2700, 0,    0,    810,  0,    0,    0,    4088, 0,    472,  0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    3990, 0,    0,    4002, 0,
        0,    0,    1669, 0,    0,    0,    0,    0,    733,  0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    3566, 0,    0,    0,    0,    2673, 0,    0,    0,    0,    0,
        0,    0,    4280, 0,    1237, 0,    346,  340,  634,  0,    398,  3175, 0,    0,    0,    0,
        2413, 1801, 0,    0,    0,    3223, 0,    0,    0,    0,    385,  0,    0,    0,    0,    0,
        2216, 1629, 0,    1278, 0,    0,    0,    1623, 0,    0,    0,    0,    0,    3571, 3889, 2814,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    1270, 0,    0,    3097, 888,
        0,    0,    0,    0,    0,    0,    0,    330,  3888, 0,    881,  0,    189,  0,    0,    4279,
        0,    0,    0,    0,    558,  3644, 0,    0,    1638, 0,    0,    0,    0,    452,  0,    0,
        1412, 0,    753,  4267, 0,    0,    0,    0,    0,    0,    2917, 0,    0,    0,    0,    0,
        0,    0,    0,    0,    9,    0,    0,    0,    3984, 0,    0,    0,    0,    3838, 0,    0,
        0,    0,    0,    0,    0,    0,    3270, 1351, 0,    820,  1119, 453,  0,    0,    1753, 0,
        3250, 0,    0,    0,    0,    0,    0,    2006, 1988, 3375, 1787, 0,    0,    0,    1426, 871,
        0,    0,    793,  3467, 1157, 3585, 0,    0,    0,    1354, 0,    0,    279,  4207, 26,   0,
        0,    0,    0,    4295, 0,    1898, 0,    0,    0,    1749, 65,   2100, 0,    0,    0,    0,
        598,  128,  0,    0,    0,    0,    0,    0,    0,    2031, 0,    2145, 0,    2368, 0,    0,
        2055, 1429, 0,    0,    0,    2507, 402,  1343, 0,    0,    2988, 2325, 188,  0,    0,    0,
        0,    2102, 2597, 0,    0,    0,    0,    0,    906,  0,    0,    0,    0,    0,    1848, 0,
        0,    0,    4235, 1029, 0,    0,    0,    4285, 0,    0,    0,    0,    0,    0,    0,    855,
        3870, 0,    4056, 0,    0,    0,    0,    4062, 436,  0,    0,    0,    0,    0,    0,    0,
        328,  0,    410,  0,    3314, 2484, 0,    555,  0,    0,    0,    0,    0,    0,    2049, 0,
        0,    728,  3835, 0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    1684, 0,
        2416, 0,    0,    3444, 519,  1318, 0,    0,    0,    0,    1361, 0,    0,    579,  0,    0,
        801,  0,    3075, 0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    176,  0,    0,
        0,    1768, 0,    2710, 0,    2890, 0,    0,    0,    0,    3493, 0,    828,  0,    0,    0,
        0,    3920, 0,    1182, 0,    1724, 0,    822,  0,    0,    0,    0,    4171, 0,    0,    0,
        0,    2060, 3026, 0,    0,    1788, 0,    1981, 0,    0,    0,    0,    1655, 2074, 0,    2302,
        3529, 0,    0,    0,    376,  2160, 838,  0,    1161, 0,    0,    0,    1117, 0,    1611, 0,
        0,    1904, 0,    1944, 3241, 3018, 4183, 1000, 0,    0,    0,    3188, 730,  0,    0,    0,
        1107, 0,    1313, 0,    0,    0,    2638, 0,    1761, 826,  0,    0,    0,    0,    221,  0,
        0,    0,    0,    0,    0,    0,    1091, 3580, 0,    0,    162,  0,    2804, 632,  2363, 0,
        2246, 1136, 0,    1403, 0,    0,    2757, 0,    762,  0,    0,    0,    0,    0,    1926, 0,
        0,    186,  408,  105,  0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    498,  0,
        0,    0,    0,    3992, 3611, 0,    1255, 0,    0,    0,    0,    0,    0,    0,    1622, 0,
        0,    0,    0,    0,    0,    0,    0,    3084, 0,    0,    1583, 0,    0,    3735, 0,    0,
        0,    1452, 0,    0,    0,    0,    0,    2398, 1198, 412,  0,    0,    1575, 42,   0,    699,
        3631, 2080, 1427, 0,    1975, 0,    0,    0,    1879, 3676, 0,    139,  0,    0,    0,    804,
        0,    0,    0,    719,  0,    439,  855,  0,    2179, 0,    0,    0,    0,    1777, 0,    0,
        0,    0,    0,    0,    0,    3883, 416,  0,    1433, 9,    0,    1574, 1929, 0,    3351, 338,
        1237, 0,    0,    0,    225,  0,    1163, 2418, 880,  2523, 0,    0,    877,  0,    2771, 4159,
        1649, 0,    3817, 1820, 112,  1227, 0,    0,    0,    0,    1045, 1715, 0,    0,    0,    0,
        1633, 0,    217,  3506, 0,    0,    1673, 2696, 0,    1124, 0,    0,    0,    1800, 0,    0,
        0,    0,    925,  0,    95,   3997, 944,  4229, 0,    3780, 0,    0,    0,    0,    0,    545,
        0,    62,   0,    3690, 1299, 0,    0,    1200, 1488, 0,    887,  0,    0,    1662, 2638, 0,
        0,    1885, 0,    0,    352,  0,    0,    0,    493,  3838, 957,  3195, 0,    34,   2350, 0,
        1108, 3516, 2572, 0,    2699, 1901, 0,    0,    3923, 0,    0,    0,    2745, 0,    1289, 0,
        203,  0,    4121, 0,    0,    2056, 249,  1546, 0,    1524, 0,    1434, 0,    0,    0,    1202,
        4137, 2012, 3224, 0,    0,    1765, 3755, 0,    0,    0,    3092, 309,  1711, 2001, 1745, 0,
        0,    337,  0,    0,    0,    0,    0,    913,  0,    3077, 0,    1072, 0,    0,    323,  942,
        1456, 1095, 1721, 0,    0,    0,    0,    1383, 0,    0,    3508, 0,    0,    0,    0,    72,
        3140, 0,    0,    997,  0,    2876, 0,    1653, 0,    1971, 1356, 0,    0,    0,    0,    0,
        2018, 0,    0,    49,   1246, 0,    1727, 1374, 387,  423,  0,    0,    2152, 340,  0,    0,
        1941, 0,    2697, 0,    0,    1572, 0,    3487, 0,    0,    0,    0,    0,    1312, 3077, 3754,
        1016, 2118, 0,    959,  0,    0,    0,    0,    0,    832,  2142, 0,    3794, 0,    2103, 0,
        465,  3473, 0,    0,    2822, 108,  0,    0,    0,    652,  1486, 0,    0,    0,    3783, 1096,
        0,    0,    0,    0,    518,  0,    3804, 3532, 0,    0,    0,    0,    0,    0,    32,   0,
        0,    2490, 0,    0,    2840, 0,    0,    570,  3538, 3854, 1189, 865,  0,    2906, 0,    0,
        762,  1712, 4200, 1566, 2433, 3543, 0,    0,    0,    1809, 0,    546,  0,    28,   469,  0,
        1592, 3089, 3759, 0,    501,  0,    504,  0,    0,    0,    0,    1172, 1539, 1052, 0,    0,
        0,    0,    0,    4105, 0,    4058, 0,    317,  0,    2761, 0,    0,    0,    0,    1110, 0,
        0,    3325, 0,    0,    0,    223,  344,  0,    0,    0,    0,    1625, 0,    3565, 0,    0,
        0,    0,    0,    207,  323,  1184, 33,   2705, 2733, 0,    0,    0,    1573, 3287, 0,    0,
        30,   714,  0,    3397, 3947, 1800, 0,    2886, 0,    87,   0,    1055, 0,    755,  139,  0,
        0,    329,  0,    0,    0,    921,  479,  0,    0,    0,    0,    0,    0,    4014, 0,    2363,
        533,  276,  1121, 3121, 0,    2007, 0,    0,    29,   1775, 0,    0,    0,    241,  0,    0,
        0,    1858, 0,    0,    0,    831,  0,    251,  1882, 0,    962,  0,    1225, 0,    0,    1683,
        3566, 0,    1764, 1507, 760,  0,    0,    1533, 0,    0,    2193, 1002, 4221, 2534, 0,    0,
        0,    0,    0,    0,    0,    1171, 578,  3413, 3102, 3894, 393,  0,    4000, 692,  518,  0,
        692,  0,    0,    497,  461,  0,    0,    1185, 0,    0,    0,    1950, 876,  0,    0,    1824,
        3933, 0,    0,    749,  0,    0,    0,    780,  0,    1022, 0,    0,    245,  418,  0,    3809,
        0,    1206, 0,    3772, 4231, 0,    3722, 3418, 427,  2162, 0,    3516, 0,    0,    416,  1189,
        0,    712,  3453, 0,    0,    574,  2568, 0,    0,    0,    3669, 0,    0,    1703, 229,  0,
        147,  0,    0,    0,    0,    0,    0,    1465, 0,    1673, 0,    0,    0,    1857, 1093, 3473,
        2881, 999,  1460, 1150, 0,    0,    420,  0,    4088, 0,    0,    0,    0,    2626, 0,    2421,
        158,  0,    3646, 0,    0,    0,    0,    0,    3221, 1618, 2595, 0,    2830, 1596, 0,    0,
        0,    194,  1457, 0,    421,  0,    0,    1731, 0,    0,    1871, 0,    0,    0,    2034, 0,
        3546, 4161, 0,    0,    0,    904,  2808, 4243, 3237, 0,    3316, 0,    0,    4178, 0,    2333,
        4236, 197,  0,    846,  916,  0,    0,    0,    990,  0,    3064, 0,    902,  0,    0,    0,
        0,    0,    454,  0,    2139, 949,  0,    342,  0,    0,    2682, 3874, 0,    597,  1535, 0,
        0,    0,    0,    0,    0,    3683, 0,    544,  0,    879,  0,    0,    1886, 0,    3077, 2642,
        1483, 0,    790,  231,  367,  2173, 2908, 667,  167,  3968, 0,    450,  0,    252,  4002, 0,
        0,    439,  1453, 0,    615,  3862, 1246, 1051, 127,  0,    2472, 1841, 1002, 0,    2068, 1244,
        2668, 4049, 1566, 0,    0,    1379, 1687, 0,    0,    3175, 0,    4096, 1983, 0,    67,   1212,
        554,  198,  1722, 1123, 495,  3354, 0,    0,    1029, 0,    0,    0,    0,    412,  3387, 0,
        210,  1604, 0,    1460, 0,    1261, 1812, 3557, 0,    0,    25,   140,  0,    0,    576,  0,
        0,    899,  0,    3802, 1148, 779,  0,    4229, 0,    4097, 4154, 1418, 0,    2638, 1923, 0,
        0,    2696, 3398, 1581, 0,    0,    0,    0,    567,  0,    3289, 1284, 360,  720,  3921, 0,
        0,    4136, 3998, 1292, 3149, 3943, 2738, 3292, 3999, 0,    1626, 0,    800,  355,  3997, 542,
        500,  0,    2271, 2729, 3310, 0,    3787, 0,    2469, 0,    1682, 0,    0,    0,    1439, 0,
        401,  831,  728,  0,    1352, 0,    2953, 0,    0,    3438, 45,   3500, 3799, 0,    0,    4163,
        0,    1661, 2728, 1514, 0,    0,    2265, 2045, 0,    0,    0,    0,    0,    4190, 0,    0,
        2586, 0,    0,    0,    0,    0,    3895, 130,  1113, 3703, 4131, 1948, 1625, 1892, 675,  0,
        0,    2334, 0,    0,    0,    0,    839,  1165, 0,    0,    1079, 1798, 0,    492,  708,  922,
        0,    0,    4204, 817,  949,  0,    623,  704,  0,    866,  0,    1826, 741,  0,    0,    0,
        0,    0,    481,  3518, 0,    1175, 3362, 0,    0,    1233, 0,    292,  0,    226,  0,    0,
        0,    1759, 0,    0,    0,    986,  0,    1633, 0,    1482, 1589, 0,    0,    2863, 3261, 3633,
        0,    0,    0,    0,    3136, 2227, 1211, 0,    0,    0,    2412, 3488, 0,    0,    0,    0,
        3848, 1106, 0,    0,    950,  0,    0,    0,    3111, 0,    0,    0,    0,    1906, 0,    0,
        162,  975,  3508, 833,  966,  1801, 797,  0,    858,  0,    0,    0,    0,    0,    960,  1148,
        0,    0,    798,  0,    0,    0,    0,    1613, 2107, 0,    2034, 307,  1636, 1754, 975,  0,
        31,   3672, 0,    1510, 83,   0,    2119, 809,  0,    0,    0,    374,  1584, 1834, 1685, 0,
        843,  0,    5,    1919, 0,    2122, 1275, 0,    255,  0,    301,  0,    0,    0,    2028, 3126,
        0,    0,    0,    2442, 1243, 0,    0,    1010, 455,  1305, 911,  0,    0,    0,    3866, 3589,
        0,    0,    1697, 2063, 0,    0,    0,    1735, 1893, 4164, 0,    0,    368,  0,    659,  690,
        3255, 2022, 1296, 710,  0,    1391, 829,  0,    4256, 767,  1645, 1514, 0,    0,    0,    2918,
        95,   0,    131,  4274, 0,    0,    0,    1268, 529,  0,    0,    1738, 3307, 0,    1168, 3476,
        100,  0,    1337, 1585, 1300, 279,  2413, 0,    196,  2149, 890,  1473, 0,    0,    2594, 0,
        0,    0,    0,    2665, 3896, 0,    0,    1081, 0,    1026, 0,    1047, 1481, 2119, 0,    1795,
        0,    589,  4294, 0,    651,  0,    2354, 0,    1371, 0,    3827, 0,    2435, 3163, 1259, 896,
        3919, 984,  0,    476,  0,    3007, 0,    3874, 1833, 0,    1884, 3958, 976,  0,    736,  0,
        0,    0,    1221, 0,    1142, 1729, 0,    0,    2006, 943,  0,    1393, 0,    1033, 0,    3849,
        701,  2485, 3083, 0,    0,    3706, 0,    1620, 4260, 3036, 1668, 474,  483,  0,    1552, 1613,
        3267, 0,    0,    1196, 0,    3368, 0,    3662, 0,    4105, 0,    0,    0,    376,  685,  0,
        0,    0,    0,    0,    0,    0,    137,  1354, 3446, 1364, 0,    382,  0,    0,    208,  0,
        0,    3118, 1348, 0,    0,    0,    0,    0,    0,    3948, 1345, 2323, 0,    2979, 364,  2600,
        1032, 1145, 0,    0,    0,    1042, 0,    2087, 0,    0,    0,    0,    0,    1960, 0,    0,
        518,  2809, 449,  1852, 821,  0,    0,    0,    2262, 2983, 0,    0,    0,    1917, 14,   3669,
        0,    131,  1178, 0,    807,  0,    0,    0,    0,    0,    1561, 0,    0,    0,    0,    0,
        1250, 0,    1002, 0,    0,    1751, 599,  0,    0,    319,  2602, 0,    302,  2294, 0,    0,
        0,    0,    863,  766,  0,    0,    248,  0,    3940, 0,    3614, 682,  0,    0,    0,    0,
        0,    2017, 1017, 0,    0,    0,    2374, 2793, 4256, 0,    47,   0,    0,    3956, 0,    0,
        0,    1281, 1502, 60,   480,  0,    0,    0,    0,    0,    0,    0,    0,    3853, 0,    4024,
        1365, 737,  669,  0,    0,    0,    0,    3147, 0,    4237, 3203, 1386, 616,  3624, 0,    958,
        1666, 0,    0,    0,    0,    1825, 1610, 0,    3457, 1548, 3420, 0,    0,    0,    0,    4069,
        0,    0,    0,    237,  2232, 0,    0,    0,    88,   0,    0,    2213, 0,    0,    0,    3858,
        0,    0,    1168, 3609, 0,    2572, 3271, 0,    740,  3936, 4021, 4152, 1259, 0,    0,    0,
        1607, 709,  610,  0,    0,    0,    3138, 4103, 2117, 940,  850,  1623, 0,    0,    29,   0,
        0,    0,    0,    2507, 323,  1704, 4098, 1508, 0,    3045, 1677, 1981, 1593, 0,    0,    0,
        616,  277,  0,    0,    0,    2232, 297,  1952, 0,    1442, 945,  1239, 990,  0,    0,    0,
        0,    0,    0,    2512, 3442, 0,    0,    0,    741,  0,    901,  2265, 1493, 3298, 0,    0,
        0,    51,   3920, 0,    1887, 1817, 0,    0,    3239, 0,    818,  0,    0,    0,    0,    0,
        2817, 0,    272,  0,    1219, 1341, 1688, 1023, 0,    0,    473,  0,    3879, 774,  0,    0,
        3681, 1211, 1006, 3679, 0,    93,   2779, 1852, 3726, 0,    2339, 1371, 0,    4195, 3568, 0,
        3735, 54,   0,    496,  0,    1792, 1030, 2925, 778,  3642, 0,    0,    202,  0,    0,    234,
        921,  1191, 3859, 0,    3424, 0,    1015, 2246, 0,    684,  0,    3124, 3491, 1865, 421,  1469,
        0,    2745, 0,    0,    3093, 1552, 1740, 211,  961,  1130, 3685, 0,    1146, 4212, 0,    1570,
        152,  0,    0,    2742, 984,  0,    0,    73,   1174, 0,    0,    0,    0,    2002, 0,    0,
        0,    0,    1470, 0,    2833, 0,    0,    0,    1550, 2740, 0,    1287, 1158, 0,    1737, 588,
        0,    1020, 0,    1282, 3698, 1996, 0,    1496, 60,   3961, 53,   1013, 0,    533,  0,    908,
        0,    966,  294,  2049, 0,    0,    1324, 936,  0,    2746, 0,    858,  0,    392,  0,    1268,
        0,    0,    241,  0,    0,    1782, 0,    4052, 0,    1147, 0,    0,    0,    3882, 449,  1390,
        1073, 0,    3158, 0,    3564, 1401, 669,  0,    0,    1490, 720,  4190, 0,    0,    0,    810,
        1438, 1822, 0,    0,    0,    1128, 2101, 1056, 0,    954,  977,  0,    1779, 0,    0,    0,
        0,    0,    1804, 1091, 0,    0,    0,    1271, 3360, 0,    0,    1286, 3857, 3374, 3771, 1129,
        496,  0,    295,  0,    2946, 3563, 0,    0,    1235, 0,    480,  1210, 0,    2757, 0,    105,
        1662, 0,    3567, 0,    0,    1790, 0,    0,    0,    0,    3403, 1790, 0,    644,  2003, 0,
        0,    1152, 0,    0,    1196, 91,   3059, 957,  2004, 774,  1967, 0,    0,    3361, 424,  0,
        1880, 1828, 547,  216,  1187, 0,    0,    159,  1423, 320,  1569, 0,    3828, 2447, 0,    1419,
        1143, 0,    810,  740,  586,  1061, 287,  1350, 3146, 1362, 1647, 1158, 667,  0,    3642, 3306,
        3722, 0,    727,  3969, 1928, 0,    0,    0,    0,    0,    1004, 2027, 0,    1534, 0,    0,
        0,    348,  410,  2866, 0,    3938, 3611, 3664, 0,    0,    0,    802,  182,  0,    0,    0,
        0,    1031, 3976, 814,  1758, 2542, 0,    845,  2023, 1910, 65,   683,  3618, 3882, 0,    2991,
        1567, 1638, 1747, 0,    2114, 3906, 0,    109,  1267, 3172, 856,  943,  1248, 0,    3224, 0,
        3140, 3103, 0,    0,    3085, 39,   1531, 3941, 0,    0,    0,    0,    3968, 1940, 0,    883,
        1976, 0,    2856, 522,  0,    0,    505,  823,  0,    3144, 3553, 1958, 0,    753,  0,    0,
        0,    0,    1080, 129,  795,  0,    190,  3271, 927,  0,    0,    0,    2334, 4151, 2067, 0,
        180,  3267, 177,  0,    0,    178,  0,    201,  0,    551,  570,  2797, 3235, 0,    0,    1568,
        0,    0,    0,    0,    573,  0,    0,    184,  0,    320,  0,    2260, 0,    234,  104,  0,
        2404, 513,  4072, 0,    0,    655,  0,    0,    0,    1494, 1168, 2019, 0,    0,    1317, 0,
        2437, 2022, 3790, 0,    0,    0,    1859, 3429, 2032, 0,    0,    4221, 0,    3795, 0,    339,
        40,   326,  88,   0,    1988, 1849, 0,    0,    1323, 0,    652,  1165, 0,    94,   0,    287,
        2142, 1149, 811,  4173, 467,  0,    0,    1216, 1915, 1266, 0,    1861, 273,  3146, 915,  920,
        1991, 0,    950,  222,  2552, 0,    0,    0,    0,    1968, 0,    1290, 1727, 636,  853,  1683,
        499,  0,    466,  3054, 3714, 0,    0,    746,  0,    0,    0,    492,  3508, 0,    4033, 0,
        0,    0,    0,    849,  334,  0,    0,    939,  1218, 1807, 3700, 2355, 0,    1608, 3026, 1675,
        0,    609,  908,  0,    979,  405,  1837, 0,    4055, 1100, 569,  0,    2959, 0,    985,  0,
        1097, 2820, 0,    0,    596,  299,  1905, 0,    4198, 0,    869,  2112, 0,    5,    2044, 0,
        0,    0,    0,    0,    0,    185,  378,  495,  21,   0,    0,    1682, 847,  1279, 59,   953,
        523,  777,  4196, 0,    20,   0,    0,    1711, 525,  2163, 1483, 2658, 1861, 0,    2924, 1380,
        0,    1708, 0,    1833, 821,  0,    327,  79,   0,    0,    543,  544,  0,    1463, 0,    0,
        175,  0,    527,  790,  0,    0,    0,    0,    0,    2888, 968,  0,    0,    0,    1145, 3306,
        0,    155,  0,    2169, 0,    2026, 0,    4272, 784,  2950, 215,  0,    835,  1390, 0,    1592,
        0,    0,    0,    2168, 0,    0,    272,  349,  0,    0,    0,    1969, 0,    0,    0,    0,
        1272, 36,   0,    899,  0,    0,    0,    928,  0,    0,    586,  0,    2138, 2073, 3615, 485,
        162,  0,    0,    0,    4183, 439,  0,    0,    893,  0,    0,    260,  0,    4268, 0,    0,
        545,  440,  0,    0,    403,  0,    0,    3711, 95,   1108, 802,  4058, 0,    0,    0,    0,
        903,  756,  0,    448,  34,   825,  0,    0,    0,    0,    1526, 0,    1834, 1603, 0,    1244,
        1467, 0,    0,    1084, 3192, 0,    0,    2826, 359,  1831, 0,    0,    4247, 2738, 0,    0,
        0,    1520, 834,  0,    0,    0,    223,  0,    0,    0,    1787, 158,  3584, 761,  2760, 3628,
        0,    1473, 301,  1381, 1003, 0,    3612, 89,   1109, 0,    0,    0,    0,    3593, 0,    0,
        898,  0,    1008, 1916, 1259, 0,    3451, 0,    3145, 3447, 0,    3244, 1815, 0,    884,  0,
        0,    4093, 451,  271,  2125, 0,    0,    656,  3915, 1922, 1018, 594,  0,    748,  0,    727,
        0,    771,  0,    79,   2533, 0,    0,    1544, 86,   0,    388,  1029, 3630, 1564, 352,  301,
        3412, 0,    3491, 0,    1104, 0,    530,  1975, 0,    575,  1733, 0,    311,  1401, 2113, 0,
        1092, 0,    395,  1447, 988,  0,    3023, 0,    3434, 1354, 1371, 1886, 3119, 0,    1912, 3250,
        0,    3425, 0,    3908, 1454, 174,  238,  430,  1992, 1113, 933,  0,    1861, 598,  0,    0,
        0,    3217, 554,  2828, 3741, 0,    0,    306,  2999, 23,   0,    800,  2172, 2737, 109,  0,
        2175, 0,    3529, 2721, 0,    1979, 0,    3663, 3225, 0,    4105, 0,    0,    849,  0,    0,
        1870, 3344, 1532, 4225, 0,    1761, 6,    1868, 1247, 4104, 701,  1707, 0,    0,    1538, 3341,
        236,  0,    2774, 429,  0,    0,    304,  0,    3262, 0,    0,    0,    0,    0,    882,  0,
        972,  837,  3596, 0,    0,    684,  0,    1408, 0,    0,    3166, 0,    181,  0,    0,    1680,
        1951, 132,  1950, 366,  62,   3557, 0,    2449, 0,    1139, 0,    2945, 0,    0,    1486, 972,
        2953, 267,  1420, 3718, 33,   0,    503,  0,    0,    2070, 0,    0,    1796, 0,    1995, 0,
        1230, 1156, 1710, 2328, 2012, 143,  2394, 1276, 2091, 3588, 0,    0,    316,  2541, 1047, 1236,
        2116, 1031, 0,    1652, 1167, 879,  3090, 0,    0,    47,   1254, 2003, 0,    33,   1693, 1504,
        0,    0,    0,    224,  0,    1073, 0,    2990, 1367, 554,  0,    974,  0,    0,    731,  1743,
        0,    0,    3548, 0,    164,  4268, 0,    0,    85,   0,    1998, 0,    3546, 0,    0,    354,
        0,    0,    1561, 2062, 488,  2489, 1045, 887,  1519, 266,  2712, 531,  4284, 1369, 0,    1832,
        0,    2146, 0,    0,    775,  0,    0,    2867, 809,  1315, 0,    0,    435,  343,  0,    1794,
        3024, 2360, 0,    0,    997,  1450, 2822, 250,  3980, 1223, 2877, 1040, 244,  1264, 955,  867,
        4193, 1231, 0,    836,  356,  1639, 0,    0,    625,  0,    0,    2284, 1518, 310,  4057, 2115,
        550,  0,    295,  4104, 2154, 0,    1141, 0,    175,  0,    0,    0,    1924, 462,  2812, 0,
        1482, 0,    0,    0,    0,    0,    987,  0,    4296, 0,    0,    0,    3501, 1505, 0,    0,
        0,    0,    210,  0,    149,  0,    0,    0,    0,    0,    1230, 2081, 1086, 0,    1753, 926,
        0,    1846, 0,    1138, 4209, 3267, 0,    0,    0,    1354, 0,    1859, 0,    144,  4125, 613,
        0,    3857, 3142, 0,    307,  608,  8,    3549, 2888, 0,    0,    0,    0,    0,    2009, 1089,
        0,    3943, 0,    1982, 2961, 0,    1288, 4156, 1966, 160,  516,  3548, 3731, 2207, 216,  1960,
        1064, 0,    0,    707,  3623, 414,  2207, 770,  0,    141,  2011, 263,  1848, 393,  0,    1472,
        0,    1463, 1411, 16,   3901, 0,    1630, 671,  2254, 648,  0,    884,  4126, 2,    0,    2902,
        1478, 0,    1458, 2412, 1051, 1016, 333,  872,  2687, 1313, 2058, 1146, 1795, 1066, 0,    3527,
        1861, 0,    379,  77,   3717, 3484, 0,    3493, 52,   0,    0,    0,    0,    0,    810,  0,
        0,    24,   0,    1909, 1405, 0,    0,    2121, 0,    0,    0,    0,    4279, 601,  3212, 0,
        859,  1298, 724,  1485, 703,  3662, 0,    0,    2159, 1264, 807,  1301, 3799, 1820, 1646, 3401,
        0,    1630, 111,  0,    158,  0,    1502, 3142, 0,    1955, 3783, 723,  2998, 0,    70,   2821,
        0,    0,    0,    0,    3470, 3050, 2176, 0,    0,    0,    1096, 0,    2004, 0,    86,   0,
        0,    2262, 0,    904,  0,    488,  0,    0,    4006, 4292, 3017, 122,  0,    383,  2770, 0,
        0,    0,    0,    1651, 0,    168,  0,    3861, 2733, 0,    861,  0,    0,    1859, 645,  320,
        104,  2717, 1175, 572,  938,  1406, 0,    0,    338,  0,    283,  1269, 0,    1889, 0,    1011,
        3728, 1126, 0,    3136, 0,    437,  351,  0,    1912, 0,    0,    1311, 1978, 1612, 0,    880,
        226,  1600, 1290, 187,  677,  0,    110,  0,    0,    323,  156,  949,  0,    199,  0,    2093,
        2085, 0,    1883, 1723, 0,    0,    419,  2473, 1203, 1024, 0,    1019, 3789, 987,  0,    0,
        0,    1321, 1858, 1936, 0,    0,    0,    0,    0,    0,    477,  0,    3464, 1162, 316,  459,
        3148, 0,    1319, 3120, 947,  2776, 0,    3878, 3439, 1141, 2994, 0,    1400, 0,    0,    2570,
        0,    3899, 1120, 0,    964,  0,    1988, 0,    3432, 0,    3582, 1111, 0,    1065, 3850, 0,
        2611, 3598, 472,  0,    0,    1396, 1243, 0,    4152, 846,  0,    724,  659,  418,  0,    4274,
        0,    1353, 1902, 1950, 957,  0,    0,    0,    613,  4195, 3216, 0,    1060, 107,  417,  1383,
        369,  1206, 1455, 4262, 0,    0,    0,    247,  170,  2866, 0,    782,  629,  0,    0,    1333,
        0,    1696, 1209, 0,    0,    3030, 0,    1309, 4252, 107,  0,    563,  0,    629,  176,  0,
        0,    1963, 0,    0,    0,    508,  0,    558,  1961, 0,    2820, 2470, 0,    0,    3091, 1404,
        0,    1061, 78,   1136, 0,    493,  2350, 1398, 0,    53,   1188, 0,    48,   0,    1217, 604,
        0,    0,    0,    480,  0,    346,  2820, 1842, 0,    0,    0,    0,    502,  354,  0,    2171,
        1665, 198,  0,    0,    1164, 0,    0,    0,    524,  1201, 3418, 1445, 0,    0,    2126, 0,
        959,  1131, 2808, 1851, 0,    560,  0,    2784, 573,  0,    2166, 1252, 2794, 3354, 0,    2735,
        3860, 452,  1693, 0,    0,    4158, 3764, 1330, 3464, 0,    1527, 937,  0,    4033, 2729, 727,
        1183, 0,    0,    171,  1922, 963,  0,    146,  4152, 0,    96,   3896, 0,    0,    0,    155,
        1658, 0,    1855, 1609, 0,    1825, 0,    872,  3978, 3383, 0,    2136, 4289, 0,    1088, 0,
        395,  616,  0,    550,  0,    191,  1877, 1268, 612,  0,    0,    3707, 808,  0,    0,    1071,
        431,  0,    1088, 0,    0,    1024, 1973, 895,  2990, 479,  1098, 203,  1757, 0,    0,    2687,
        2622, 0,    2164, 713,  954,  1501, 3126, 0,    0,    0,    0,    1709, 1105, 3678, 0,    0,
        2151, 0,    1293, 0,    218,  0,    2016, 2091, 233,  3943, 3278, 1835, 0,    0,    0,    650,
        0,    0,    0,    0,    0,    0,    0,    1624, 648,  0,    1533, 819,  3946, 0,    649,  226,
        463,  732,  830,  1932, 0,    0,    854,  2282, 0,    960,  362,  1844, 355,  583,  884,  937,
        1885, 1377, 787,  568,  1813, 0,    453,  0,    1134, 0,    3745, 468,  4097, 0,    1870, 3397,
        1505, 3660, 0,    0,    0,    0,    773,  571,  994,  0,    618,  103,  1441, 0,    0,    0,
        0,    0,    0,    546,  2025, 1829, 1545, 5,    1131, 1632, 2042, 0,    0,    1810, 0,    395,
        3188, 0,    995,  1891, 0,    0,    4219, 165,  3056, 0,    0,    1725, 1416, 0,    0,    501,
        0,    363,  3942, 0,    1933, 122,  1259, 3525, 25,   0,    1419, 0,    0,    0,    2787, 1130,
        1430, 2227, 2615, 0,    0,    0,    3811, 2433, 1221, 0,    3332, 2829, 159,  1621, 0,    0,
        385,  1517, 958,  7,    164,  687,  0,    0,    0,    1298, 0,    1449, 2700, 378,  0,    1811,
        2251, 3993, 2366, 0,    3730, 3629, 2831, 0,    0,    3928, 502,  1958, 0,    2561, 1684, 0,
        1720, 3133, 0,    0,    1255, 1057, 0,    1449, 0,    2331, 0,    1422, 0,    0,    0,    1158,
        1803, 0,    0,    11,   0,    0,    2109, 0,    412,  704,  0,    1633, 3455, 0,    637,  620,
        0,    796,  409,  1770, 1755, 0,    0,    600,  0,    1389, 1434, 2979, 423,  2460, 940,  2174,
        546,  0,    65,   0,    486,  1528, 0,    735,  213,  1208, 0,    0,    0,    1706, 1752, 0,
        352,  1370, 1747, 0,    0,    0,    1720, 0,    0,    256,  138,  2077, 0,    563,  0,    591,
        321,  0,    0,    1823, 0,    3985, 1553, 1047, 487,  0,    3850, 1939, 1180, 4206, 0,    0,
        0,    722,  4205, 2001, 318,  769,  0,    3905, 1873};
    
    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 %= 4297;
        }
        return mangledkG[sum];
    }
    
    int MangledPerfectHash(const char *key)
    {
        if (strlen(key) > 40)
            return 0;
    
        return (MangledHashG(key, mangledkT1) + MangledHashG(key, mangledkT2)) % 4297;
    }
    
    constexpr int unmangledkT1[] = {127, 281, 170, 251, 345, 384, 143, 321, 123, 282, 387, 196, 77,
                                    344, 162, 151, 197, 348, 63,  317, 298, 29,  340, 285, 150, 329};
    constexpr int unmangledkT2[] = {65,  272, 162, 165, 165, 71,  29, 126, 162, 56, 87,  72, 1,
                                    273, 168, 175, 126, 222, 286, 70, 183, 67,  59, 246, 18, 78};
    constexpr int unmangledkG[]  = {
        0,   0,   283, 288, 0,   0,   221, 113, 0,   0,   0,   22,  0,   186, 0,   0,   0,   0,   0,
        0,   0,   0,   0,   0,   0,   0,   43,  293, 0,   269, 187, 196, 96,  112, 23,  0,   281, 18,
        65,  0,   0,   0,   0,   0,   0,   363, 343, 0,   0,   0,   346, 72,  0,   0,   0,   0,   0,
        0,   60,  0,   0,   0,   58,  0,   17,  75,  0,   369, 0,   241, 332, 245, 0,   345, 0,   0,
        0,   0,   0,   325, 0,   149, 0,   72,  0,   329, 323, 0,   0,   95,  0,   99,  61,  197, 101,
        0,   0,   0,   215, 0,   0,   150, 141, 0,   0,   317, 0,   39,  0,   0,   162, 0,   0,   327,
        295, 0,   0,   0,   101, 0,   238, 127, 197, 12,  0,   351, 0,   0,   257, 0,   36,  332, 24,
        4,   359, 0,   244, 0,   94,  261, 14,  86,  359, 381, 0,   0,   0,   81,  0,   206, 158, 0,
        0,   0,   15,  144, 0,   327, 146, 41,  355, 139, 213, 11,  28,  0,   113, 6,   0,   158, 0,
        0,   269, 0,   0,   52,  192, 170, 170, 66,  86,  0,   125, 0,   0,   230, 0,   0,   80,  57,
        5,   8,   0,   0,   0,   232, 370, 285, 7,   168, 248, 242, 0,   69,  0,   0,   0,   0,   294,
        0,   213, 1,   0,   0,   0,   121, 184, 0,   157, 0,   67,  0,   329, 0,   0,   0,   6,   0,
        0,   311, 207, 0,   97,  187, 0,   0,   222, 343, 0,   49,  0,   113, 11,  44,  124, 6,   201,
        288, 147, 270, 0,   0,   0,   214, 155, 165, 60,  0,   0,   0,   0,   45,  90,  0,   221, 55,
        175, 0,   0,   136, 0,   194, 372, 0,   0,   0,   56,  58,  65,  0,   0,   236, 308, 259, 0,
        0,   0,   64,  0,   0,   0,   0,   206, 0,   279, 0,   0,   0,   128, 0,   140, 0,   110, 0,
        0,   96,  119, 89,  0,   154, 32,  257, 193, 203, 15,  0,   0,   212, 193, 0,   0,   119, 104,
        0,   193, 0,   64,  274, 0,   167, 0,   0,   117, 0,   361, 85,  104, 79,  227, 0,   175, 208,
        302, 148, 0,   0,   268, 282, 0,   0,   251, 114, 0,   110, 29,  0,   45,  59,  55,  148, 0,
        0,   10,  214, 44,  70,  134, 209, 0,   92,  0,   96,  252, 355, 0,   66,  0,   168, 353, 0,
        0,   274, 197, 76,  0,   117, 172, 322};
    
    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