tables.h 8.5 KB

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