xref: /openbsd-src/gnu/llvm/libcxx/include/__charconv/tables.h (revision 4bdff4bed0e3d54e55670334c7d0077db4170f86)
1*4bdff4beSrobert // -*- C++ -*-
2*4bdff4beSrobert //===----------------------------------------------------------------------===//
3*4bdff4beSrobert //
4*4bdff4beSrobert // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5*4bdff4beSrobert // See https://llvm.org/LICENSE.txt for license information.
6*4bdff4beSrobert // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7*4bdff4beSrobert //
8*4bdff4beSrobert //===----------------------------------------------------------------------===//
9*4bdff4beSrobert 
10*4bdff4beSrobert #ifndef _LIBCPP___CHARCONV_TABLES
11*4bdff4beSrobert #define _LIBCPP___CHARCONV_TABLES
12*4bdff4beSrobert 
13*4bdff4beSrobert #include <__config>
14*4bdff4beSrobert #include <cstdint>
15*4bdff4beSrobert 
16*4bdff4beSrobert #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
17*4bdff4beSrobert #  pragma GCC system_header
18*4bdff4beSrobert #endif
19*4bdff4beSrobert 
20*4bdff4beSrobert _LIBCPP_BEGIN_NAMESPACE_STD
21*4bdff4beSrobert 
22*4bdff4beSrobert #if _LIBCPP_STD_VER > 14
23*4bdff4beSrobert 
24*4bdff4beSrobert namespace __itoa {
25*4bdff4beSrobert 
26*4bdff4beSrobert inline constexpr char __base_2_lut[64] = {
27*4bdff4beSrobert     '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '1', '0', '0', '0', '1', '1', '0', '1', '0', '0', '0', '1',
28*4bdff4beSrobert     '0', '1', '0', '1', '1', '0', '0', '1', '1', '1', '1', '0', '0', '0', '1', '0', '0', '1', '1', '0', '1', '0',
29*4bdff4beSrobert     '1', '0', '1', '1', '1', '1', '0', '0', '1', '1', '0', '1', '1', '1', '1', '0', '1', '1', '1', '1'};
30*4bdff4beSrobert 
31*4bdff4beSrobert inline constexpr char __base_8_lut[128] = {
32*4bdff4beSrobert     '0', '0', '0', '1', '0', '2', '0', '3', '0', '4', '0', '5', '0', '6', '0', '7', '1', '0', '1', '1', '1', '2',
33*4bdff4beSrobert     '1', '3', '1', '4', '1', '5', '1', '6', '1', '7', '2', '0', '2', '1', '2', '2', '2', '3', '2', '4', '2', '5',
34*4bdff4beSrobert     '2', '6', '2', '7', '3', '0', '3', '1', '3', '2', '3', '3', '3', '4', '3', '5', '3', '6', '3', '7', '4', '0',
35*4bdff4beSrobert     '4', '1', '4', '2', '4', '3', '4', '4', '4', '5', '4', '6', '4', '7', '5', '0', '5', '1', '5', '2', '5', '3',
36*4bdff4beSrobert     '5', '4', '5', '5', '5', '6', '5', '7', '6', '0', '6', '1', '6', '2', '6', '3', '6', '4', '6', '5', '6', '6',
37*4bdff4beSrobert     '6', '7', '7', '0', '7', '1', '7', '2', '7', '3', '7', '4', '7', '5', '7', '6', '7', '7'};
38*4bdff4beSrobert 
39*4bdff4beSrobert inline constexpr char __base_16_lut[512] = {
40*4bdff4beSrobert     '0', '0', '0', '1', '0', '2', '0', '3', '0', '4', '0', '5', '0', '6', '0', '7', '0', '8', '0', '9', '0', 'a', '0',
41*4bdff4beSrobert     'b', '0', 'c', '0', 'd', '0', 'e', '0', 'f', '1', '0', '1', '1', '1', '2', '1', '3', '1', '4', '1', '5', '1', '6',
42*4bdff4beSrobert     '1', '7', '1', '8', '1', '9', '1', 'a', '1', 'b', '1', 'c', '1', 'd', '1', 'e', '1', 'f', '2', '0', '2', '1', '2',
43*4bdff4beSrobert     '2', '2', '3', '2', '4', '2', '5', '2', '6', '2', '7', '2', '8', '2', '9', '2', 'a', '2', 'b', '2', 'c', '2', 'd',
44*4bdff4beSrobert     '2', 'e', '2', 'f', '3', '0', '3', '1', '3', '2', '3', '3', '3', '4', '3', '5', '3', '6', '3', '7', '3', '8', '3',
45*4bdff4beSrobert     '9', '3', 'a', '3', 'b', '3', 'c', '3', 'd', '3', 'e', '3', 'f', '4', '0', '4', '1', '4', '2', '4', '3', '4', '4',
46*4bdff4beSrobert     '4', '5', '4', '6', '4', '7', '4', '8', '4', '9', '4', 'a', '4', 'b', '4', 'c', '4', 'd', '4', 'e', '4', 'f', '5',
47*4bdff4beSrobert     '0', '5', '1', '5', '2', '5', '3', '5', '4', '5', '5', '5', '6', '5', '7', '5', '8', '5', '9', '5', 'a', '5', 'b',
48*4bdff4beSrobert     '5', 'c', '5', 'd', '5', 'e', '5', 'f', '6', '0', '6', '1', '6', '2', '6', '3', '6', '4', '6', '5', '6', '6', '6',
49*4bdff4beSrobert     '7', '6', '8', '6', '9', '6', 'a', '6', 'b', '6', 'c', '6', 'd', '6', 'e', '6', 'f', '7', '0', '7', '1', '7', '2',
50*4bdff4beSrobert     '7', '3', '7', '4', '7', '5', '7', '6', '7', '7', '7', '8', '7', '9', '7', 'a', '7', 'b', '7', 'c', '7', 'd', '7',
51*4bdff4beSrobert     'e', '7', 'f', '8', '0', '8', '1', '8', '2', '8', '3', '8', '4', '8', '5', '8', '6', '8', '7', '8', '8', '8', '9',
52*4bdff4beSrobert     '8', 'a', '8', 'b', '8', 'c', '8', 'd', '8', 'e', '8', 'f', '9', '0', '9', '1', '9', '2', '9', '3', '9', '4', '9',
53*4bdff4beSrobert     '5', '9', '6', '9', '7', '9', '8', '9', '9', '9', 'a', '9', 'b', '9', 'c', '9', 'd', '9', 'e', '9', 'f', 'a', '0',
54*4bdff4beSrobert     'a', '1', 'a', '2', 'a', '3', 'a', '4', 'a', '5', 'a', '6', 'a', '7', 'a', '8', 'a', '9', 'a', 'a', 'a', 'b', 'a',
55*4bdff4beSrobert     'c', 'a', 'd', 'a', 'e', 'a', 'f', 'b', '0', 'b', '1', 'b', '2', 'b', '3', 'b', '4', 'b', '5', 'b', '6', 'b', '7',
56*4bdff4beSrobert     'b', '8', 'b', '9', 'b', 'a', 'b', 'b', 'b', 'c', 'b', 'd', 'b', 'e', 'b', 'f', 'c', '0', 'c', '1', 'c', '2', 'c',
57*4bdff4beSrobert     '3', 'c', '4', 'c', '5', 'c', '6', 'c', '7', 'c', '8', 'c', '9', 'c', 'a', 'c', 'b', 'c', 'c', 'c', 'd', 'c', 'e',
58*4bdff4beSrobert     'c', 'f', 'd', '0', 'd', '1', 'd', '2', 'd', '3', 'd', '4', 'd', '5', 'd', '6', 'd', '7', 'd', '8', 'd', '9', 'd',
59*4bdff4beSrobert     'a', 'd', 'b', 'd', 'c', 'd', 'd', 'd', 'e', 'd', 'f', 'e', '0', 'e', '1', 'e', '2', 'e', '3', 'e', '4', 'e', '5',
60*4bdff4beSrobert     'e', '6', 'e', '7', 'e', '8', 'e', '9', 'e', 'a', 'e', 'b', 'e', 'c', 'e', 'd', 'e', 'e', 'e', 'f', 'f', '0', 'f',
61*4bdff4beSrobert     '1', 'f', '2', 'f', '3', 'f', '4', 'f', '5', 'f', '6', 'f', '7', 'f', '8', 'f', '9', 'f', 'a', 'f', 'b', 'f', 'c',
62*4bdff4beSrobert     'f', 'd', 'f', 'e', 'f', 'f'};
63*4bdff4beSrobert 
64*4bdff4beSrobert inline constexpr uint32_t __pow10_32[10] = {
65*4bdff4beSrobert     UINT32_C(0),      UINT32_C(10),      UINT32_C(100),      UINT32_C(1000),      UINT32_C(10000),
66*4bdff4beSrobert     UINT32_C(100000), UINT32_C(1000000), UINT32_C(10000000), UINT32_C(100000000), UINT32_C(1000000000)};
67*4bdff4beSrobert 
68*4bdff4beSrobert inline constexpr uint64_t __pow10_64[20] = {UINT64_C(0),
69*4bdff4beSrobert                                                UINT64_C(10),
70*4bdff4beSrobert                                                UINT64_C(100),
71*4bdff4beSrobert                                                UINT64_C(1000),
72*4bdff4beSrobert                                                UINT64_C(10000),
73*4bdff4beSrobert                                                UINT64_C(100000),
74*4bdff4beSrobert                                                UINT64_C(1000000),
75*4bdff4beSrobert                                                UINT64_C(10000000),
76*4bdff4beSrobert                                                UINT64_C(100000000),
77*4bdff4beSrobert                                                UINT64_C(1000000000),
78*4bdff4beSrobert                                                UINT64_C(10000000000),
79*4bdff4beSrobert                                                UINT64_C(100000000000),
80*4bdff4beSrobert                                                UINT64_C(1000000000000),
81*4bdff4beSrobert                                                UINT64_C(10000000000000),
82*4bdff4beSrobert                                                UINT64_C(100000000000000),
83*4bdff4beSrobert                                                UINT64_C(1000000000000000),
84*4bdff4beSrobert                                                UINT64_C(10000000000000000),
85*4bdff4beSrobert                                                UINT64_C(100000000000000000),
86*4bdff4beSrobert                                                UINT64_C(1000000000000000000),
87*4bdff4beSrobert                                                UINT64_C(10000000000000000000)};
88*4bdff4beSrobert 
89*4bdff4beSrobert #  ifndef _LIBCPP_HAS_NO_INT128
90*4bdff4beSrobert inline constexpr int __pow10_128_offset = 0;
91*4bdff4beSrobert inline constexpr __uint128_t __pow10_128[40] = {
92*4bdff4beSrobert     UINT64_C(0),
93*4bdff4beSrobert     UINT64_C(10),
94*4bdff4beSrobert     UINT64_C(100),
95*4bdff4beSrobert     UINT64_C(1000),
96*4bdff4beSrobert     UINT64_C(10000),
97*4bdff4beSrobert     UINT64_C(100000),
98*4bdff4beSrobert     UINT64_C(1000000),
99*4bdff4beSrobert     UINT64_C(10000000),
100*4bdff4beSrobert     UINT64_C(100000000),
101*4bdff4beSrobert     UINT64_C(1000000000),
102*4bdff4beSrobert     UINT64_C(10000000000),
103*4bdff4beSrobert     UINT64_C(100000000000),
104*4bdff4beSrobert     UINT64_C(1000000000000),
105*4bdff4beSrobert     UINT64_C(10000000000000),
106*4bdff4beSrobert     UINT64_C(100000000000000),
107*4bdff4beSrobert     UINT64_C(1000000000000000),
108*4bdff4beSrobert     UINT64_C(10000000000000000),
109*4bdff4beSrobert     UINT64_C(100000000000000000),
110*4bdff4beSrobert     UINT64_C(1000000000000000000),
111*4bdff4beSrobert     UINT64_C(10000000000000000000),
112*4bdff4beSrobert     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10),
113*4bdff4beSrobert     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(100),
114*4bdff4beSrobert     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(1000),
115*4bdff4beSrobert     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10000),
116*4bdff4beSrobert     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(100000),
117*4bdff4beSrobert     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(1000000),
118*4bdff4beSrobert     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10000000),
119*4bdff4beSrobert     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(100000000),
120*4bdff4beSrobert     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(1000000000),
121*4bdff4beSrobert     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10000000000),
122*4bdff4beSrobert     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(100000000000),
123*4bdff4beSrobert     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(1000000000000),
124*4bdff4beSrobert     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10000000000000),
125*4bdff4beSrobert     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(100000000000000),
126*4bdff4beSrobert     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(1000000000000000),
127*4bdff4beSrobert     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10000000000000000),
128*4bdff4beSrobert     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(100000000000000000),
129*4bdff4beSrobert     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(1000000000000000000),
130*4bdff4beSrobert     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10000000000000000000),
131*4bdff4beSrobert     (__uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10000000000000000000)) * 10};
132*4bdff4beSrobert #  endif
133*4bdff4beSrobert 
134*4bdff4beSrobert inline constexpr char __digits_base_10[200] = {
135*4bdff4beSrobert     // clang-format off
136*4bdff4beSrobert     '0', '0', '0', '1', '0', '2', '0', '3', '0', '4', '0', '5', '0', '6', '0', '7', '0', '8', '0', '9',
137*4bdff4beSrobert     '1', '0', '1', '1', '1', '2', '1', '3', '1', '4', '1', '5', '1', '6', '1', '7', '1', '8', '1', '9',
138*4bdff4beSrobert     '2', '0', '2', '1', '2', '2', '2', '3', '2', '4', '2', '5', '2', '6', '2', '7', '2', '8', '2', '9',
139*4bdff4beSrobert     '3', '0', '3', '1', '3', '2', '3', '3', '3', '4', '3', '5', '3', '6', '3', '7', '3', '8', '3', '9',
140*4bdff4beSrobert     '4', '0', '4', '1', '4', '2', '4', '3', '4', '4', '4', '5', '4', '6', '4', '7', '4', '8', '4', '9',
141*4bdff4beSrobert     '5', '0', '5', '1', '5', '2', '5', '3', '5', '4', '5', '5', '5', '6', '5', '7', '5', '8', '5', '9',
142*4bdff4beSrobert     '6', '0', '6', '1', '6', '2', '6', '3', '6', '4', '6', '5', '6', '6', '6', '7', '6', '8', '6', '9',
143*4bdff4beSrobert     '7', '0', '7', '1', '7', '2', '7', '3', '7', '4', '7', '5', '7', '6', '7', '7', '7', '8', '7', '9',
144*4bdff4beSrobert     '8', '0', '8', '1', '8', '2', '8', '3', '8', '4', '8', '5', '8', '6', '8', '7', '8', '8', '8', '9',
145*4bdff4beSrobert     '9', '0', '9', '1', '9', '2', '9', '3', '9', '4', '9', '5', '9', '6', '9', '7', '9', '8', '9', '9'};
146*4bdff4beSrobert // clang-format on
147*4bdff4beSrobert 
148*4bdff4beSrobert } // namespace __itoa
149*4bdff4beSrobert 
150*4bdff4beSrobert #endif // _LIBCPP_STD_VER > 14
151*4bdff4beSrobert 
152*4bdff4beSrobert _LIBCPP_END_NAMESPACE_STD
153*4bdff4beSrobert 
154*4bdff4beSrobert #endif // _LIBCPP___CHARCONV_TABLES
155