master
  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