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 | |