122 lines · plain
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-exception7//8//===----------------------------------------------------------------------===//9 10#ifndef _LIBCPP_CHARCONV11#define _LIBCPP_CHARCONV12 13/*14 charconv synopsis15 16namespace std {17 18 // floating-point format for primitive numerical conversion19 enum class chars_format {20 scientific = unspecified,21 fixed = unspecified,22 hex = unspecified,23 general = fixed | scientific24 };25 26 // 23.20.2, primitive numerical output conversion27 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++2031 constexpr explicit operator bool() const noexcept { return ec == errc{}; } // since C++2632 };33 34 constexpr to_chars_result to_chars(char* first, char* last, see below value,35 int base = 10); // constexpr since C++2336 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 conversion58 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++2062 constexpr explicit operator bool() const noexcept { return ec == errc{}; } // since C++2663 };64 65 constexpr from_chars_result from_chars(const char* first, const char* last,66 see below& value, int base = 10); // constexpr since C++2367 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 std75 76*/77 78#if __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)79# include <__cxx03/__config>80#else81# include <__config>82 83# if _LIBCPP_STD_VER >= 1784# 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 >= 1796 97# include <version>98 99# if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)100# pragma GCC system_header101# endif102 103_LIBCPP_BEGIN_NAMESPACE_STD104 105_LIBCPP_END_NAMESPACE_STD106 107# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20108# 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# endif119#endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)120 121#endif // _LIBCPP_CHARCONV122