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