~mmach/netext73/webkit2gtk

« back to all changes in this revision

Viewing changes to Source/ThirdParty/ANGLE/src/compiler/translator/ImmutableString_autogen.cpp

  • Committer: mmach
  • Date: 2023-06-16 17:21:37 UTC
  • Revision ID: netbit73@gmail.com-20230616172137-2rqx6yr96ga9g3kp
1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// GENERATED FILE - DO NOT EDIT.
 
2
// Generated by gen_builtin_symbols.py using data from builtin_variables.json and
 
3
// builtin_function_declarations.txt.
 
4
//
 
5
// Copyright 2020 The ANGLE Project Authors. All rights reserved.
 
6
// Use of this source code is governed by a BSD-style license that can be
 
7
// found in the LICENSE file.
 
8
//
 
9
// ImmutableString_autogen.cpp: Wrapper for static or pool allocated char arrays, that are
 
10
// guaranteed to be valid and unchanged for the duration of the compilation. Implements
 
11
// mangledNameHash using perfect hash function from gen_builtin_symbols.py
 
12
 
 
13
#include "compiler/translator/ImmutableString.h"
 
14
 
 
15
std::ostream &operator<<(std::ostream &os, const sh::ImmutableString &str)
 
16
{
 
17
    return os.write(str.data(), str.length());
 
18
}
 
19
 
 
20
#if defined(_MSC_VER)
 
21
#    pragma warning(disable : 4309)  // truncation of constant value
 
22
#endif
 
23
 
 
24
namespace
 
