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