1*4bdff4beSrobert // -*- C++ -*- 2*4bdff4beSrobert //===----------------------------------------------------------------------===// 3*4bdff4beSrobert // 4*4bdff4beSrobert // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5*4bdff4beSrobert // See https://llvm.org/LICENSE.txt for license information. 6*4bdff4beSrobert // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7*4bdff4beSrobert // 8*4bdff4beSrobert //===----------------------------------------------------------------------===// 9*4bdff4beSrobert 10*4bdff4beSrobert #ifndef _LIBCPP___CHARCONV_TABLES 11*4bdff4beSrobert #define _LIBCPP___CHARCONV_TABLES 12*4bdff4beSrobert 13*4bdff4beSrobert #include <__config> 14*4bdff4beSrobert #include <cstdint> 15*4bdff4beSrobert 16*4bdff4beSrobert #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 17*4bdff4beSrobert # pragma GCC system_header 18*4bdff4beSrobert #endif 19*4bdff4beSrobert 20*4bdff4beSrobert _LIBCPP_BEGIN_NAMESPACE_STD 21*4bdff4beSrobert 22*4bdff4beSrobert #if _LIBCPP_STD_VER > 14 23*4bdff4beSrobert 24*4bdff4beSrobert namespace __itoa { 25*4bdff4beSrobert 26*4bdff4beSrobert inline constexpr char __base_2_lut[64] = { 27*4bdff4beSrobert '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '1', '0', '0', '0', '1', '1', '0', '1', '0', '0', '0', '1', 28*4bdff4beSrobert '0', '1', '0', '1', '1', '0', '0', '1', '1', '1', '1', '0', '0', '0', '1', '0', '0', '1', '1', '0', '1', '0', 29*4bdff4beSrobert '1', '0', '1', '1', '1', '1', '0', '0', '1', '1', '0', '1', '1', '1', '1', '0', '1', '1', '1', '1'}; 30*4bdff4beSrobert 31*4bdff4beSrobert inline constexpr char __base_8_lut[128] = { 32*4bdff4beSrobert '0', '0', '0', '1', '0', '2', '0', '3', '0', '4', '0', '5', '0', '6', '0', '7', '1', '0', '1', '1', '1', '2', 33*4bdff4beSrobert '1', '3', '1', '4', '1', '5', '1', '6', '1', '7', '2', '0', '2', '1', '2', '2', '2', '3', '2', '4', '2', '5', 34*4bdff4beSrobert '2', '6', '2', '7', '3', '0', '3', '1', '3', '2', '3', '3', '3', '4', '3', '5', '3', '6', '3', '7', '4', '0', 35*4bdff4beSrobert '4', '1', '4', '2', '4', '3', '4', '4', '4', '5', '4', '6', '4', '7', '5', '0', '5', '1', '5', '2', '5', '3', 36*4bdff4beSrobert '5', '4', '5', '5', '5', '6', '5', '7', '6', '0', '6', '1', '6', '2', '6', '3', '6', '4', '6', '5', '6', '6', 37*4bdff4beSrobert '6', '7', '7', '0', '7', '1', '7', '2', '7', '3', '7', '4', '7', '5', '7', '6', '7', '7'}; 38*4bdff4beSrobert 39*4bdff4beSrobert inline constexpr char __base_16_lut[512] = { 40*4bdff4beSrobert '0', '0', '0', '1', '0', '2', '0', '3', '0', '4', '0', '5', '0', '6', '0', '7', '0', '8', '0', '9', '0', 'a', '0', 41*4bdff4beSrobert 'b', '0', 'c', '0', 'd', '0', 'e', '0', 'f', '1', '0', '1', '1', '1', '2', '1', '3', '1', '4', '1', '5', '1', '6', 42*4bdff4beSrobert '1', '7', '1', '8', '1', '9', '1', 'a', '1', 'b', '1', 'c', '1', 'd', '1', 'e', '1', 'f', '2', '0', '2', '1', '2', 43*4bdff4beSrobert '2', '2', '3', '2', '4', '2', '5', '2', '6', '2', '7', '2', '8', '2', '9', '2', 'a', '2', 'b', '2', 'c', '2', 'd', 44*4bdff4beSrobert '2', 'e', '2', 'f', '3', '0', '3', '1', '3', '2', '3', '3', '3', '4', '3', '5', '3', '6', '3', '7', '3', '8', '3', 45*4bdff4beSrobert '9', '3', 'a', '3', 'b', '3', 'c', '3', 'd', '3', 'e', '3', 'f', '4', '0', '4', '1', '4', '2', '4', '3', '4', '4', 46*4bdff4beSrobert '4', '5', '4', '6', '4', '7', '4', '8', '4', '9', '4', 'a', '4', 'b', '4', 'c', '4', 'd', '4', 'e', '4', 'f', '5', 47*4bdff4beSrobert '0', '5', '1', '5', '2', '5', '3', '5', '4', '5', '5', '5', '6', '5', '7', '5', '8', '5', '9', '5', 'a', '5', 'b', 48*4bdff4beSrobert '5', 'c', '5', 'd', '5', 'e', '5', 'f', '6', '0', '6', '1', '6', '2', '6', '3', '6', '4', '6', '5', '6', '6', '6', 49*4bdff4beSrobert '7', '6', '8', '6', '9', '6', 'a', '6', 'b', '6', 'c', '6', 'd', '6', 'e', '6', 'f', '7', '0', '7', '1', '7', '2', 50*4bdff4beSrobert '7', '3', '7', '4', '7', '5', '7', '6', '7', '7', '7', '8', '7', '9', '7', 'a', '7', 'b', '7', 'c', '7', 'd', '7', 51*4bdff4beSrobert 'e', '7', 'f', '8', '0', '8', '1', '8', '2', '8', '3', '8', '4', '8', '5', '8', '6', '8', '7', '8', '8', '8', '9', 52*4bdff4beSrobert '8', 'a', '8', 'b', '8', 'c', '8', 'd', '8', 'e', '8', 'f', '9', '0', '9', '1', '9', '2', '9', '3', '9', '4', '9', 53*4bdff4beSrobert '5', '9', '6', '9', '7', '9', '8', '9', '9', '9', 'a', '9', 'b', '9', 'c', '9', 'd', '9', 'e', '9', 'f', 'a', '0', 54*4bdff4beSrobert 'a', '1', 'a', '2', 'a', '3', 'a', '4', 'a', '5', 'a', '6', 'a', '7', 'a', '8', 'a', '9', 'a', 'a', 'a', 'b', 'a', 55*4bdff4beSrobert 'c', 'a', 'd', 'a', 'e', 'a', 'f', 'b', '0', 'b', '1', 'b', '2', 'b', '3', 'b', '4', 'b', '5', 'b', '6', 'b', '7', 56*4bdff4beSrobert 'b', '8', 'b', '9', 'b', 'a', 'b', 'b', 'b', 'c', 'b', 'd', 'b', 'e', 'b', 'f', 'c', '0', 'c', '1', 'c', '2', 'c', 57*4bdff4beSrobert '3', 'c', '4', 'c', '5', 'c', '6', 'c', '7', 'c', '8', 'c', '9', 'c', 'a', 'c', 'b', 'c', 'c', 'c', 'd', 'c', 'e', 58*4bdff4beSrobert 'c', 'f', 'd', '0', 'd', '1', 'd', '2', 'd', '3', 'd', '4', 'd', '5', 'd', '6', 'd', '7', 'd', '8', 'd', '9', 'd', 59*4bdff4beSrobert 'a', 'd', 'b', 'd', 'c', 'd', 'd', 'd', 'e', 'd', 'f', 'e', '0', 'e', '1', 'e', '2', 'e', '3', 'e', '4', 'e', '5', 60*4bdff4beSrobert 'e', '6', 'e', '7', 'e', '8', 'e', '9', 'e', 'a', 'e', 'b', 'e', 'c', 'e', 'd', 'e', 'e', 'e', 'f', 'f', '0', 'f', 61*4bdff4beSrobert '1', 'f', '2', 'f', '3', 'f', '4', 'f', '5', 'f', '6', 'f', '7', 'f', '8', 'f', '9', 'f', 'a', 'f', 'b', 'f', 'c', 62*4bdff4beSrobert 'f', 'd', 'f', 'e', 'f', 'f'}; 63*4bdff4beSrobert 64*4bdff4beSrobert inline constexpr uint32_t __pow10_32[10] = { 65*4bdff4beSrobert UINT32_C(0), UINT32_C(10), UINT32_C(100), UINT32_C(1000), UINT32_C(10000), 66*4bdff4beSrobert UINT32_C(100000), UINT32_C(1000000), UINT32_C(10000000), UINT32_C(100000000), UINT32_C(1000000000)}; 67*4bdff4beSrobert 68*4bdff4beSrobert inline constexpr uint64_t __pow10_64[20] = {UINT64_C(0), 69*4bdff4beSrobert UINT64_C(10), 70*4bdff4beSrobert UINT64_C(100), 71*4bdff4beSrobert UINT64_C(1000), 72*4bdff4beSrobert UINT64_C(10000), 73*4bdff4beSrobert UINT64_C(100000), 74*4bdff4beSrobert UINT64_C(1000000), 75*4bdff4beSrobert UINT64_C(10000000), 76*4bdff4beSrobert UINT64_C(100000000), 77*4bdff4beSrobert UINT64_C(1000000000), 78*4bdff4beSrobert UINT64_C(10000000000), 79*4bdff4beSrobert UINT64_C(100000000000), 80*4bdff4beSrobert UINT64_C(1000000000000), 81*4bdff4beSrobert UINT64_C(10000000000000), 82*4bdff4beSrobert UINT64_C(100000000000000), 83*4bdff4beSrobert UINT64_C(1000000000000000), 84*4bdff4beSrobert UINT64_C(10000000000000000), 85*4bdff4beSrobert UINT64_C(100000000000000000), 86*4bdff4beSrobert UINT64_C(1000000000000000000), 87*4bdff4beSrobert UINT64_C(10000000000000000000)}; 88*4bdff4beSrobert 89*4bdff4beSrobert # ifndef _LIBCPP_HAS_NO_INT128 90*4bdff4beSrobert inline constexpr int __pow10_128_offset = 0; 91*4bdff4beSrobert inline constexpr __uint128_t __pow10_128[40] = { 92*4bdff4beSrobert UINT64_C(0), 93*4bdff4beSrobert UINT64_C(10), 94*4bdff4beSrobert UINT64_C(100), 95*4bdff4beSrobert UINT64_C(1000), 96*4bdff4beSrobert UINT64_C(10000), 97*4bdff4beSrobert UINT64_C(100000), 98*4bdff4beSrobert UINT64_C(1000000), 99*4bdff4beSrobert UINT64_C(10000000), 100*4bdff4beSrobert UINT64_C(100000000), 101*4bdff4beSrobert UINT64_C(1000000000), 102*4bdff4beSrobert UINT64_C(10000000000), 103*4bdff4beSrobert UINT64_C(100000000000), 104*4bdff4beSrobert UINT64_C(1000000000000), 105*4bdff4beSrobert UINT64_C(10000000000000), 106*4bdff4beSrobert UINT64_C(100000000000000), 107*4bdff4beSrobert UINT64_C(1000000000000000), 108*4bdff4beSrobert UINT64_C(10000000000000000), 109*4bdff4beSrobert UINT64_C(100000000000000000), 110*4bdff4beSrobert UINT64_C(1000000000000000000), 111*4bdff4beSrobert UINT64_C(10000000000000000000), 112*4bdff4beSrobert __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10), 113*4bdff4beSrobert __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(100), 114*4bdff4beSrobert __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(1000), 115*4bdff4beSrobert __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10000), 116*4bdff4beSrobert __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(100000), 117*4bdff4beSrobert __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(1000000), 118*4bdff4beSrobert __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10000000), 119*4bdff4beSrobert __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(100000000), 120*4bdff4beSrobert __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(1000000000), 121*4bdff4beSrobert __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10000000000), 122*4bdff4beSrobert __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(100000000000), 123*4bdff4beSrobert __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(1000000000000), 124*4bdff4beSrobert __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10000000000000), 125*4bdff4beSrobert __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(100000000000000), 126*4bdff4beSrobert __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(1000000000000000), 127*4bdff4beSrobert __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10000000000000000), 128*4bdff4beSrobert __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(100000000000000000), 129*4bdff4beSrobert __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(1000000000000000000), 130*4bdff4beSrobert __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10000000000000000000), 131*4bdff4beSrobert (__uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10000000000000000000)) * 10}; 132*4bdff4beSrobert # endif 133*4bdff4beSrobert 134*4bdff4beSrobert inline constexpr char __digits_base_10[200] = { 135*4bdff4beSrobert // clang-format off 136*4bdff4beSrobert '0', '0', '0', '1', '0', '2', '0', '3', '0', '4', '0', '5', '0', '6', '0', '7', '0', '8', '0', '9', 137*4bdff4beSrobert '1', '0', '1', '1', '1', '2', '1', '3', '1', '4', '1', '5', '1', '6', '1', '7', '1', '8', '1', '9', 138*4bdff4beSrobert '2', '0', '2', '1', '2', '2', '2', '3', '2', '4', '2', '5', '2', '6', '2', '7', '2', '8', '2', '9', 139*4bdff4beSrobert '3', '0', '3', '1', '3', '2', '3', '3', '3', '4', '3', '5', '3', '6', '3', '7', '3', '8', '3', '9', 140*4bdff4beSrobert '4', '0', '4', '1', '4', '2', '4', '3', '4', '4', '4', '5', '4', '6', '4', '7', '4', '8', '4', '9', 141*4bdff4beSrobert '5', '0', '5', '1', '5', '2', '5', '3', '5', '4', '5', '5', '5', '6', '5', '7', '5', '8', '5', '9', 142*4bdff4beSrobert '6', '0', '6', '1', '6', '2', '6', '3', '6', '4', '6', '5', '6', '6', '6', '7', '6', '8', '6', '9', 143*4bdff4beSrobert '7', '0', '7', '1', '7', '2', '7', '3', '7', '4', '7', '5', '7', '6', '7', '7', '7', '8', '7', '9', 144*4bdff4beSrobert '8', '0', '8', '1', '8', '2', '8', '3', '8', '4', '8', '5', '8', '6', '8', '7', '8', '8', '8', '9', 145*4bdff4beSrobert '9', '0', '9', '1', '9', '2', '9', '3', '9', '4', '9', '5', '9', '6', '9', '7', '9', '8', '9', '9'}; 146*4bdff4beSrobert // clang-format on 147*4bdff4beSrobert 148*4bdff4beSrobert } // namespace __itoa 149*4bdff4beSrobert 150*4bdff4beSrobert #endif // _LIBCPP_STD_VER > 14 151*4bdff4beSrobert 152*4bdff4beSrobert _LIBCPP_END_NAMESPACE_STD 153*4bdff4beSrobert 154*4bdff4beSrobert #endif // _LIBCPP___CHARCONV_TABLES 155