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
22namespace __itoa {
23
24inline _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
29inline _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
37inline _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
62inline _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
74inline _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
97inline _LIBCPP_CONSTEXPR const int __pow10_128_offset = 0;
98inline _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
141inline _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