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