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
 11#define _LIBCPP_CHARCONV
 12
 13/*
 14    charconv synopsis
 15
 16namespace std {
 17
 18  // floating-point format for primitive numerical conversion
 19  enum class chars_format {
 20    scientific = unspecified,
 21    fixed = unspecified,
 22    hex = unspecified,
 23    general = fixed | scientific
 24  };
 25
 26  // 23.20.2, primitive numerical output conversion
 27  struct to_chars_result {
 28    char* ptr;
 29    errc ec;
 30    friend bool operator==(const to_chars_result&, const to_chars_result&) = default; // since C++20
 31    constexpr explicit operator bool() const noexcept { return ec == errc{}; }        // since C++26
 32  };
 33
 34  constexpr to_chars_result to_chars(char* first, char* last, see below value,
 35                                     int base = 10);                                  // constexpr since C++23
 36  to_chars_result to_chars(char* first, char* last, bool value,
 37                           int base = 10) = delete;
 38
 39  to_chars_result to_chars(char* first, char* last, float value);
 40  to_chars_result to_chars(char* first, char* last, double value);
 41  to_chars_result to_chars(char* first, char* last, long double value);
 42
 43  to_chars_result to_chars(char* first, char* last, float value,
 44                           chars_format fmt);
 45  to_chars_result to_chars(char* first, char* last, double value,
 46                           chars_format fmt);
 47  to_chars_result to_chars(char* first, char* last, long double value,
 48                           chars_format fmt);
 49
 50  to_chars_result to_chars(char* first, char* last, float value,
 51                           chars_format fmt, int precision);
 52  to_chars_result to_chars(char* first, char* last, double value,
 53                           chars_format fmt, int precision);
 54  to_chars_result to_chars(char* first, char* last, long double value,
 55                           chars_format fmt, int precision);
 56
 57  // 23.20.3, primitive numerical input conversion
 58  struct from_chars_result {
 59    const char* ptr;
 60    errc ec;
 61    friend bool operator==(const from_chars_result&, const from_chars_result&) = default; // since C++20
 62    constexpr explicit operator bool() const noexcept { return ec == errc{}; }            // since C++26
 63  };
 64
 65  constexpr from_chars_result from_chars(const char* first, const char* last,
 66                               see below& value, int base = 10);                         // constexpr since C++23
 67
 68  from_chars_result from_chars(const char* first, const char* last,
 69                               float& value, chars_format fmt);
 70
 71  from_chars_result from_chars(const char* first, const char* last,
 72                               double& value, chars_format fmt);
 73
 74} // namespace std
 75
 76*/
 77
 78#if __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
 79#  include <__cxx03/__config>
 80#else
 81#  include <__config>
 82
 83#  if _LIBCPP_STD_VER >= 17
 84#    include <__charconv/chars_format.h>
 85#    include <__charconv/from_chars_floating_point.h>
 86#    include <__charconv/from_chars_integral.h>
 87#    include <__charconv/from_chars_result.h>
 88#    include <__charconv/tables.h>
 89#    include <__charconv/to_chars.h>
 90#    include <__charconv/to_chars_base_10.h>
 91#    include <__charconv/to_chars_floating_point.h>
 92#    include <__charconv/to_chars_integral.h>
 93#    include <__charconv/to_chars_result.h>
 94#    include <__charconv/traits.h>
 95#  endif // _LIBCPP_STD_VER >= 17
 96
 97#  include <version>
 98
 99#  if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
100#    pragma GCC system_header
101#  endif
102
103_LIBCPP_BEGIN_NAMESPACE_STD
104
105_LIBCPP_END_NAMESPACE_STD
106
107#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
108#    include <cmath>
109#    include <concepts>
110#    include <cstddef>
111#    include <cstdint>
112#    include <cstdlib>
113#    include <cstring>
114#    include <iosfwd>
115#    include <limits>
116#    include <new>
117#    include <type_traits>
118#  endif
119#endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
120
121#endif // _LIBCPP_CHARCONV