Edit

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

Branch :

  • Show log

    Commit

  • Author : Tobin Ehlis
    Date : 2019-11-15 14:40:31
    Hash : 240befe5
    Message : Add support for gl_HelperInvocation Added HelperInvocation to builtin_variables.json, regenerate the codegen portions of compiler, and plumb support for HelperInvocation through the rest of the compiler. Skipping some fails on Android and Swiftshader for this initial change and will debug/fix those issues in a follow-on. Bug: angleproject:4110 Change-Id: I781a2782ace84200bc615a2cc26b908a62e2aa26 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1922061 Commit-Queue: Tobin Ehlis <tobine@google.com> Reviewed-by: Jamie Madill <jmadill@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 2019 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[] = {2324, 3570, 3888, 2418, 2383, 3870, 121,  2164, 476,  3290,
                                  3760, 2253, 1201, 3621, 412,  3171, 167,  3120, 3068, 3179,
                                  2664, 641,  656,  851,  2976, 2758, 1691, 3053, 2715, 239,
                                  441,  2110, 418,  2258, 2888, 2486, 37};
    constexpr int mangledkT2[] = {732,  3306, 900,  3331, 2519, 3385, 2162, 54,   3709, 2280,
                                  1793, 1837, 2274, 3142, 1271, 1722, 765,  1930, 3122, 171,
                                  3406, 3407, 759,  3634, 647,  645,  1347, 3761, 1022, 1840,
                                  2108, 3928, 1242, 2643, 3369, 2269, 895};
    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,    3902, 0,
        0,    0,    0,    264,  3392, 0,    0,    0,    0,    0,    0,    0,    0,    0,    3741, 0,
        0,    0,    0,    392,  0,    0,    477,  0,    0,    0,    0,    0,    0,    0,    0,    0,
        3159, 0,    0,    0,    0,    0,    495,  0,    3546, 0,    0,    1571, 490,  0,    0,    0,
        0,    0,    0,    2236, 3717, 0,    0,    0,    0,    0,    0,    2805, 2101, 0,    2889, 0,
        0,    0,    2409, 0,    0,    0,    0,    0,    0,    0,    2022, 0,    0,    2539, 0,    3741,
        0,    0,    1831, 764,  0,    88,   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    3891, 0,    0,    0,    0,    2481, 0,    0,    268,  0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    332,  0,    0,    1532, 3509, 3579, 0,    1446,
        0,    1669, 0,    1017, 0,    0,    0,    0,    0,    0,    0,    0,    3186, 2727, 0,    1869,
        0,    0,    0,    0,    0,    0,    0,    824,  3762, 2482, 0,    0,    2124, 0,    0,    1722,
        0,    0,    0,    0,    0,    3442, 0,    0,    0,    0,    0,    3941, 0,    0,    3440, 3356,
        0,    3699, 0,    1596, 0,    0,    2667, 0,    359,  0,    0,    0,    0,    0,    0,    405,
        1051, 1440, 0,    0,    0,    3687, 0,    2676, 0,    0,    0,    3327, 0,    0,    625,  2116,
        3415, 0,    0,    0,    0,    0,    723,  1443, 0,    0,    0,    0,    0,    3605, 0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    1113, 0,    0,    0,    0,    0,    267,  0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    374,  0,
        0,    1662, 0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    3990, 0,    0,    1443,
        152,  0,    1018, 707,  0,    3202, 0,    0,    0,    1313, 0,    0,    0,    0,    0,    0,
        0,    0,    0,    2641, 0,    585,  3479, 0,    0,    1793, 851,  2757, 0,    0,    2965, 3464,
        0,    447,  748,  0,    0,    0,    0,    2403, 0,    0,    0,    0,    0,    0,    1916, 0,
        0,    0,    3108, 1330, 3612, 921,  1577, 283,  0,    145,  3648, 2045, 0,    1618, 0,    1722,
        2,    3421, 0,    3297, 0,    715,  0,    2125, 0,    1391, 3712, 0,    0,    0,    0,    976,
        0,    0,    3195, 0,    0,    3570, 0,    3505, 0,    0,    0,    0,    0,    3910, 3417, 0,
        1962, 0,    759,  0,    0,    1135, 2536, 2961, 0,    0,    1612, 0,    0,    0,    0,    117,
        0,    0,    0,    0,    0,    849,  0,    0,    0,    701,  1559, 0,    146,  0,    575,  0,
        0,    0,    0,    0,    33,   0,    1630, 0,    0,    1283, 0,    3633, 0,    0,    438,  0,
        25,   3082, 0,    0,    46,   0,    211,  0,    0,    0,    666,  0,    0,    3766, 962,  0,
        2601, 0,    107,  0,    2225, 1728, 0,    0,    123,  0,    133,  0,    0,    0,    0,    0,
        0,    2783, 0,    1123, 0,    0,    0,    1021, 0,    0,    0,    2675, 0,    0,    0,    19,
        1915, 0,    0,    0,    0,    0,    0,    0,    3206, 0,    2446, 0,    0,    0,    0,    0,
        0,    0,    206,  0,    0,    0,    0,    866,  0,    0,    3134, 0,    3915, 0,    0,    0,
        0,    517,  0,    1312, 0,    0,    0,    2213, 0,    0,    3560, 0,    0,    0,    2943, 0,
        0,    0,    0,    1302, 1375, 301,  0,    305,  0,    645,  3814, 0,    1755, 3767, 0,    3307,
        2684, 0,    685,  0,    0,    0,    0,    294,  1068, 0,    3349, 1240, 1102, 451,  0,    0,
        0,    0,    0,    0,    956,  3207, 0,    0,    1128, 314,  2708, 166,  218,  0,    2202, 0,
        0,    3970, 0,    0,    0,    0,    0,    3565, 0,    0,    0,    0,    0,    0,    0,    0,
        1103, 0,    1425, 234,  2109, 0,    3322, 0,    678,  0,    0,    0,    0,    3909, 0,    3765,
        0,    0,    0,    0,    0,    693,  0,    0,    0,    0,    746,  0,    0,    0,    0,    3176,
        0,    0,    0,    0,    1514, 3835, 0,    0,    0,    0,    0,    71,   0,    3635, 0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    782,  0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    2992, 0,    0,    0,    0,    0,    129,
        0,    1399, 4003, 0,    0,    0,    1424, 2962, 0,    0,    265,  0,    0,    0,    0,    3233,
        0,    0,    0,    0,    476,  1507, 0,    0,    0,    3160, 2873, 1991, 0,    0,    0,    1548,
        0,    903,  0,    0,    0,    2942, 0,    3960, 0,    4011, 3164, 442,  0,    2685, 2655, 2557,
        0,    0,    0,    0,    39,   1188, 2352, 0,    1402, 3872, 2087, 264,  283,  1970, 0,    2154,
        539,  1920, 3139, 0,    0,    556,  0,    0,    2623, 920,  405,  2402, 0,    3886, 0,    647,
        464,  0,    76,   955,  371,  579,  2455, 0,    0,    1975, 0,    209,  2051, 0,    0,    0,
        1328, 0,    3578, 68,   0,    0,    1151, 0,    0,    0,    3734, 0,    612,  0,    0,    0,
        1955, 3378, 0,    2571, 0,    0,    3344, 0,    941,  2924, 765,  0,    3040, 2312, 412,  868,
        0,    0,    0,    898,  0,    222,  1718, 0,    0,    0,    0,    0,    1513, 1833, 0,    0,
        0,    0,    0,    2078, 3211, 367,  344,  3873, 276,  0,    741,  1347, 0,    1150, 0,    981,
        1040, 0,    3067, 0,    0,    1934, 1416, 3567, 3154, 702,  0,    1745, 2874, 1077, 3665, 68,
        0,    3788, 0,    0,    3418, 0,    873,  1274, 2025, 1900, 0,    0,    3924, 1120, 244,  840,
        3573, 19,   0,    0,    0,    1019, 0,    0,    3895, 0,    0,    2141, 0,    0,    0,    0,
        1227, 0,    3691, 0,    0,    1035, 0,    3778, 1982, 0,    0,    0,    0,    107,  0,    0,
        0,    0,    0,    925,  0,    0,    0,    0,    1653, 1064, 52,   0,    1462, 1097, 0,    0,
        0,    2923, 0,    492,  87,   1641, 2680, 1510, 0,    2718, 0,    0,    594,  0,    650,  487,
        0,    0,    2729, 0,    1075, 0,    3807, 0,    0,    3961, 0,    0,    1313, 1690, 0,    0,
        2405, 0,    1253, 1199, 3748, 0,    1432, 0,    0,    0,    399,  3372, 1088, 0,    3807, 0,
        1662, 0,    0,    0,    1744, 0,    2451, 1625, 2313, 2201, 1829, 317,  0,    0,    120,  0,
        52,   0,    0,    1028, 0,    0,    0,    2282, 33,   715,  0,    161,  552,  0,    3115, 1086,
        0,    0,    0,    1654, 1349, 0,    0,    0,    1029, 1902, 0,    2125, 2186, 3922, 784,  0,
        0,    0,    2297, 0,    0,    1450, 0,    0,    2759, 2039, 1325, 0,    3051, 0,    0,    1304,
        0,    3924, 0,    0,    1444, 755,  3675, 3720, 0,    0,    0,    1976, 2679, 3793, 0,    0,
        3527, 0,    2023, 744,  3760, 0,    0,    0,    0,    0,    0,    496,  1174, 3554, 1935, 1247,
        0,    0,    0,    0,    0,    0,    0,    1247, 0,    0,    2556, 289,  2210, 1120, 1382, 750,
        0,    1539, 0,    2145, 0,    0,    1875, 0,    0,    1904, 0,    0,    289,  3116, 0,    0,
        0,    0,    0,    0,    0,    0,    1174, 1348, 3987, 1317, 1434, 0,    662,  668,  3001, 0,
        0,    143,  508,  0,    896,  0,    838,  0,    0,    1461, 3248, 1887, 2619, 0,    0,    0,
        0,    1599, 0,    0,    3997, 0,    9,    0,    603,  618,  1242, 3980, 0,    0,    0,    1324,
        0,    0,    0,    0,    51,   0,    193,  624,  2309, 0,    3217, 2123, 1682, 3969, 0,    1981,
        0,    863,  2086, 0,    0,    0,    0,    2363, 0,    1231, 2597, 2713, 0,    3084, 0,    3475,
        0,    0,    0,    91,   0,    3859, 0,    0,    381,  2625, 0,    3968, 0,    165,  0,    456,
        3777, 1216, 2235, 395,  0,    204,  0,    0,    0,    1936, 0,    299,  827,  3567, 3165, 0,
        509,  162,  0,    3551, 1464, 0,    0,    2997, 102,  363,  0,    2106, 0,    1702, 1775, 3157,
        0,    2529, 0,    3676, 297,  0,    0,    0,    0,    0,    1697, 617,  0,    0,    282,  0,
        2304, 0,    1439, 0,    1563, 1481, 1942, 1367, 74,   538,  0,    3827, 2021, 0,    0,    0,
        0,    0,    300,  0,    0,    3072, 3368, 0,    104,  2379, 0,    854,  2958, 1473, 2014, 0,
        0,    4011, 0,    1211, 0,    0,    3307, 134,  1350, 0,    0,    0,    0,    0,    0,    0,
        2562, 0,    0,    0,    455,  0,    3345, 0,    917,  0,    0,    929,  0,    1796, 0,    0,
        796,  0,    2271, 2751, 0,    0,    0,    186,  578,  0,    1780, 3751, 0,    0,    0,    1393,
        361,  2841, 3964, 2613, 2617, 0,    0,    0,    2008, 0,    1008, 0,    228,  0,    9,    2911,
        3552, 0,    1532, 3140, 3634, 1274, 0,    6,    0,    436,  0,    208,  1026, 699,  0,    0,
        0,    1099, 0,    2819, 0,    0,    0,    0,    0,    3840, 1688, 3765, 0,    158,  1224, 2826,
        0,    0,    0,    729,  0,    835,  0,    3458, 0,    0,    0,    27,   1599, 2661, 1955, 0,
        3742, 2708, 0,    1763, 0,    1063, 0,    777,  0,    788,  565,  0,    1617, 707,  0,    0,
        2001, 411,  1532, 0,    0,    1710, 1716, 0,    1059, 1492, 0,    570,  0,    0,    0,    0,
        3491, 0,    1254, 3023, 0,    3830, 0,    0,    393,  0,    0,    3942, 3390, 988,  0,    3759,
        1426, 232,  3969, 1482, 2816, 2587, 484,  0,    0,    0,    1751, 0,    1495, 0,    0,    1444,
        1405, 2114, 2099, 0,    0,    0,    0,    3461, 656,  0,    503,  0,    0,    2848, 0,    3947,
        1282, 3393, 2021, 0,    0,    0,    851,  0,    0,    0,    3558, 389,  0,    0,    0,    1054,
        518,  2742, 0,    2758, 998,  2050, 1399, 0,    0,    0,    0,    3258, 0,    2410, 0,    0,
        1995, 2288, 3814, 0,    336,  3876, 0,    641,  1543, 0,    3284, 905,  0,    0,    995,  0,
        0,    0,    1148, 0,    0,    881,  0,    1426, 470,  2068, 0,    0,    0,    0,    0,    3205,
        664,  1838, 2145, 924,  1217, 840,  0,    24,   0,    437,  724,  3180, 1290, 2747, 0,    2064,
        3028, 670,  0,    498,  1306, 0,    611,  2080, 0,    0,    0,    0,    1893, 2553, 0,    869,
        872,  1093, 2343, 1428, 414,  0,    70,   3834, 0,    0,    200,  0,    0,    0,    0,    293,
        0,    3391, 3089, 0,    0,    663,  3657, 3881, 0,    0,    469,  1334, 0,    1933, 253,  1387,
        2969, 0,    1076, 1238, 0,    0,    0,    0,    1479, 1693, 532,  2937, 133,  1350, 0,    0,
        3695, 658,  0,    1220, 0,    1462, 1698, 0,    1406, 2730, 0,    0,    0,    0,    1873, 0,
        780,  0,    3174, 3413, 1669, 0,    0,    866,  0,    3054, 3269, 0,    3841, 0,    3895, 2225,
        1312, 434,  0,    359,  3647, 647,  0,    1816, 0,    1172, 1889, 0,    0,    0,    0,    0,
        1805, 3443, 0,    0,    2732, 1236, 0,    2897, 1133, 919,  0,    0,    0,    0,    3321, 0,
        64,   0,    0,    2276, 1647, 0,    0,    508,  0,    0,    0,    0,    0,    4016, 1974, 1140,
        0,    0,    0,    576,  970,  1531, 0,    0,    3547, 1788, 0,    2340, 0,    0,    3885, 85,
        0,    0,    0,    0,    0,    2675, 0,    0,    215,  0,    0,    0,    1976, 2403, 1141, 415,
        2740, 0,    266,  1531, 0,    0,    402,  0,    988,  1774, 1542, 205,  1292, 1593, 337,  2006,
        749,  0,    0,    0,    0,    0,    49,   2688, 742,  1343, 669,  1138, 528,  1498, 182,  0,
        1296, 3909, 359,  50,   0,    310,  2463, 0,    0,    2436, 1891, 322,  396,  0,    0,    0,
        1971, 2978, 2176, 3732, 0,    0,    0,    6,    3137, 3203, 0,    108,  1050, 0,    0,    0,
        0,    953,  1154, 0,    0,    689,  1257, 311,  2567, 2131, 1487, 0,    3180, 1308, 360,  0,
        0,    3413, 3380, 3495, 1436, 1018, 3332, 318,  2619, 0,    485,  263,  0,    0,    0,    0,
        0,    1472, 1286, 0,    3119, 0,    543,  3012, 0,    0,    0,    0,    826,  110,  2605, 0,
        2683, 0,    2225, 3692, 267,  2170, 336,  555,  665,  0,    0,    1448, 0,    0,    1939, 0,
        0,    1980, 0,    2262, 3961, 0,    86,   0,    0,    421,  2520, 3458, 817,  3975, 2679, 2961,
        1093, 287,  2110, 1069, 0,    3070, 0,    258,  3303, 0,    0,    0,    1708, 0,    2210, 0,
        0,    0,    0,    397,  902,  2677, 918,  0,    728,  0,    2744, 1108, 0,    2456, 0,    0,
        0,    2153, 924,  1147, 124,  3687, 335,  0,    374,  0,    1637, 1243, 1380, 0,    1600, 1451,
        436,  0,    598,  0,    0,    349,  0,    0,    0,    1823, 0,    0,    0,    0,    3192, 304,
        1710, 0,    0,    9,    443,  1143, 3491, 588,  0,    119,  4000, 0,    401,  0,    0,    0,
        0,    0,    0,    0,    0,    0,    1807, 1047, 61,   2442, 0,    612,  3005, 663,  45,   0,
        471,  915,  0,    0,    1758, 1548, 0,    0,    1007, 0,    0,    0,    1359, 2621, 1793, 142,
        913,  2738, 69,   0,    0,    3622, 0,    2179, 0,    0,    472,  928,  282,  0,    0,    979,
        0,    840,  3889, 0,    0,    2584, 0,    2738, 1149, 719,  679,  1280, 424,  3106, 0,    2143,
        856,  547,  0,    0,    3458, 428,  0,    2109, 2395, 0,    1320, 2224, 0,    0,    0,    0,
        1993, 0,    31,   0,    1999, 0,    1471, 0,    0,    2533, 1084, 1031, 0,    242,  0,    0,
        0,    286,  0,    0,    1224, 348,  2918, 0,    1930, 1949, 847,  0,    547,  0,    1728, 0,
        235,  2594, 653,  510,  95,   1438, 0,    2129, 0,    0,    0,    0,    0,    255,  1573, 3691,
        0,    2444, 0,    1330, 0,    108,  0,    1147, 64,   1296, 970,  771,  1078, 888,  1703, 1447,
        697,  0,    0,    2665, 3261, 0,    1662, 0,    2549, 1829, 3665, 3156, 0,    0,    3624, 0,
        0,    0,    0,    399,  382,  3842, 3493, 1668, 1092, 0,    503,  290,  3294, 1722, 4017, 0,
        1600, 0,    0,    950,  567,  0,    0,    1457, 0,    0,    0,    1386, 3002, 1557, 3744, 605,
        3013, 3906, 0,    247,  0,    0,    0,    3162, 1738, 2117, 1392, 0,    1912, 806,  0,    802,
        1209, 2253, 0,    0,    0,    0,    0,    1509, 2112, 0,    3467, 0,    0,    1468, 0,    3344,
        2120, 0,    840,  1026, 0,    1650, 238,  0,    1429, 1968, 0,    1456, 3555, 3765, 938,  3662,
        0,    2246, 2027, 718,  0,    0,    0,    0,    2748, 0,    3125, 0,    681,  1801, 0,    3833,
        581,  0,    933,  2636, 0,    759,  1514, 0,    1627, 1353, 222,  282,  0,    1814, 0,    1506,
        0,    783,  693,  2893, 1864, 0,    3086, 0,    0,    537,  868,  0,    103,  0,    0,    0,
        0,    3849, 3773, 0,    0,    1757, 0,    1545, 1313, 0,    85,   36,   0,    0,    1971, 0,
        1513, 3225, 1408, 1164, 1886, 0,    940,  3699, 2076, 0,    1280, 2727, 0,    0,    0,    0,
        0,    0,    3011, 407,  996,  0,    759,  1838, 1275, 1120, 0,    0,    2034, 0,    0,    2121,
        0,    258,  2426, 0,    0,    683,  0,    0,    0,    0,    25,   0,    855,  1896, 0,    2114,
        1102, 0,    2776, 917,  3731, 1119, 3353, 1869, 3813, 0,    2178, 0,    0,    0,    0,    0,
        0,    3575, 0,    0,    1073, 1488, 0,    0,    0,    0,    0,    2834, 3635, 0,    3972, 0,
        0,    1235, 0,    0,    1069, 2097, 0,    309,  1426, 1964, 1725, 1056, 3700, 0,    0,    504,
        0,    1004, 0,    3829, 279,  123,  2600, 1548, 955,  0,    2737, 1544, 0,    2881, 3319, 658,
        0,    0,    0,    1541, 1716, 0,    0,    0,    0,    0,    1644, 0,    4016, 1743, 1803, 3718,
        1671, 3874, 2028, 1585, 0,    0,    0,    1574, 1535, 3268, 517,  374,  0,    0,    3787, 0,
        1420, 0,    1215, 0,    0,    1043, 3621, 0,    598,  0,    896,  1347, 0,    540,  0,    0,
        3832, 0,    429,  1952, 750,  1773, 0,    1038, 0,    0,    1723, 1195, 0,    1093, 260,  3628,
        0,    2118, 0,    214,  0,    548,  0,    3107, 303,  198,  3001, 0,    1593, 0,    2725, 0,
        0,    3117, 3300, 0,    450,  1029, 2937, 768,  2995, 0,    3644, 1807, 299,  0,    0,    613,
        729,  0,    948,  0,    657,  0,    0,    3797, 0,    1576, 0,    59,   3535, 0,    2040, 0,
        2524, 0,    0,    0,    1635, 1048, 0,    3783, 3985, 2985, 3954, 0,    192,  744,  1244, 3900,
        0,    906,  53,   0,    165,  17,   3573, 1538, 0,    0,    0,    0,    3845, 2431, 0,    0,
        2096, 0,    1592, 880,  2718, 0,    41,   0,    66,   0,    3212, 2634, 484,  1045, 1213, 1834,
        0,    423,  0,    498,  27,   3972, 2285, 1322, 2206, 0,    1857, 0,    2499, 1931, 0,    0,
        1870, 96,   0,    1323, 0,    0,    594,  682,  0,    0,    1312, 2715, 0,    2566, 1050, 0,
        918,  170,  1085, 0,    49,   1053, 1894, 0,    0,    333,  3904, 0,    754,  331,  2666, 2559,
        0,    2165, 3565, 3885, 3773, 0,    2672, 2585, 1414, 1076, 869,  0,    2170, 1072, 0,    0,
        2503, 2304, 0,    2748, 1044, 987,  1267, 570,  0,    0,    0,    0,    0,    150,  0,    3567,
        2423, 66,   0,    762,  0,    0,    3674, 0,    12,   3077, 0,    251,  0,    58,   0,    0,
        704,  253,  0,    2787, 0,    0,    0,    562,  952,  0,    0,    3133, 0,    702,  569,  552,
        0,    0,    2116, 0,    0,    1488, 1828, 292,  0,    1641, 0,    1616, 0,    0,    0,    3732,
        1577, 0,    0,    0,    1332, 0,    0,    1826, 686,  772,  3809, 0,    269,  164,  264,  0,
        534,  0,    1471, 2696, 0,    296,  3622, 1624, 0,    0,    3847, 608,  0,    760,  3400, 0,
        3613, 0,    539,  138,  0,    0,    0,    0,    0,    0,    0,    0,    2362, 2009, 3910, 2368,
        498,  2085, 632,  61,   627,  1052, 0,    3115, 2076, 0,    2271, 0,    898,  1143, 3331, 0,
        3348, 1061, 1109, 295,  0,    0,    0,    0,    176,  1068, 0,    0,    0,    33,   0,    0,
        0,    2904, 924,  0,    1556, 3159, 863,  0,    0,    0,    0,    3286, 2093, 1314, 561,  3244,
        435,  0,    0,    3712, 0,    1230, 0,    803,  0,    0,    0,    244,  133,  0,    1927, 0,
        1689, 0,    1881, 2801, 1421, 1021, 0,    0,    318,  644,  0,    1343, 0,    0,    305,  0,
        707,  1932, 0,    979,  0,    373,  0,    0,    1867, 0,    0,    488,  0,    166,  41,   185,
        1910, 0,    0,    1724, 0,    1975, 0,    2029, 1686, 1607, 1358, 0,    0,    0,    0,    610,
        0,    0,    3240, 0,    2226, 0,    4003, 0,    1431, 0,    3783, 0,    483,  2608, 0,    1778,
        0,    0,    608,  1671, 8,    0,    0,    0,    30,   0,    244,  0,    833,  0,    0,    3595,
        2899, 2378, 0,    2089, 2528, 0,    0,    1217, 0,    0,    999,  2868, 1923, 0,    1914, 0,
        0,    121,  832,  1779, 535,  0,    0,    0,    0,    1882, 2904, 0,    0,    0,    636,  2251,
        1238, 206,  0,    0,    40,   0,    613,  1118, 3759, 0,    0,    0,    3088, 1083, 2763, 0,
        1306, 0,    1971, 2012, 0,    602,  31,   1568, 1310, 1529, 0,    2856, 2687, 3451, 1961, 690,
        3288, 0,    1352, 852,  1127, 0,    3661, 3301, 0,    0,    0,    1963, 0,    274,  2182, 864,
        1709, 1872, 811,  2712, 0,    0,    0,    0,    2919, 0,    4016, 0,    2047, 1855, 1663, 107,
        3335, 40,   1956, 0,    1648, 2066, 0,    0,    270,  3350, 1739, 2818, 1819, 782,  139,  90,
        126,  0,    0,    0,    3964, 2025, 3571, 2108, 1486, 0,    3334, 0,    0,    0,    291,  0,
        3163, 0,    0,    1033, 0,    151,  0,    0,    453,  0,    0,    174,  0,    643,  1078, 0,
        1129, 416,  1376, 77,   832,  0,    905,  140,  1232, 136,  0,    55,   1401, 0,    0,    0,
        0,    3012, 0,    0,    0,    1310, 1914, 2608, 261,  756,  0,    3623, 223,  521,  1926, 0,
        3748, 0,    0,    288,  1428, 200,  0,    1506, 528,  0,    0,    0,    1983, 0,    637,  1557,
        0,    3820, 1832, 1669, 0,    1596, 0,    1588, 1454, 0,    0,    0,    2429, 3381, 588,  559,
        0,    388,  1044, 0,    2065, 2043, 1279, 0,    926,  0,    1374, 0,    0,    3479, 258,  0,
        0,    1070, 3431, 2042, 0,    0,    603,  0,    2822, 505,  580,  1696, 3987, 2923, 967,  362,
        1379, 0,    98,   664,  2728, 3841, 0,    0,    1347, 0,    2163, 0,    921,  2592, 439,  3454,
        0,    225,  125,  1556, 803,  1046, 2578, 478,  0,    0,    0,    772,  0,    1466, 0,    2341,
        736,  1534, 0,    1400, 1218, 1515, 1200, 165,  492,  2100, 2529, 1436, 509,  129,  3601, 3347,
        0,    0,    3998, 0,    81,   1198, 1014, 936,  0,    898,  1427, 0,    807,  1057, 0,    0,
        2676, 0,    168,  3934, 0,    360,  2476, 2012, 1252, 826,  2730, 0,    1205, 2165, 0,    997,
        0,    3556, 1966, 1711, 980,  349,  507,  819,  511,  2866, 490,  354,  2105, 0,    904,  1691,
        375,  0,    0,    403,  2015, 527,  0,    0,    0,    0,    542,  1454, 2754, 1155, 0,    0,
        0,    1972, 3563, 194,  0,    0,    130,  202,  1866, 653,  60,   0,    0,    3185, 2030, 3433,
        762,  2046, 1167, 0,    3699, 0,    0,    0,    3999, 0,    0,    0,    1686, 1334, 0,    2140,
        2666, 3680, 137,  0,    2207, 3748, 1332, 448,  0,    0,    0,    491,  820,  0,    0,    2305,
        402,  1016, 765,  3777, 0,    458,  2625, 252,  0,    0,    306,  2974, 0,    794,  844,  947,
        768,  0,    0,    0,    0,    672,  3771, 0,    1888, 1125, 1297, 314,  1390, 216,  0,    0,
        0,    3905, 2647, 915,  802,  0,    1570, 233,  1135, 3396, 0,    195,  784,  0,    738,  1426,
        969,  2463, 463,  126,  436,  926,  1317, 3997, 0,    0,    895,  0,    1112, 772,  0,    325,
        1447, 0,    0,    205,  0,    1272, 825,  0,    0,    1448, 0,    1890, 0,    3334, 0,    3721,
        0,    2076, 0,    515,  0,    0,    0,    3099, 2151, 0,    3468, 0,    0,    30,   0,    1661,
        1382, 0,    907,  948,  0,    0,    1115, 0,    1390, 0,    4003, 1493, 3119, 1063, 1867, 0,
        1923, 0,    876,  3783, 817,  846,  1642, 1701, 3743, 0,    0,    0,    0,    2082, 1122, 1679,
        3983, 0,    227,  1530, 0,    1289, 0,    0,    0,    0,    0,    1336, 0,    0,    0,    2761,
        0,    406,  1281, 0,    973,  964,  3248, 2035, 0,    975,  0,    0,    533,  0,    3463, 335,
        0,    1100, 0,    1073, 251,  0,    0,    0,    2464, 1000, 0,    0,    0,    104,  895,  0,
        1666, 0,    0,    0,    1270, 3914, 2011, 0,    703,  1034, 0,    366,  1636, 1207, 2593, 3672,
        2186, 0,    1738, 2114, 387,  658,  447,  2663, 1033, 1192, 2079, 0,    1616, 1369, 3104, 779,
        0,    1196, 2496, 0,    2222, 2434, 2470, 1268, 0,    1953, 1294, 1572, 0,    0,    1493, 2890,
        2519, 0,    2837, 0,    3485, 0,    0,    1420, 3939, 1033, 2620, 491,  0,    0,    0,    0,
        1415, 0,    1495, 2516, 0,    269,  0,    3303, 2411, 2282, 3753, 2209, 534,  0,    1027, 0,
        324,  1742, 2081, 0,    1899, 0,    13,   3115, 4005, 0,    0,    382,  0,    3892, 3407, 0,
        3885, 1783, 0,    1328, 1643, 1528, 2260, 483,  0,    417,  3101, 0,    0,    2492, 286,  383,
        0,    188,  0,    0,    0,    3776, 0,    1016, 932,  1041, 2095, 0,    3696, 0,    0,    0,
        0,    1918, 0,    1713, 0,    1970, 1691, 3397, 1531, 0,    1638, 0,    0,    593,  0,    1337,
        239,  2292, 0,    2173, 485,  947,  3952, 346,  776,  0,    0,    580,  829,  1353, 0,    3180,
        0,    3448, 728,  2326, 0,    0,    0,    1578, 3997, 0,    1329, 2092, 2354, 1652, 0,    0,
        0,    2175, 679,  493,  3813, 0,    3460, 3525, 1072, 0,    1490, 1926, 1897, 1815, 1838, 1,
        0,    692,  0,    1116, 0,    0,    0,    0,    0,    0,    0,    0,    655,  3199, 0,    0,
        17,   1089, 0,    718,  1085, 237,  3826, 0,    2005, 0,    0,    775,  0,    315,  1315, 0,
        753,  1110, 0,    2443, 2031, 3187, 367,  0,    1873, 113,  63,   0,    1771, 3987, 0,    0,
        346,  113,  993,  333,  3159, 0,    1727, 2059, 1709, 1750, 3520, 0,    0,    3974, 284,  2693,
        328,  0,    1648, 2944, 1497, 399,  1572, 0,    3550, 575,  2523, 0,    3717, 1153, 0,    2857,
        2275, 191,  1588, 0,    1736, 2904, 597,  0,    0,    192,  2300, 0,    0,    511,  136,  0,
        0,    3709, 2729, 0,    3529, 3580, 183,  0,    0,    828,  0,    2737, 820,  0,    1608, 0,
        0,    0,    2769, 2752, 817,  1290, 1903, 180,  785,  633,  0,    2229, 0,    3586, 1269, 0,
        2004, 36,   1568, 0,    341,  0,    0,    0,    0,    846,  0,    1843, 1380, 11,   0,    1057,
        0,    885,  176,  587,  1874, 2328, 0,    1030, 3391, 2073, 686,  0,    0,    339,  1897, 39,
        0,    3124, 0,    0,    0,    0,    721,  2384, 0,    0,    455,  0,    0,    0,    0,    692,
        3600, 3420, 1022, 1288, 533,  0,    1624, 3401, 0,    0,    0,    0,    3480, 3777, 0,    1595,
        0,    0,    2035, 0,    805,  275,  1324, 3571, 3003, 0,    842,  786,  692,  3251, 2871, 1938,
        885,  0,    1584, 0,    0,    272,  0,    2096, 204,  1022, 1615, 1443, 0,    1013, 0,    3531,
        1224, 1518, 630,  2755, 1542, 717,  0,    0,    0,    764,  3510, 0,    19,   0,    346,  57,
        3972, 2515, 3978, 0,    265,  3235, 906,  0,    0,    3443, 10,   0,    254,  3965, 742,  2045,
        0,    937,  0,    0,    1377, 3011, 893,  1229, 0,    568,  61,   0,    1987, 2037, 633,  737,
        3203, 0,    2364, 2826, 0,    549,  508,  3905, 1678, 1869, 0,    0,    1228, 1525, 0,    0,
        0,    574,  3877, 975,  0,    949,  1268, 3875, 95,   0,    2139, 0,    161,  944,  0,    1479,
        2573, 3230, 659,  2553, 94,   3097, 2007, 1949, 1802, 0,    3378, 0,    0,    1755, 1573, 0,
        390,  2281, 0,    3730, 1315, 2037, 613,  0,    1351, 566,  3836, 1519, 1298, 415,  1041, 213,
        2271, 0,    954,  0,    1090, 0,    0,    74,   1335, 3453, 2627, 0,    1597, 3455, 2134, 2468,
        1708, 913,  0,    1120, 1460, 0,    2262, 3951, 0,    1199, 3928, 3087, 1460, 0,    1890, 0,
        1344, 3294, 1368, 1287, 3653, 0,    1760, 0,    172,  0,    1420, 0,    0,    220,  977,  1089,
        3790, 405,  0,    2450, 3821, 0,    0,    0,    2624, 0,    3245, 589,  1501, 0,    1932, 0,
        3762, 1679, 12};
    
    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 %= 4019;
        }
        return mangledkG[sum];
    }
    
    int MangledPerfectHash(const char *key)
    {
        if (strlen(key) > 37)
            return 0;
    
        return (MangledHashG(key, mangledkT1) + MangledHashG(key, mangledkT2)) % 4019;
    }
    
    constexpr int unmangledkT1[] = {300, 235, 154, 260, 346, 345, 249, 45, 233, 222, 304, 137, 74,
                                    372, 57,  44,  310, 11,  4,   182, 54, 39,  71,  306, 218, 339};
    constexpr int unmangledkT2[] = {216, 37,  310, 175, 220, 134, 156, 16, 193, 203, 314, 328, 103,
                                    366, 369, 30,  281, 104, 218, 234, 80, 211, 111, 56,  366, 234};
    constexpr int unmangledkG[]  = {
        0,   0,   0,   0,   72,  0,   0,   0,   0,   211, 0,   0,   344, 47,  28,  0,   250, 0,   0,
        0,   0,   0,   0,   0,   161, 0,   0,   0,   16,  361, 0,   345, 0,   164, 0,   0,   82,  0,
        240, 34,  0,   79,  0,   0,   0,   54,  0,   0,   0,   230, 0,   156, 132, 0,   200, 0,   0,
        0,   213, 320, 1,   0,   330, 0,   0,   270, 0,   161, 0,   165, 0,   0,   0,   0,   99,  0,
        58,  0,   0,   250, 314, 0,   0,   194, 378, 41,  14,  362, 0,   0,   0,   0,   0,   160, 0,
        0,   273, 95,  326, 0,   85,  255, 0,   0,   145, 0,   0,   0,   0,   0,   326, 152, 97,  0,
        0,   349, 0,   371, 0,   240, 0,   0,   0,   0,   57,  0,   0,   345, 0,   140, 43,  120, 0,
        0,   89,  0,   0,   172, 0,   0,   0,   191, 72,  68,  333, 0,   214, 93,  0,   19,  0,   82,
        13,  0,   0,   321, 0,   164, 147, 140, 284, 355, 122, 42,  76,  107, 379, 248, 0,   132, 0,
        111, 23,  0,   0,   44,  0,   72,  0,   0,   0,   56,  0,   0,   116, 146, 125, 74,  173, 0,
        159, 338, 237, 0,   0,   118, 76,  16,  0,   170, 34,  227, 52,  14,  357, 32,  304, 196, 0,
        0,   0,   13,  0,   0,   0,   0,   189, 0,   96,  164, 0,   4,   170, 99,  37,  56,  8,   269,
        0,   0,   0,   138, 0,   0,   0,   22,  0,   55,  103, 167, 146, 0,   330, 152, 65,  94,  0,
        100, 0,   285, 365, 213, 87,  0,   176, 0,   0,   0,   0,   0,   95,  0,   238, 64,  104, 0,
        4,   268, 276, 27,  0,   0,   159, 102, 0,   298, 0,   0,   66,  0,   0,   240, 0,   377, 33,
        166, 124, 0,   351, 0,   0,   233, 0,   45,  0,   189, 83,  143, 315, 336, 0,   319, 225, 0,
        330, 157, 0,   333, 0,   0,   12,  183, 73,  0,   6,   0,   271, 0,   289, 295, 0,   135, 0,
        21,  286, 49,  9,   182, 0,   315, 136, 0,   120, 0,   0,   0,   0,   53,  271, 29,  0,   65,
        15,  257, 122, 259, 0,   39,  0,   133, 222, 0,   29,  24,  157, 0,   40,  83,  105, 0,   0,
        59,  0,   244, 381, 32,  0,   12,  151, 143, 98,  21,  295, 0,   0,   147, 0,   334, 358, 225,
        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 %= 382;
        }
        return unmangledkG[sum];
    }
    
    int UnmangledPerfectHash(const char *key)
    {
        if (strlen(key) > 26)
            return 0;
    
        return (UnmangledHashG(key, unmangledkT1) + UnmangledHashG(key, unmangledkT2)) % 382;
    }
    
    }  // 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