10b57cec5SDimitry Andric// -*- C++ -*- 2349cc55cSDimitry Andric//===----------------------------------------------------------------------===// 30b57cec5SDimitry Andric// 40b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 50b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 60b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 70b57cec5SDimitry Andric// 80b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 90b57cec5SDimitry Andric 100b57cec5SDimitry Andric#ifndef _LIBCPP_CHARCONV 110b57cec5SDimitry Andric#define _LIBCPP_CHARCONV 120b57cec5SDimitry Andric 130b57cec5SDimitry Andric/* 140b57cec5SDimitry Andric charconv synopsis 150b57cec5SDimitry Andric 160b57cec5SDimitry Andricnamespace std { 170b57cec5SDimitry Andric 180b57cec5SDimitry Andric // floating-point format for primitive numerical conversion 190b57cec5SDimitry Andric enum class chars_format { 200b57cec5SDimitry Andric scientific = unspecified, 210b57cec5SDimitry Andric fixed = unspecified, 220b57cec5SDimitry Andric hex = unspecified, 230b57cec5SDimitry Andric general = fixed | scientific 240b57cec5SDimitry Andric }; 250b57cec5SDimitry Andric 260b57cec5SDimitry Andric // 23.20.2, primitive numerical output conversion 270b57cec5SDimitry Andric struct to_chars_result { 280b57cec5SDimitry Andric char* ptr; 290b57cec5SDimitry Andric errc ec; 30349cc55cSDimitry Andric friend bool operator==(const to_chars_result&, const to_chars_result&) = default; // since C++20 315f757f3fSDimitry Andric constexpr explicit operator bool() const noexcept { return ec == errc{}; } // since C++26 320b57cec5SDimitry Andric }; 330b57cec5SDimitry Andric 34bdd1243dSDimitry Andric constexpr to_chars_result to_chars(char* first, char* last, see below value, 35bdd1243dSDimitry Andric int base = 10); // constexpr since C++23 36349cc55cSDimitry Andric to_chars_result to_chars(char* first, char* last, bool value, 37349cc55cSDimitry Andric int base = 10) = delete; 380b57cec5SDimitry Andric 390b57cec5SDimitry Andric to_chars_result to_chars(char* first, char* last, float value); 400b57cec5SDimitry Andric to_chars_result to_chars(char* first, char* last, double value); 410b57cec5SDimitry Andric to_chars_result to_chars(char* first, char* last, long double value); 420b57cec5SDimitry Andric 430b57cec5SDimitry Andric to_chars_result to_chars(char* first, char* last, float value, 440b57cec5SDimitry Andric chars_format fmt); 450b57cec5SDimitry Andric to_chars_result to_chars(char* first, char* last, double value, 460b57cec5SDimitry Andric chars_format fmt); 470b57cec5SDimitry Andric to_chars_result to_chars(char* first, char* last, long double value, 480b57cec5SDimitry Andric chars_format fmt); 490b57cec5SDimitry Andric 500b57cec5SDimitry Andric to_chars_result to_chars(char* first, char* last, float value, 510b57cec5SDimitry Andric chars_format fmt, int precision); 520b57cec5SDimitry Andric to_chars_result to_chars(char* first, char* last, double value, 530b57cec5SDimitry Andric chars_format fmt, int precision); 540b57cec5SDimitry Andric to_chars_result to_chars(char* first, char* last, long double value, 550b57cec5SDimitry Andric chars_format fmt, int precision); 560b57cec5SDimitry Andric 570b57cec5SDimitry Andric // 23.20.3, primitive numerical input conversion 580b57cec5SDimitry Andric struct from_chars_result { 590b57cec5SDimitry Andric const char* ptr; 600b57cec5SDimitry Andric errc ec; 61349cc55cSDimitry Andric friend bool operator==(const from_chars_result&, const from_chars_result&) = default; // since C++20 625f757f3fSDimitry Andric constexpr explicit operator bool() const noexcept { return ec == errc{}; } // since C++26 630b57cec5SDimitry Andric }; 640b57cec5SDimitry Andric 65bdd1243dSDimitry Andric constexpr from_chars_result from_chars(const char* first, const char* last, 66bdd1243dSDimitry Andric see below& value, int base = 10); // constexpr since C++23 670b57cec5SDimitry Andric 680b57cec5SDimitry Andric} // namespace std 690b57cec5SDimitry Andric 700b57cec5SDimitry Andric*/ 710b57cec5SDimitry Andric 72*0fca6ea1SDimitry Andric#include <__config> 73*0fca6ea1SDimitry Andric 74*0fca6ea1SDimitry Andric#if _LIBCPP_STD_VER >= 17 75349cc55cSDimitry Andric# include <__charconv/chars_format.h> 7606c3fb27SDimitry Andric# include <__charconv/from_chars_integral.h> 77349cc55cSDimitry Andric# include <__charconv/from_chars_result.h> 7881ad6265SDimitry Andric# include <__charconv/tables.h> 7906c3fb27SDimitry Andric# include <__charconv/to_chars.h> 8081ad6265SDimitry Andric# include <__charconv/to_chars_base_10.h> 8106c3fb27SDimitry Andric# include <__charconv/to_chars_floating_point.h> 8206c3fb27SDimitry Andric# include <__charconv/to_chars_integral.h> 83349cc55cSDimitry Andric# include <__charconv/to_chars_result.h> 8406c3fb27SDimitry Andric# include <__charconv/traits.h> 85*0fca6ea1SDimitry Andric#endif // _LIBCPP_STD_VER >= 17 86*0fca6ea1SDimitry Andric 875f757f3fSDimitry Andric#include <version> 880b57cec5SDimitry Andric 890b57cec5SDimitry Andric#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 900b57cec5SDimitry Andric# pragma GCC system_header 910b57cec5SDimitry Andric#endif 920b57cec5SDimitry Andric 930b57cec5SDimitry Andric_LIBCPP_BEGIN_NAMESPACE_STD 940b57cec5SDimitry Andric 950b57cec5SDimitry Andric_LIBCPP_END_NAMESPACE_STD 960b57cec5SDimitry Andric 97*0fca6ea1SDimitry Andric#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 14 98*0fca6ea1SDimitry Andric# include <cerrno> 99*0fca6ea1SDimitry Andric# include <cstddef> 100*0fca6ea1SDimitry Andric# include <initializer_list> 101*0fca6ea1SDimitry Andric# include <new> 102*0fca6ea1SDimitry Andric#endif 103*0fca6ea1SDimitry Andric 104bdd1243dSDimitry Andric#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 1055f757f3fSDimitry Andric# include <cmath> 106bdd1243dSDimitry Andric# include <concepts> 1075f757f3fSDimitry Andric# include <cstdint> 10806c3fb27SDimitry Andric# include <cstdlib> 10906c3fb27SDimitry Andric# include <cstring> 110bdd1243dSDimitry Andric# include <iosfwd> 1115f757f3fSDimitry Andric# include <limits> 11206c3fb27SDimitry Andric# include <type_traits> 113bdd1243dSDimitry Andric#endif 114bdd1243dSDimitry Andric 1150b57cec5SDimitry Andric#endif // _LIBCPP_CHARCONV 116