xref: /freebsd/contrib/llvm-project/libcxx/include/__charconv/tables.h (revision 7ef62cebc2f965b0f640263e179276928885e33d)
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 > 14
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),      UINT32_C(10),      UINT32_C(100),      UINT32_C(1000),      UINT32_C(10000),
66     UINT32_C(100000), UINT32_C(1000000), UINT32_C(10000000), UINT32_C(100000000), UINT32_C(1000000000)};
67 
68 inline constexpr uint64_t __pow10_64[20] = {UINT64_C(0),
69                                                UINT64_C(10),
70                                                UINT64_C(100),
71                                                UINT64_C(1000),
72                                                UINT64_C(10000),
73                                                UINT64_C(100000),
74                                                UINT64_C(1000000),
75                                                UINT64_C(10000000),
76                                                UINT64_C(100000000),
77                                                UINT64_C(1000000000),
78                                                UINT64_C(10000000000),
79                                                UINT64_C(100000000000),
80                                                UINT64_C(1000000000000),
81                                                UINT64_C(10000000000000),
82                                                UINT64_C(100000000000000),
83                                                UINT64_C(1000000000000000),
84                                                UINT64_C(10000000000000000),
85                                                UINT64_C(100000000000000000),
86                                                UINT64_C(1000000000000000000),
87                                                UINT64_C(10000000000000000000)};
88 
89 #  ifndef _LIBCPP_HAS_NO_INT128
90 inline constexpr int __pow10_128_offset = 0;
91 inline constexpr __uint128_t __pow10_128[40] = {
92     UINT64_C(0),
93     UINT64_C(10),
94     UINT64_C(100),
95     UINT64_C(1000),
96     UINT64_C(10000),
97     UINT64_C(100000),
98     UINT64_C(1000000),
99     UINT64_C(10000000),
100     UINT64_C(100000000),
101     UINT64_C(1000000000),
102     UINT64_C(10000000000),
103     UINT64_C(100000000000),
104     UINT64_C(1000000000000),
105     UINT64_C(10000000000000),
106     UINT64_C(100000000000000),
107     UINT64_C(1000000000000000),
108     UINT64_C(10000000000000000),
109     UINT64_C(100000000000000000),
110     UINT64_C(1000000000000000000),
111     UINT64_C(10000000000000000000),
112     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10),
113     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(100),
114     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(1000),
115     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10000),
116     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(100000),
117     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(1000000),
118     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10000000),
119     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(100000000),
120     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(1000000000),
121     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10000000000),
122     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(100000000000),
123     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(1000000000000),
124     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10000000000000),
125     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(100000000000000),
126     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(1000000000000000),
127     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10000000000000000),
128     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(100000000000000000),
129     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(1000000000000000000),
130     __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10000000000000000000),
131     (__uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10000000000000000000)) * 10};
132 #  endif
133 
134 inline constexpr char __digits_base_10[200] = {
135     // clang-format off
136     '0', '0', '0', '1', '0', '2', '0', '3', '0', '4', '0', '5', '0', '6', '0', '7', '0', '8', '0', '9',
137     '1', '0', '1', '1', '1', '2', '1', '3', '1', '4', '1', '5', '1', '6', '1', '7', '1', '8', '1', '9',
138     '2', '0', '2', '1', '2', '2', '2', '3', '2', '4', '2', '5', '2', '6', '2', '7', '2', '8', '2', '9',
139     '3', '0', '3', '1', '3', '2', '3', '3', '3', '4', '3', '5', '3', '6', '3', '7', '3', '8', '3', '9',
140     '4', '0', '4', '1', '4', '2', '4', '3', '4', '4', '4', '5', '4', '6', '4', '7', '4', '8', '4', '9',
141     '5', '0', '5', '1', '5', '2', '5', '3', '5', '4', '5', '5', '5', '6', '5', '7', '5', '8', '5', '9',
142     '6', '0', '6', '1', '6', '2', '6', '3', '6', '4', '6', '5', '6', '6', '6', '7', '6', '8', '6', '9',
143     '7', '0', '7', '1', '7', '2', '7', '3', '7', '4', '7', '5', '7', '6', '7', '7', '7', '8', '7', '9',
144     '8', '0', '8', '1', '8', '2', '8', '3', '8', '4', '8', '5', '8', '6', '8', '7', '8', '8', '8', '9',
145     '9', '0', '9', '1', '9', '2', '9', '3', '9', '4', '9', '5', '9', '6', '9', '7', '9', '8', '9', '9'};
146 // clang-format on
147 
148 } // namespace __itoa
149 
150 #endif // _LIBCPP_STD_VER > 14
151 
152 _LIBCPP_END_NAMESPACE_STD
153 
154 #endif // _LIBCPP___CHARCONV_TABLES
155