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 | namespace __itoa { |
23 | |
24 | inline _LIBCPP_CONSTEXPR const char __base_2_lut[64] = { |
25 | '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '1', '0', '0', '0', '1', '1', '0', '1', '0', '0', '0', '1', |
26 | '0', '1', '0', '1', '1', '0', '0', '1', '1', '1', '1', '0', '0', '0', '1', '0', '0', '1', '1', '0', '1', '0', |
27 | '1', '0', '1', '1', '1', '1', '0', '0', '1', '1', '0', '1', '1', '1', '1', '0', '1', '1', '1', '1'}; |
28 | |
29 | inline _LIBCPP_CONSTEXPR const char __base_8_lut[128] = { |
30 | '0', '0', '0', '1', '0', '2', '0', '3', '0', '4', '0', '5', '0', '6', '0', '7', '1', '0', '1', '1', '1', '2', |
31 | '1', '3', '1', '4', '1', '5', '1', '6', '1', '7', '2', '0', '2', '1', '2', '2', '2', '3', '2', '4', '2', '5', |
32 | '2', '6', '2', '7', '3', '0', '3', '1', '3', '2', '3', '3', '3', '4', '3', '5', '3', '6', '3', '7', '4', '0', |
33 | '4', '1', '4', '2', '4', '3', '4', '4', '4', '5', '4', '6', '4', '7', '5', '0', '5', '1', '5', '2', '5', '3', |
34 | '5', '4', '5', '5', '5', '6', '5', '7', '6', '0', '6', '1', '6', '2', '6', '3', '6', '4', '6', '5', '6', '6', |
35 | '6', '7', '7', '0', '7', '1', '7', '2', '7', '3', '7', '4', '7', '5', '7', '6', '7', '7'}; |
36 | |
37 | inline _LIBCPP_CONSTEXPR const char __base_16_lut[512] = { |
38 | '0', '0', '0', '1', '0', '2', '0', '3', '0', '4', '0', '5', '0', '6', '0', '7', '0', '8', '0', '9', '0', 'a', '0', |
39 | 'b', '0', 'c', '0', 'd', '0', 'e', '0', 'f', '1', '0', '1', '1', '1', '2', '1', '3', '1', '4', '1', '5', '1', '6', |
40 | '1', '7', '1', '8', '1', '9', '1', 'a', '1', 'b', '1', 'c', '1', 'd', '1', 'e', '1', 'f', '2', '0', '2', '1', '2', |
41 | '2', '2', '3', '2', '4', '2', '5', '2', '6', '2', '7', '2', '8', '2', '9', '2', 'a', '2', 'b', '2', 'c', '2', 'd', |
42 | '2', 'e', '2', 'f', '3', '0', '3', '1', '3', '2', '3', '3', '3', '4', '3', '5', '3', '6', '3', '7', '3', '8', '3', |
43 | '9', '3', 'a', '3', 'b', '3', 'c', '3', 'd', '3', 'e', '3', 'f', '4', '0', '4', '1', '4', '2', '4', '3', '4', '4', |
44 | '4', '5', '4', '6', '4', '7', '4', '8', '4', '9', '4', 'a', '4', 'b', '4', 'c', '4', 'd', '4', 'e', '4', 'f', '5', |
45 | '0', '5', '1', '5', '2', '5', '3', '5', '4', '5', '5', '5', '6', '5', '7', '5', '8', '5', '9', '5', 'a', '5', 'b', |
46 | '5', 'c', '5', 'd', '5', 'e', '5', 'f', '6', '0', '6', '1', '6', '2', '6', '3', '6', '4', '6', '5', '6', '6', '6', |
47 | '7', '6', '8', '6', '9', '6', 'a', '6', 'b', '6', 'c', '6', 'd', '6', 'e', '6', 'f', '7', '0', '7', '1', '7', '2', |
48 | '7', '3', '7', '4', '7', '5', '7', '6', '7', '7', '7', '8', '7', '9', '7', 'a', '7', 'b', '7', 'c', '7', 'd', '7', |
49 | 'e', '7', 'f', '8', '0', '8', '1', '8', '2', '8', '3', '8', '4', '8', '5', '8', '6', '8', '7', '8', '8', '8', '9', |
50 | '8', 'a', '8', 'b', '8', 'c', '8', 'd', '8', 'e', '8', 'f', '9', '0', '9', '1', '9', '2', '9', '3', '9', '4', '9', |
51 | '5', '9', '6', '9', '7', '9', '8', '9', '9', '9', 'a', '9', 'b', '9', 'c', '9', 'd', '9', 'e', '9', 'f', 'a', '0', |
52 | 'a', '1', 'a', '2', 'a', '3', 'a', '4', 'a', '5', 'a', '6', 'a', '7', 'a', '8', 'a', '9', 'a', 'a', 'a', 'b', 'a', |
53 | 'c', 'a', 'd', 'a', 'e', 'a', 'f', 'b', '0', 'b', '1', 'b', '2', 'b', '3', 'b', '4', 'b', '5', 'b', '6', 'b', '7', |
54 | 'b', '8', 'b', '9', 'b', 'a', 'b', 'b', 'b', 'c', 'b', 'd', 'b', 'e', 'b', 'f', 'c', '0', 'c', '1', 'c', '2', 'c', |
55 | '3', 'c', '4', 'c', '5', 'c', '6', 'c', '7', 'c', '8', 'c', '9', 'c', 'a', 'c', 'b', 'c', 'c', 'c', 'd', 'c', 'e', |
56 | 'c', 'f', 'd', '0', 'd', '1', 'd', '2', 'd', '3', 'd', '4', 'd', '5', 'd', '6', 'd', '7', 'd', '8', 'd', '9', 'd', |
57 | 'a', 'd', 'b', 'd', 'c', 'd', 'd', 'd', 'e', 'd', 'f', 'e', '0', 'e', '1', 'e', '2', 'e', '3', 'e', '4', 'e', '5', |
58 | 'e', '6', 'e', '7', 'e', '8', 'e', '9', 'e', 'a', 'e', 'b', 'e', 'c', 'e', 'd', 'e', 'e', 'e', 'f', 'f', '0', 'f', |
59 | '1', 'f', '2', 'f', '3', 'f', '4', 'f', '5', 'f', '6', 'f', '7', 'f', '8', 'f', '9', 'f', 'a', 'f', 'b', 'f', 'c', |
60 | 'f', 'd', 'f', 'e', 'f', 'f'}; |
61 | |
62 | inline _LIBCPP_CONSTEXPR const uint32_t __pow10_32[10] = { |
63 | UINT32_C(0), |
64 | UINT32_C(10), |
65 | UINT32_C(100), |
66 | UINT32_C(1000), |
67 | UINT32_C(10000), |
68 | UINT32_C(100000), |
69 | UINT32_C(1000000), |
70 | UINT32_C(10000000), |
71 | UINT32_C(100000000), |
72 | UINT32_C(1000000000)}; |
73 | |
74 | inline _LIBCPP_CONSTEXPR const uint64_t __pow10_64[20] = { |
75 | UINT64_C(0), |
76 | UINT64_C(10), |
77 | UINT64_C(100), |
78 | UINT64_C(1000), |
79 | UINT64_C(10000), |
80 | UINT64_C(100000), |
81 | UINT64_C(1000000), |
82 | UINT64_C(10000000), |
83 | UINT64_C(100000000), |
84 | UINT64_C(1000000000), |
85 | UINT64_C(10000000000), |
86 | UINT64_C(100000000000), |
87 | UINT64_C(1000000000000), |
88 | UINT64_C(10000000000000), |
89 | UINT64_C(100000000000000), |
90 | UINT64_C(1000000000000000), |
91 | UINT64_C(10000000000000000), |
92 | UINT64_C(100000000000000000), |
93 | UINT64_C(1000000000000000000), |
94 | UINT64_C(10000000000000000000)}; |
95 | |
96 | # if _LIBCPP_HAS_INT128 |
97 | inline _LIBCPP_CONSTEXPR const int __pow10_128_offset = 0; |
98 | inline _LIBCPP_CONSTEXPR const __uint128_t __pow10_128[40] = { |
99 | UINT64_C(0), |
100 | UINT64_C(10), |
101 | UINT64_C(100), |
102 | UINT64_C(1000), |
103 | UINT64_C(10000), |
104 | UINT64_C(100000), |
105 | UINT64_C(1000000), |
106 | UINT64_C(10000000), |
107 | UINT64_C(100000000), |
108 | UINT64_C(1000000000), |
109 | UINT64_C(10000000000), |
110 | UINT64_C(100000000000), |
111 | UINT64_C(1000000000000), |
112 | UINT64_C(10000000000000), |
113 | UINT64_C(100000000000000), |
114 | UINT64_C(1000000000000000), |
115 | UINT64_C(10000000000000000), |
116 | UINT64_C(100000000000000000), |
117 | UINT64_C(1000000000000000000), |
118 | UINT64_C(10000000000000000000), |
119 | __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10), |
120 | __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(100), |
121 | __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(1000), |
122 | __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10000), |
123 | __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(100000), |
124 | __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(1000000), |
125 | __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10000000), |
126 | __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(100000000), |
127 | __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(1000000000), |
128 | __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10000000000), |
129 | __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(100000000000), |
130 | __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(1000000000000), |
131 | __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10000000000000), |
132 | __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(100000000000000), |
133 | __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(1000000000000000), |
134 | __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10000000000000000), |
135 | __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(100000000000000000), |
136 | __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(1000000000000000000), |
137 | __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10000000000000000000), |
138 | (__uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10000000000000000000)) * 10}; |
139 | # endif |
140 | |
141 | inline _LIBCPP_CONSTEXPR const char __digits_base_10[200] = { |
142 | // clang-format off |
143 | '0', '0', '0', '1', '0', '2', '0', '3', '0', '4', '0', '5', '0', '6', '0', '7', '0', '8', '0', '9', |
144 | '1', '0', '1', '1', '1', '2', '1', '3', '1', '4', '1', '5', '1', '6', '1', '7', '1', '8', '1', '9', |
145 | '2', '0', '2', '1', '2', '2', '2', '3', '2', '4', '2', '5', '2', '6', '2', '7', '2', '8', '2', '9', |
146 | '3', '0', '3', '1', '3', '2', '3', '3', '3', '4', '3', '5', '3', '6', '3', '7', '3', '8', '3', '9', |
147 | '4', '0', '4', '1', '4', '2', '4', '3', '4', '4', '4', '5', '4', '6', '4', '7', '4', '8', '4', '9', |
148 | '5', '0', '5', '1', '5', '2', '5', '3', '5', '4', '5', '5', '5', '6', '5', '7', '5', '8', '5', '9', |
149 | '6', '0', '6', '1', '6', '2', '6', '3', '6', '4', '6', '5', '6', '6', '6', '7', '6', '8', '6', '9', |
150 | '7', '0', '7', '1', '7', '2', '7', '3', '7', '4', '7', '5', '7', '6', '7', '7', '7', '8', '7', '9', |
151 | '8', '0', '8', '1', '8', '2', '8', '3', '8', '4', '8', '5', '8', '6', '8', '7', '8', '8', '8', '9', |
152 | '9', '0', '9', '1', '9', '2', '9', '3', '9', '4', '9', '5', '9', '6', '9', '7', '9', '8', '9', '9'}; |
153 | // clang-format on |
154 | |
155 | } // namespace __itoa |
156 | |
157 | _LIBCPP_END_NAMESPACE_STD |
158 | |
159 | #endif // _LIBCPP___CHARCONV_TABLES |
160 | |