25
{
 
26
 
 
27
constexpr int mangledkT1[] = {28,   3723, 1475, 371,  51,   3462, 1683, 2358, 3960, 3760,
 
28
                              2533, 2942, 2587, 1686, 466,  832,  1198, 860,  3747, 824,
 
29
                              946,  743,  1301, 3888, 1189, 1813, 3864, 248,  3590, 3448,
 
30
                              1379, 196,  1988, 2577, 1764, 270,  376};
 
31
constexpr int mangledkT2[] = {2798, 3904, 2564, 1178, 3278, 628,  2610, 1987, 3024, 1954,
 
32
                              2499, 12,   3392, 2914, 794,  3806, 3980, 2527, 3362, 3980,
 
33
                              1226, 3423, 713,  1825, 1062, 1687, 1758, 3010, 2151, 2612,
 
34
                              1189, 1755, 1372, 2634, 1830, 448,  2730};
 
35
constexpr int mangledkG[]  = {
 
36
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
37
    639,  0,    0,    0,    3989, 0,    1769, 0,    634,  1890, 0,    0,    0,    145,  0,    0,
 
38
    0,    0,    3626, 0,    0,    0,    0,    0,    2169, 0,    0,    0,    0,    1101, 0,    0,
 
39
    0,    0,    0,    0,    0,    2836, 0,    391,  0,    0,    0,    0,    0,    0,    0,    0,
 
40
    0,    0,    3962, 0,    0,    0,    2256, 1708, 0,    594,  0,    0,    0,    0,    0,    557,
 
41
    0,    0,    1169, 825,  3786, 0,    0,    1963, 0,    0,    0,    0,    0,    0,    0,    0,
 
42
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    3407, 0,
 
43
    2374, 0,    0,    0,    0,    0,    3517, 1263, 0,    0,    1281, 989,  3862, 3496, 1810, 0,
 
44
    3143, 0,    0,    0,    3285, 3588, 0,    0,    0,    0,    3089, 0,    1239, 553,  3392, 0,
 
45
    2301, 0,    0,    0,    0,    0,    0,    0,    0,    3748, 0,    0,    0,    2584, 1570, 0,
 
46
    1139, 0,    1034, 0,    0,    0,    0,    1335, 0,    1435, 0,    3637, 0,    0,    0,    58,
 
47
    3114, 0,    0,    0,    2043, 0,    3169, 466,  0,    495,  3598, 0,    0,    0,    0,    3506,
 
48
    4016, 0,    0,    0,    2056, 0,    303,  3319, 0,    0,    818,  1325, 0,    0,    0,    0,
 
49
    3622, 0,    0,    189,  3689, 0,    1735, 0,    0,    804,  0,    0,    0,    0,    3379, 0,
 
50
    1371, 0,    3740, 0,    0,    0,    3495, 0,    0,    0,    409,  0,    0,    0,    2608, 0,
 
51
    1229, 722,  0,    1558, 1391, 3823, 0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
52
    0,    3291, 1392, 0,    0,    228,  0,    0,    0,    0,    0,    0,    0,    0,    308,  0,
 
53
    0,    0,    0,    0,    2436, 0,    0,    0,    743,  3009, 0,    642,  0,    0,    1176, 0,
 
54
    0,    0,    1766, 0,    0,    0,    0,    0,    0,    0,    0,    287,  0,    0,    0,    0,
 
55
    3422, 3236, 3990, 0,    0,    1347, 0,    0,    0,    832,  3240, 3588, 0,    0,    0,    0,
 
56
    3033, 0,    0,    1365, 0,    0,    0,    0,    173,  3964, 0,    0,    0,    3589, 0,    0,
 
57
    0,    3240, 332,  0,    1714, 3598, 2481, 0,    0,    0,    99,   0,    0,    0,    2221, 0,
 
58
    3696, 0,    1195, 3618, 2753, 1278, 3651, 0,    0,    0,    3229, 0,    745,  0,    0,    1840,
 
59
    0,    0,    1881, 0,    0,    0,    616,  0,    561,  3158, 1367, 0,    0,    0,    571,  416,
 
60
    0,    0,    340,  3425, 1686, 286,  0,    3988, 2657, 0,    391,  280,  0,    0,    0,    0,
 
61
    1019, 0,    0,    0,    0,    3375, 0,    0,    0,    2450, 0,    0,    776,  0,    2748, 0,
 
62
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    236,  0,    1143, 0,
 
63
    0,    0,    0,    0,    2585, 3511, 0,    311,  0,    442,  0,    0,    0,    0,    1494, 0,
 
64
    0,    0,    0,    0,    3472, 0,    0,    719,  2609, 0,    0,    0,    2108, 2572, 0,    928,
 
65
    2589, 0,    168,  59,   3360, 3743, 502,  0,    2702, 1842, 0,    0,    0,    553,  1072, 2774,
 
66
    1330, 1355, 1713, 0,    231,  855,  1471, 0,    129,  0,    3926, 0,    3734, 0,    0,    0,
 
67
    0,    0,    0,    0,    0,    0,    3430, 0,    269,  2404, 0,    0,    0,    656,  0,    687,
 
68
    360,  2159, 1443, 0,    1863, 0,    0,    0,    0,    0,    1185, 0,    390,  0,    0,    2571,
 
69
    1704, 452,  1997, 0,    3368, 0,    0,    2868, 0,    0,    0,    0,    843,  1996, 477,  0,
 
70
    3539, 1077, 3406, 0,    0,    544,  0,    780,  0,    0,    0,    0,    0,    0,    3816, 617,
 
71
    0,    0,    0,    0,    706,  0,    0,    3204, 0,    462,  0,    0,    701,  3672, 0,    637,
 
72
    0,    0,    3916, 0,    0,    0,    535,  0,    35,   1910, 0,    1463, 619,  0,    1041, 0,
 
73
    0,    0,    0,    0,    3359, 0,    2912, 0,    0,    0,    1118, 0,    2513, 943,  0,    0,
 
74
    79,   0,    0,    0,    3387, 0,    3520, 1663, 0,    0,    0,    3688, 0,    0,    0,    0,
 
75
    3911, 1979, 0,    445,  0,    0,    847,  0,    0,    0,    0,    761,  491,  3991, 185,  0,
 
76
    0,    2133, 0,    3499, 0,    0,    0,    0,    1014, 0,    1715, 0,    483,  0,    2580, 0,
 
77
    0,    0,    2724, 0,    0,    0,    837,  1300, 0,    0,    0,    0,    0,    0,    0,    0,
 
78
    0,    0,    3746, 0,    0,    1613, 3425, 3798, 845,  0,    0,    1921, 0,    0,    0,    0,
 
79
    0,    2589, 3176, 1202, 0,    62,   3823, 4019, 3057, 0,    2992, 2406, 2078, 524,  0,    286,
 
80
    768,  0,    0,    0,    0,    0,    0,    0,    380,  0,    0,    312,  2297, 0,    3737, 0,
 
81
    0,    0,    3915, 0,    3185, 2581, 399,  0,    0,    1023, 3133, 2633, 85,   0,    2367, 0,
 
82
    0,    1657, 0,    0,    1075, 0,    1061, 3206, 0,    3974, 3515, 0,    1056, 0,    0,    0,
 
83
    0,    1204, 0,    3000, 453,  0,    967,  0,    0,    726,  0,    0,    2783, 0,    0,    75,
 
84
    0,    0,    0,    3789, 14,   0,    2026, 2458, 3987, 2971, 0,    0,    1236, 3751, 0,    0,
 
85
    0,    3143, 3506, 0,    115,  3261, 0,    1473, 996,  1203, 1625, 3678, 0,    3327, 2648, 0,
 
86
    0,    0,    1830, 3346, 0,    0,    0,    0,    0,    0,    0,    0,    0,    3794, 734,  0,
 
87
    395,  0,    2327, 0,    389,  0,    0,    0,    2024, 0,    0,    0,    439,  0,    0,    0,
 
88
    699,  154,  3658, 0,    3555, 0,    0,    0,    3248, 0,    1783, 3,    0,    0,    0,    1721,
 
89
    913,  58,   0,    3508, 0,    0,    0,    0,    0,    3651, 0,    1914, 0,    0,    0,    1176,
 
90
    0,    0,    2994, 723,  3523, 0,    3619, 0,    500,  0,    2073, 0,    0,    0,    2883, 0,
 
91
    0,    0,    2713, 0,    0,    0,    3322, 0,    0,    3167, 0,    0,    0,    2981, 0,    0,
 
92
    0,    188,  0,    768,  0,    0,    537,  0,    3180, 2744, 222,  0,    0,    0,    0,    0,
 
93
    268,  0,    618,  489,  664,  1437, 3201, 0,    0,    3166, 720,  0,    0,    0,    3125, 797,
 
94
    0,    3427, 0,    0,    1697, 1760, 3215, 1007, 557,  4005, 3545, 41,   0,    0,    0,    1027,
 
95
    0,    0,    346,  3645, 0,    1686, 0,    0,    2761, 967,  0,    3673, 0,    2700, 3365, 322,
 
96
    2043, 2449, 3552, 0,    665,  658,  1131, 1526, 938,  0,    3002, 0,    0,    0,    0,    0,
 
97
    3204, 0,    927,  131,  2262, 1069, 0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
98
    0,    1073, 0,    0,    0,    1128, 3127, 606,  0,    1095, 2066, 0,    0,    0,    0,    3707,
 
99
    370,  0,    0,    0,    0,    0,    0,    0,    1404, 1451, 0,    2882, 2569, 2081, 0,    162,
 
100
    2918, 45,   0,    1175, 399,  0,    909,  1953, 0,    0,    528,  0,    0,    1133, 0,    0,
 
101
    0,    3194, 3323, 3206, 2011, 0,    3918, 0,    0,    1787, 0,    0,    873,  0,    0,    3693,
 
102
    0,    1983, 1079, 0,    0,    1862, 0,    0,    1621, 0,    2582, 0,    349,  0,    0,    3230,
 
103
    1718, 0,    2553, 0,    507,  1543, 3773, 0,    0,    2090, 919,  0,    1466, 0,    0,    1953,
 
104
    0,    0,    0,    1709, 0,    0,    0,    1155, 1946, 0,    172,  0,    1670, 0,    0,    3933,
 
105
    3274, 180,  510,  3384, 0,    1191, 0,    0,    0,    1140, 3400, 1716, 0,    3703, 0,    0,
 
106
    0,    0,    229,  0,    142,  0,    3459, 0,    0,    0,    0,    1036, 0,    1537, 0,    0,
 
107
    0,    852,  34,   0,    0,    3691, 3536, 2301, 625,  1300, 0,    506,  660,  2455, 0,    4018,
 
108
    1901, 1275, 0,    999,  1668, 1222, 0,    1220, 1905, 640,  669,  0,    0,    1157, 0,    2267,
 
109
    0,    3032, 0,    3875, 0,    0,    757,  2063, 452,  0,    3812, 0,    1387, 0,    0,    316,
 
110
    331,  257,  0,    0,    0,    0,    1647, 0,    0,    3829, 304,  3164, 409,  1777, 0,    0,
 
111
    0,    0,    1472, 0,    0,    0,    0,    1024, 0,    2852, 0,    0,    0,    0,    0,    0,
 
112
    1337, 524,  0,    1278, 953,  199,  1077, 3940, 0,    128,  2827, 3711, 0,    2401, 33,   0,
 
113
    0,    2638, 1153, 1652, 2102, 1568, 580,  0,    3673, 2338, 0,    3514, 3335, 1898, 735,  0,
 
114
    0,    0,    730,  0,    1417, 2484, 282,  0,    0,    0,    0,    0,    0,    1940, 0,    0,
 
115
    1501, 1824, 0,    1689, 0,    0,    1,    659,  0,    713,  0,    3884, 0,    3954, 0,    0,
 
116
    3805, 0,    0,    340,  0,    2925, 0,    3874, 3525, 168,  0,    0,    1259, 0,    0,    0,
 
117
    772,  878,  695,  0,    1385, 1331, 0,    0,    0,    0,    0,    0,    2945, 1455, 886,  620,
 
118
    1992, 0,    0,    0,    474,  0,    3408, 0,    0,    0,    0,    0,    2544, 81,   0,    0,
 
119
    0,    2694, 0,    0,    0,    0,    0,    0,    23,   0,    0,    1487, 1305, 1609, 0,    0,
 
120
    0,    2720, 670,  468,  0,    0,    2669, 775,  596,  2518, 240,  3417, 581,  1629, 2339, 1773,
 
121
    3228, 0,    3507, 0,    230,  0,    352,  0,    1551, 0,    0,    683,  2302, 0,    364,  1638,
 
122
    0,    2956, 244,  0,    496,  3113, 0,    0,    0,    0,    1951, 0,    623,  0,    4020, 1321,
 
123
    0,    0,    0,    0,    1996, 958,  0,    1546, 1868, 0,    1190, 0,    3783, 0,    3032, 0,
 
124
    1695, 0,    0,    0,    0,    0,    0,    2075, 0,    0,    0,    0,    2868, 2044, 0,    0,
 
125
    2469, 0,    3864, 0,    2981, 0,    3018, 0,    3492, 0,    3670, 0,    2655, 0,    0,    122,
 
126
    0,    0,    532,  0,    635,  1835, 3904, 0,    0,    0,    3026, 3431, 0,    0,    471,  1132,
 
127
    1155, 1948, 1799, 1141, 2432, 0,    0,    0,    2077, 0,    1321, 0,    963,  0,    0,    1885,
 
128
    0,    17,   0,    0,    1618, 376,  230,  3350, 492,  2179, 0,    1267, 1652, 2937, 721,  2035,
 
129
    2882, 0,    0,    0,    1826, 1123, 0,    1099, 0,    150,  1088, 758,  0,    3285, 0,    0,
 
130
    115,  0,    1895, 0,    1468, 0,    0,    0,    388,  0,    0,    0,    1627, 0,    3686, 3560,
 
131
    214,  0,    0,    0,    0,    0,    3022, 784,  0,    0,    0,    2694, 0,    0,    3024, 0,
 
132
    0,    0,    0,    0,    0,    1871, 330,  0,    0,    0,    123,  0,    333,  0,    2609, 0,
 
133
    742,  0,    1375, 0,    143,  1186, 191,  0,    705,  0,    215,  1871, 0,    0,    1039, 2943,
 
134
    345,  1685, 0,    0,    2887, 0,    0,    0,    364,  0,    833,  1317, 0,    468,  3159, 0,
 
135
    3318, 0,    0,    1207, 3879, 1740, 0,    2986, 0,    246,  2514, 0,    0,    0,    0,    0,
 
136
    0,    0,    991,  0,    1381, 0,    1622, 1590, 345,  0,    0,    728,  0,    0,    771,  0,
 
137
    0,    0,    583,  244,  2133, 0,    0,    0,    1918, 0,    0,    1361, 1676, 1042, 0,    0,
 
138
    0,    1924, 2454, 1357, 0,    482,  605,  0,    0,    0,    0,    666,  530,  0,    2388, 0,
 
139
    680,  350,  22,   502,  1177, 3063, 0,    2804, 435,  0,    0,    0,    372,  0,    0,    1602,
 
140
    302,  0,    3456, 0,    0,    1586, 947,  2828, 0,    3397, 101,  940,  0,    2546, 0,    320,
 
141
    0,    2286, 1359, 0,    924,  754,  1792, 0,    0,    3472, 0,    666,  925,  2824, 274,  0,
 
142
    262,  1304, 2526, 839,  1295, 0,    1830, 0,    1638, 88,   421,  0,    440,  413,  327,  0,
 
143
    0,    898,  0,    2271, 1435, 0,    3651, 0,    2233, 714,  1329, 458,  544,  1603, 0,    0,
 
144
    3180, 0,    0,    2276, 0,    280,  0,    0,    2982, 998,  0,    643,  1322, 2325, 2296, 0,
 
145
    0,    0,    1860, 0,    0,    0,    0,    0,    0,    404,  0,    999,  1751, 1388, 0,    570,
 
146
    1268, 0,    3843, 0,    0,    1019, 2163, 3488, 0,    0,    0,    0,    2365, 0,    46,   3092,
 
147
    3446, 0,    373,  1059, 0,    1549, 2039, 0,    3466, 0,    1657, 0,    1178, 0,    888,  0,
 
148
    1500, 442,  0,    0,    2087, 0,    0,    0,    2065, 1097, 0,    0,    2438, 0,    585,  387,
 
149
    1631, 184,  0,    0,    293,  3954, 0,    1047, 1526, 0,    0,    0,    0,    2000, 0,    2775,
 
150
    0,    1642, 235,  3671, 1727, 715,  3762, 2015, 0,    991,  0,    427,  0,    0,    0,    0,
 
151
    0,    3002, 0,    844,  0,    0,    0,    217,  3686, 3249, 3741, 0,    1763, 0,    0,    0,
 
152
    332,  2793, 2468, 3530, 826,  0,    0,    0,    0,    1873, 0,    0,    0,    3375, 909,  0,
 
153
    1656, 854,  0,    0,    3326, 854,  71,   3695, 188,  1502, 0,    0,    827,  0,    0,    0,
 
154
    0,    3489, 3969, 1537, 0,    0,    602,  0,    0,    751,  3016, 0,    0,    0,    0,    0,
 
155
    7,    3902, 1764, 3674, 0,    3507, 3007, 0,    0,    2302, 3079, 1995, 947,  3503, 3352, 1242,
 
156
    0,    1504, 1205, 0,    0,    3631, 0,    984,  1490, 0,    0,    1471, 3727, 1306, 1051, 3583,
 
157
    74,   0,    82,   2206, 3322, 0,    0,    304,  1905, 0,    2365, 2984, 3200, 1636, 1137, 2851,
 
158
    0,    795,  0,    685,  0,    3407, 647,  0,    1053, 0,    3202, 0,    1385, 734,  1996, 834,
 
159
    2557, 574,  996,  1392, 0,    0,    1985, 324,  0,    2615, 0,    507,  817,  195,  0,    0,
 
160
    0,    2626, 0,    1150, 0,    0,    743,  0,    775,  0,    615,  3188, 863,  0,    1451, 0,
 
161
    3296, 0,    1133, 0,    579,  1174, 736,  2205, 1151, 1716, 0,    1965, 0,    0,    176,  1428,
 
162
    774,  1146, 2880, 0,    0,    0,    839,  806,  0,    0,    0,    0,    456,  1578, 0,    0,
 
163
    3023, 0,    0,    816,  2369, 1826, 0,    0,    3522, 0,    2551, 0,    1172, 59,   1000, 0,
 
164
    783,  2193, 127,  481,  0,    0,    0,    0,    326,  792,  3825, 221,  0,    904,  3019, 408,
 
165
    1600, 0,    2395, 0,    0,    0,    2701, 2301, 3013, 2166, 2673, 3171, 0,    0,    0,    0,
 
166
    0,    1763, 0,    0,    0,    761,  912,  1845, 0,    0,    1362, 549,  0,    989,  3912, 0,
 
167
    602,  730,  0,    1613, 0,    2662, 31,   86,   232,  0,    0,    0,    0,    1387, 0,    0,
 
168
    874,  1908, 2056, 0,    897,  0,    0,    0,    1731, 2716, 971,  0,    1593, 498,  2647, 653,
 
169
    0,    1440, 434,  0,    2713, 356,  3433, 0,    0,    0,    710,  3218, 3047, 1875, 1393, 1474,
 
170
    0,    887,  2026, 1053, 2094, 0,    0,    0,    0,    0,    0,    0,    1873, 0,    1859, 928,
 
171
    0,    0,    293,  1882, 0,    0,    1493, 2847, 0,    0,    2415, 0,    316,  2267, 837,  0,
 
172
    561,  658,  3319, 2655, 1238, 2192, 123,  0,    1330, 1203, 0,    0,    3025, 1288, 2260, 770,
 
173
    0,    3534, 767,  2854, 0,    1907, 1771, 0,    0,    3029, 1421, 0,    3463, 0,    0,    727,
 
174
    1310, 3422, 1236, 745,  1397, 3497, 504,  1194, 3248, 861,  2535, 0,    1634, 0,    0,    1812,
 
175
    2973, 0,    2372, 0,    0,    0,    0,    0,    3940, 1210, 0,    0,    0,    1512, 0,    0,
 
176
    1607, 899,  0,    3590, 0,    0,    0,    0,    0,    102,  0,    0,    1702, 3513, 1211, 1746,
 
177
    222,  2894, 631,  0,    0,    3317, 0,    0,    1525, 2109, 3766, 1233, 0,    233,  1538, 1661,
 
178
    898,  2825, 0,    0,    941,  0,    0,    0,    516,  0,    611,  0,    0,    859,  0,    1001,
 
179
    2597, 0,    0,    0,    0,    1688, 0,    0,    0,    0,    1076, 0,    3326, 894,  74,   444,
 
180
    3779, 1995, 3249, 113,  3998, 0,    0,    604,  0,    0,    1077, 1516, 1750, 1302, 0,    3676,
 
181
    0,    0,    0,    0,    1097, 0,    1098, 2570, 1489, 0,    2960, 0,    3767, 323,  0,    1580,
 
182
    1382, 0,    0,    2195, 0,    0,    2225, 1268, 1815, 0,    192,  0,    0,    0,    2183, 290,
 
183
    359,  0,    2946, 0,    1584, 288,  2338, 0,    1893, 1619, 0,    1516, 415,  0,    0,    0,
 
184
    0,    3375, 836,  1220, 0,    0,    3968, 0,    0,    0,    1112, 1984, 467,  2890, 0,    0,
 
185
    2006, 3484, 0,    2187, 1682, 371,  2264, 3088, 924,  985,  0,    0,    0,    1035, 147,  3525,
 
186
    250,  2598, 128,  1110, 2120, 0,    3091, 0,    0,    0,    0,    0,    400,  574,  0,    477,
 
187
    0,    0,    3820, 0,    3832, 2194, 475,  2732, 0,    0,    941,  0,    0,    1975, 0,    0,
 
188
    0,    2021, 0,    0,    1951, 1427, 870,  1516, 588,  2952, 3441, 0,    496,  0,    782,  0,
 
189
    692,  3,    866,  1136, 313,  672,  0,    1262, 3262, 2669, 0,    716,  994,  0,    1449, 1588,
 
190
    0,    0,    0,    0,    171,  1094, 0,    633,  3489, 595,  2117, 0,    1797, 1676, 808,  0,
 
191
    0,    0,    0,    1260, 0,    0,    1533, 0,    3734, 3356, 344,  748,  0,    3317, 1804, 0,
 
192
    1374, 0,    1523, 3383, 1050, 429,  2565, 1047, 2193, 0,    1380, 2517, 3143, 514,  0,    0,
 
193
    3999, 2604, 0,    3399, 2080, 0,    0,    1567, 0,    1691, 763,  0,    2130, 2674, 0,    1229,
 
194
    0,    0,    0,    1333, 0,    1847, 0,    0,    1111, 0,    0,    141,  3630, 0,    0,    1838,
 
195
    1839, 0,    2905, 2380, 0,    874,  0,    2307, 0,    0,    906,  0,    1080, 0,    119,  1876,
 
196
    3868, 0,    0,    0,    1000, 499,  0,    0,    55,   781,  3828, 0,    0,    2079, 1177, 2365,
 
197
    0,    0,    239,  2310, 72,   644,  884,  2436, 8,    1466, 1377, 135,  1383, 0,    737,  0,
 
198
    0,    0,    3843, 3767, 0,    703,  1737, 1676, 732,  2077, 0,    0,    1420, 910,  1148, 295,
 
199
    3553, 884,  0,    1496, 1919, 1201, 0,    0,    385,  1385, 857,  2422, 805,  0,    3311, 419,
 
200
    3122, 1191, 0,    1632, 1964, 1231, 0,    0,    1427, 0,    0,    1196, 1829, 1486, 211,  0,
 
201
    1434, 0,    0,    0,    1024, 0,    0,    0,    0,    2012, 0,    2838, 1788, 2981, 0,    2644,
 
202
    0,    554,  3956, 592,  165,  2866, 0,    0,    161,  0,    0,    4020, 1663, 0,    0,    0,
 
203
    0,    222,  0,    2281, 901,  0,    3955, 1208, 1130, 197,  1913, 0,    24,   3783, 0,    0,
 
204
    1069, 0,    974,  0,    2754, 0,    1182, 0,    661,  3477, 2007, 0,    2882, 0,    643,  3412,
 
205
    0,    3698, 0,    782,  3085, 30,   0,    0,    2020, 925,  0,    460,  521,  472,  0,    276,
 
206
    892,  0,    0,    1112, 477,  0,    1241, 0,    834,  3832, 0,    0,    1170, 0,    0,    964,
 
207
    4013, 2536, 0,    793,  43,   3455, 869,  0,    2271, 2775, 2780, 0,    1570, 0,    1793, 1562,
 
208
    3715, 0,    3316, 488,  3666, 3126, 773,  913,  2188, 1999, 0,    207,  3621, 2074, 1338, 3773,
 
209
    2038, 1047, 538,  0,    0,    3302, 3342, 1244, 0,    0,    0,    0,    292,  0,    3159, 0,
 
210
    1359, 942,  0,    0,    0,    1343, 0,    0,    1814, 1015, 0,    1271, 1971, 0,    0,    3671,
 
211
    0,    0,    0,    0,    0,    0,    1059, 0,    0,    3156, 2039, 0,    1187, 0,    0,    3534,
 
212
    1123, 3522, 1498, 2434, 2894, 1810, 1523, 711,  467,  0,    0,    0,    3191, 1639, 2043, 1604,
 
213
    760,  2138, 0,    1852, 0,    0,    2676, 3705, 2571, 0,    3545, 1671, 1802, 0,    0,    704,
 
214
    0,    0,    0,    692,  61,   0,    310,  3856, 2564, 565,  0,    0,    504,  1251, 2170, 3452,
 
215
    3396, 3101, 566,  213,  2406, 3646, 3744, 1817, 0,    1087, 0,    3900, 2071, 0,    337,  679,
 
216
    1624, 923,  0,    0,    0,    3192, 1419, 0,    2963, 0,    0,    342,  3253, 0,    1694, 1556,
 
217
    1296, 0,    0,    0,    2498, 1160, 824,  1610, 0,    0,    0,    275,  0,    3964, 3032, 2090,
 
218
    1319, 2833, 556,  1313, 0,    2045, 3841, 0,    2825, 1572, 1903, 465,  0,    0,    0,    2292,
 
219
    0,    0,    706,  0,    1258, 0,    0,    0,    1666, 113,  361,  1062, 0,    0,    0,    2078,
 
220
    350,  683,  120,  0,    0,    0,    0,    1571, 0,    0,    0,    1223, 0,    970,  3641, 0,
 
221
    0,    0,    0,    0,    651,  79,   3953, 0,    0,    0,    3176, 0,    1888, 3999, 1370, 0,
 
222
    3115, 0,    1478, 1733, 0,    143,  2020, 0,    1784, 0,    3804, 0,    0,    0,    2497, 0,
 
223
    0,    3758, 0,    1974, 0,    0,    0,    988,  827,  0,    1221, 1581, 0,    1697, 3718, 0,
 
224
    0,    0,    0,    3462, 1777, 0,    0,    0,    3747, 459,  492,  0,    0,    0,    3515, 0,
 
225
    2754, 3266, 3651, 0,    3440, 0,    194,  1151, 2823, 0,    1169, 1823, 2888, 0,    1396, 0,
 
226
    3110, 3416, 783,  919,  135,  0,    0,    0,    173,  0,    0,    0,    1623, 235,  3170, 2701,
 
227
    2767, 3232, 117,  3821, 0,    0,    3167, 0,    1627, 0,    0,    1899, 299,  0,    0,    0,
 
228
    0,    3903, 1125, 0,    211,  2381, 3281, 3245, 1986, 0,    0,    0,    1434, 1480, 1937, 751,
 
229
    1813, 3941, 3132, 3627, 239,  129,  545,  0,    2299, 3244, 932,  0,    1287, 1888, 3139, 1881,
 
230
    3259, 0,    183,  207,  0,    578,  1498, 0,    0,    282,  2237, 959,  1558, 1824, 0,    0,
 
231
    0,    0,    2725, 2136, 359,  0,    1228, 0,    1232, 0,    712,  3543, 3420, 0,    0,    0,
 
232
    2148, 0,    0,    16,   0,    893,  3703, 0,    0,    0,    569,  2389, 914,  0,    3497, 2681,
 
233
    86,   0,    0,    0,    0,    0,    2709, 201,  1108, 1488, 2033, 3653, 102,  0,    0,    0,
 
234
    1230, 0,    509,  0,    0,    349,  414,  2385, 3932, 0,    844,  3971, 1346, 3504, 703,  1739,
 
235
    1554, 0,    0,    0,    818,  1642, 9,    1090, 2711, 1503, 542,  0,    1292, 1392, 1240, 3638,
 
236
    0,    0,    420,  518,  1358, 876,  0,    0,    1749, 4006, 1740, 3392, 1200, 0,    0,    0,
 
237
    0,    1697, 1659, 0,    1265, 276,  0,    0,    0,    0,    898,  1961, 0,    0,    0,    166,
 
238
    234,  1477, 1935, 2676, 0,    888,  3405, 2636, 1825, 1966, 1192, 161,  0,    445,  884,  0,
 
239
    1278, 0,    2604, 560,  1464, 0,    0,    2565, 2087, 460,  1889, 0,    2310, 1354, 0,    2503,
 
240
    0,    1812, 1949, 0,    0,    636,  176,  2903, 1081, 0,    0,    1156, 3930, 0,    1090, 422,
 
241
    1746, 309,  0,    474,  0,    1801, 100,  0,    18,   0,    1043, 1942, 0,    0,    36,   1969,
 
242
    1606, 1045, 1067, 869,  1391, 3768, 2285, 0,    252,  414,  0,    587,  3908, 0,    3402, 3341,
 
243
    1056, 0,    0,    0,    605,  0,    1075, 52,   2122, 0,    3998, 1017, 3265, 0,    0,    1980,
 
244
    0,    1351, 0,    940,  1715, 85,   1551, 0,    2884, 2849, 0,    1118, 0,    1515, 0,    0,
 
245
    515,  1737, 0,    1187, 1594, 1304, 0,    1080, 3888, 0,    1065, 0,    0,    0,    1479, 0,
 
246
    3477, 1690, 35,   0,    1709, 0,    3827, 566,  0,    1986, 2721, 0,    1556, 1443, 3970, 2814,
 
247
    2155, 0,    1540, 0,    3570, 3224, 0,    0,    3756, 3105, 1359, 176,  1408, 1946, 1334, 1297,
 
248
    2031, 2680, 3954, 515,  631,  2797, 726,  532,  2283, 0,    603,  0,    2053, 982,  1342, 0,
 
249
    2261, 999,  0,    1086, 0,    671,  0,    0,    1710, 0,    0,    2137, 2965, 297,  453,  2376,
 
250
    1441, 2694, 460,  1550, 3562, 3662, 3967, 740,  0,    44,   0,    0,    1158, 0,    1243, 0,
 
251
    3190, 1590, 2649, 0,    384,  0,    0,    537,  1444, 2887, 2274, 624,  3931, 562,  1129, 0,
 
252
    968,  806,  1073, 0,    0,    2426, 1526, 81,   662,  2025, 1565, 0,    0,    612,  220,  0,
 
253
    756,  0,    979,  0,    1778, 1105, 0,    3591, 3838, 0,    0,    0,    1231, 2707, 3269, 0,
 
254
    0,    0,    0,    0,    893,  0,    238,  3866, 1400, 669,  710,  0,    3593, 1800, 0,    0,
 
255
    1596, 0,    590,  1483, 0,    335,  2667, 0,    1506, 0,    751,  1656, 12,   0,    1670, 3962,
 
256
    3716, 0,    0,    199,  1026, 0,    484,  0,    0,    0,    0,    1318, 1307, 1818, 3331, 425,
 
257
    935,  205,  0,    3609, 1985, 2055, 0,    1518, 1036, 991,  1264, 3230, 879,  2781, 1466, 178,
 
258
    2969, 0,    918,  1430, 0,    0,    0,    0,    3951, 154,  156,  2405, 0,    696,  0,    0,
 
259
    1433, 0,    770,  0,    945,  1858, 0,    0,    747,  1908, 0,    1339, 0,    1267, 0,    0,
 
260
    0,    0,    0,    1070, 0,    1908, 2668, 0,    2320, 1081, 2337, 0,    0,    1303, 0,    2088,
 
261
    690,  2035, 0,    225,  1173, 0,    13,   237,  1329, 0,    536,  1432, 86,   3591, 2933, 1949,
 
262
    0,    722,  3951, 0,    0,    20,   655,  3734, 1995, 580,  0,    0,    0,    3598, 3963, 0,
 
263
    3048, 2762, 0,    3436, 3001, 3780, 995,  0,    880,  3269, 1597, 869,  0,    3329, 986,  729,
 
264
    0,    711,  0,    926,  3975, 1870, 0,    0,    1303, 312,  329,  1259, 0,    1233, 3990, 1356,
 
265
    344,  0,    3701, 0,    3902, 0,    1364, 0,    0,    0,    2051, 385,  0,    0,    2232, 0,
 
266
    0,    181,  1607, 3883, 1565, 0,    2111, 1506, 0,    0,    0,    0,    2022, 0,    3832, 0,
 
267
    3596, 0,    1945, 1957, 1805, 1482, 3996, 3426, 266,  2114, 652,  0,    407,  1835, 1499, 2095,
 
268
    1637, 1690, 2134, 0,    0,    0,    658,  1598, 2171, 0,    0,    0,    1628, 0,    365,  3169,
 
269
    245,  977,  0,    0,    0,    1101, 3365, 1626, 2555, 2041, 2816, 0,    0,    898,  1309, 2692,
 
270
    3795, 604,  594,  2840, 1930, 3968, 2128, 0,    943,  1972, 1114, 0,    119,  0,    2945, 3516,
 
271
    2200, 3310, 0,    0,    453,  2788, 1064, 0,    0,    1700, 791,  1818, 0,    123,  0,    2124,
 
272
    1031, 1645, 0,    1263, 0,    0,    1108, 0,    3436, 0,    274,  1394, 720,  0,    0,    0,
 
273
    833,  0,    0,    0,    0,    0,    3425, 1818, 1515, 0,    0,    2894, 0,    2901, 0,    1999,
 
274
    1699, 0,    2529, 1199, 2024, 0,    0,    272,  2583, 0,    2900, 3332, 2018, 820,  3395, 0,
 
275
    0,    0,    2066, 0,    1136, 3784, 3739, 345,  0,    1241, 363,  0,    0,    3584, 519,  986,
 
276
    0,    0,    1521, 0,    0,    3112, 0,    117,  0,    0,    2799, 155,  3937, 449,  3970, 79,
 
277
    0,    3989, 0,    0,    2678, 2121, 3104, 0,    0,    842,  2820, 0,    1744, 3316, 0,    1531,
 
278
    1304, 807,  0,    0,    266,  0,    3355, 0,    3301, 0,    362,  1335, 2051, 700,  0,    798,
 
279
    2449, 2927, 0,    0,    1171, 0,    1406, 2140, 980,  1208, 260,  0,    0,    0,    3867, 774,
 
280
    1993, 0,    0,    0,    298,  0,    1922, 275,  2473, 0,    112,  0,    1002, 2985, 3527, 1860,
 
281
    0,    0,    3477, 0,    2168, 0,    4014, 2355, 2489, 1669, 899,  0,    3764, 2568, 3985, 0,
 
282
    5,    1573, 0,    1654, 3474, 1507, 790,  1389, 0,    0,    301,  209,  687,  2057, 271,  1496,
 
283
    302,  0,    287,  0,    1529, 1353, 0,    0,    0,    2452, 912,  2152, 240,  0,    0,    0,
 
284
    0,    3258, 139,  1593, 2314, 0,    0,    1921, 3918, 141,  0,    1962, 1188, 0,    106,  0,
 
285
    2686, 0,    3260, 3800, 1119, 0,    2097, 2623, 3684, 0,    393,  3188, 1029, 3345, 2540, 2796,
 
286
    1458, 2377, 1349, 0,    0,    3698, 0,    1860, 521,  248,  548,  1599, 0,    1747, 902,  3,
 
287
    0,    1883, 0,    2009, 713,  2002};
 
288
 
 
289
int MangledHashG(const char *key, const int *T)
 
290
{
 
291
    int sum = 0;
 
292
 
 
293
    for (int i = 0; key[i] != '\0'; i++)
 
294
    {
 
295
        sum += T[i] * key[i];
 
296
        sum %= 4022;
 
297
    }
 
298
    return mangledkG[sum];
 
299
}
 
300
 
 
301
int MangledPerfectHash(const char *key)
 
302
{
 
303
    if (strlen(key) > 37)
 
304
        return 0;
 
305
 
 
306
    return (MangledHashG(key, mangledkT1) + MangledHashG(key, mangledkT2)) % 4022;
 
307
}
 
308
 
 
309
constexpr int unmangledkT1[] = {144, 106, 306, 148, 131, 219, 212, 45,  287, 341, 277, 20,  111,
 
310
                                58,  208, 119, 14,  175, 302, 100, 209, 295, 267, 0,   229, 180};
 
311
constexpr int unmangledkT2[] = {121, 122, 34, 65,  319, 69,  163, 60, 246, 67,  291, 196, 119,
 
312
                                224, 117, 41, 360, 309, 210, 88,  98, 242, 241, 278, 10,  1};
 
313
constexpr int unmangledkG[]  = {
 
314
    0,   0,   0,   0,   169, 0,   213, 0,   0,   147, 0,   364, 0,   83,  271, 0,   0,   0,   0,
 
315
    26,  0,   190, 0,   0,   0,   0,   0,   84,  6,   0,   0,   47,  0,   0,   171, 0,   36,  74,
 
316
    236, 0,   82,  0,   0,   0,   65,  189, 121, 0,   0,   0,   3,   65,  244, 37,  317, 71,  327,
 
317
    0,   133, 0,   73,  0,   337, 0,   0,   77,  0,   0,   98,  0,   0,   45,  0,   41,  0,   51,
 
318
    339, 23,  0,   0,   240, 0,   0,   0,   0,   0,   186, 0,   0,   0,   103, 42,  184, 0,   0,
 
319
    350, 0,   82,  25,  105, 61,  0,   0,   119, 0,   69,  177, 0,   360, 344, 0,   0,   0,   0,
 
320
    157, 0,   41,  0,   0,   0,   0,   87,  313, 0,   14,  12,  0,   0,   0,   175, 286, 0,   0,
 
321
    120, 0,   111, 0,   0,   0,   0,   291, 0,   188, 270, 307, 356, 0,   5,   54,  130, 20,  47,
 
322
    123, 0,   149, 308, 120, 39,  165, 351, 131, 0,   52,  110, 95,  88,  172, 0,   98,  0,   169,
 
323
    67,  0,   93,  321, 13,  1,   178, 0,   248, 51,  0,   63,  189, 157, 0,   134, 299, 0,   0,
 
324
    0,   130, 19,  0,   141, 0,   0,   186, 287, 184, 0,   314, 0,   352, 63,  109, 49,  0,   276,
 
325
    0,   0,   19,  285, 202, 128, 0,   54,  287, 19,  74,  0,   0,   86,  75,  29,  122, 27,  37,
 
326
    1,   0,   0,   353, 98,  0,   94,  136, 207, 30,  30,  107, 175, 0,   0,   0,   22,  0,   24,
 
327
    2,   20,  300, 0,   0,   265, 0,   0,   0,   169, 95,  93,  15,  94,  241, 94,  6,   0,   0,
 
328
    0,   332, 283, 0,   131, 299, 2,   0,   127, 0,   0,   296, 183, 0,   0,   276, 0,   150, 163,
 
329
    133, 112, 0,   332, 245, 192, 0,   0,   15,  56,  0,   0,   37,  125, 0,   0,   0,   15,  142,
 
330
    0,   0,   0,   0,   50,  0,   0,   348, 0,   111, 0,   37,  52,  67,  260, 90,  98,  176, 31,
 
331
    0,   175, 24,  0,   158, 0,   0,   75,  108, 128, 60,  0,   107, 106, 0,   0,   59,  317, 0,
 
332
    17,  132, 0,   203, 0,   0,   0,   91,  50,  15,  62,  0,   129, 0,   0,   168, 267, 0,   261,
 
333
    200, 0,   73,  0};
 
334
 
 
335
int UnmangledHashG(const char *key, const int *T)
 
336
{
 
337
    int sum = 0;
 
338
 
 
339
    for (int i = 0; key[i] != '\0'; i++)
 
340
    {
 
341
        sum += T[i] * key[i];
 
342
        sum %= 365;
 
343
    }
 
344
    return unmangledkG[sum];
 
345
}
 
346
 
 
347
int UnmangledPerfectHash(const char *key)
 
348
{
 
349
    if (strlen(key) > 26)
 
350
        return 0;
 
351
 
 
352
    return (UnmangledHashG(key, unmangledkT1) + UnmangledHashG(key, unmangledkT2)) % 365;
 
353
}
 
354
 
 
355
}  // namespace
 
356
 
 
357
namespace sh
 
358
{
 
359
 
 
360
template <>
 
361
const size_t ImmutableString::FowlerNollVoHash<4>::kFnvPrime = 16777619u;
 
362
 
 
363
template <>
 
364
const size_t ImmutableString::FowlerNollVoHash<4>::kFnvOffsetBasis = 0x811c9dc5u;
 
365
 
 
366
template <>
 
367
const size_t ImmutableString::FowlerNollVoHash<8>::kFnvPrime =
 
368
    static_cast<size_t>(1099511628211ull);
 
369
 
 
370
template <>
 
371
const size_t ImmutableString::FowlerNollVoHash<8>::kFnvOffsetBasis =
 
372
    static_cast<size_t>(0xcbf29ce484222325ull);
 
373
 
 
374
uint32_t ImmutableString::mangledNameHash() const
 
375
{
 
376
    return MangledPerfectHash(data());
 
377
}
 
378
 
 
379
uint32_t ImmutableString::unmangledNameHash() const
 
380
{
 
381
    return UnmangledPerfectHash(data());
 
382
}
 
383
 
 
384
}  // namespace sh