1d2748964SZhihao Yuan// -*- C++ -*- 2eb8650a7SLouis Dionne//===----------------------------------------------------------------------===// 3d2748964SZhihao Yuan// 457b08b09SChandler Carruth// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 557b08b09SChandler Carruth// See https://llvm.org/LICENSE.txt for license information. 657b08b09SChandler Carruth// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7d2748964SZhihao Yuan// 8d2748964SZhihao Yuan//===----------------------------------------------------------------------===// 9d2748964SZhihao Yuan 10d2748964SZhihao Yuan#ifndef _LIBCPP_CHARCONV 11d2748964SZhihao Yuan#define _LIBCPP_CHARCONV 12d2748964SZhihao Yuan 13d2748964SZhihao Yuan/* 14d2748964SZhihao Yuan charconv synopsis 15d2748964SZhihao Yuan 16d2748964SZhihao Yuannamespace std { 17d2748964SZhihao Yuan 18d2748964SZhihao Yuan // floating-point format for primitive numerical conversion 19d2748964SZhihao Yuan enum class chars_format { 20d2748964SZhihao Yuan scientific = unspecified, 21d2748964SZhihao Yuan fixed = unspecified, 22d2748964SZhihao Yuan hex = unspecified, 23d2748964SZhihao Yuan general = fixed | scientific 24d2748964SZhihao Yuan }; 25d2748964SZhihao Yuan 26d2748964SZhihao Yuan // 23.20.2, primitive numerical output conversion 27d2748964SZhihao Yuan struct to_chars_result { 28d2748964SZhihao Yuan char* ptr; 29d2748964SZhihao Yuan errc ec; 303624c4d8SMark de Wever friend bool operator==(const to_chars_result&, const to_chars_result&) = default; // since C++20 3192ac3600SMark de Wever constexpr explicit operator bool() const noexcept { return ec == errc{}; } // since C++26 32d2748964SZhihao Yuan }; 33d2748964SZhihao Yuan 34a1e13a80SMark de Wever constexpr to_chars_result to_chars(char* first, char* last, see below value, 35a1e13a80SMark de Wever int base = 10); // constexpr since C++23 36a59c1a21SKonstantin Varlamov to_chars_result to_chars(char* first, char* last, bool value, 37a59c1a21SKonstantin Varlamov int base = 10) = delete; 38d2748964SZhihao Yuan 39d2748964SZhihao Yuan to_chars_result to_chars(char* first, char* last, float value); 40d2748964SZhihao Yuan to_chars_result to_chars(char* first, char* last, double value); 41d2748964SZhihao Yuan to_chars_result to_chars(char* first, char* last, long double value); 42d2748964SZhihao Yuan 43d2748964SZhihao Yuan to_chars_result to_chars(char* first, char* last, float value, 44d2748964SZhihao Yuan chars_format fmt); 45d2748964SZhihao Yuan to_chars_result to_chars(char* first, char* last, double value, 46d2748964SZhihao Yuan chars_format fmt); 47d2748964SZhihao Yuan to_chars_result to_chars(char* first, char* last, long double value, 48d2748964SZhihao Yuan chars_format fmt); 49d2748964SZhihao Yuan 50d2748964SZhihao Yuan to_chars_result to_chars(char* first, char* last, float value, 51d2748964SZhihao Yuan chars_format fmt, int precision); 52d2748964SZhihao Yuan to_chars_result to_chars(char* first, char* last, double value, 53d2748964SZhihao Yuan chars_format fmt, int precision); 54d2748964SZhihao Yuan to_chars_result to_chars(char* first, char* last, long double value, 55d2748964SZhihao Yuan chars_format fmt, int precision); 56d2748964SZhihao Yuan 57d2748964SZhihao Yuan // 23.20.3, primitive numerical input conversion 58d2748964SZhihao Yuan struct from_chars_result { 59d2748964SZhihao Yuan const char* ptr; 60d2748964SZhihao Yuan errc ec; 613624c4d8SMark de Wever friend bool operator==(const from_chars_result&, const from_chars_result&) = default; // since C++20 6292ac3600SMark de Wever constexpr explicit operator bool() const noexcept { return ec == errc{}; } // since C++26 63d2748964SZhihao Yuan }; 64d2748964SZhihao Yuan 65a1e13a80SMark de Wever constexpr from_chars_result from_chars(const char* first, const char* last, 66a1e13a80SMark de Wever see below& value, int base = 10); // constexpr since C++23 67d2748964SZhihao Yuan 686c4267fbSMichael Jones from_chars_result from_chars(const char* first, const char* last, 696c4267fbSMichael Jones float& value, chars_format fmt); 706c4267fbSMichael Jones 716c4267fbSMichael Jones from_chars_result from_chars(const char* first, const char* last, 726c4267fbSMichael Jones double& value, chars_format fmt); 736c4267fbSMichael Jones 74d2748964SZhihao Yuan} // namespace std 75d2748964SZhihao Yuan 76d2748964SZhihao Yuan*/ 77d2748964SZhihao Yuan 78*b9a2658aSNikolas Klauser#if __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS) 79*b9a2658aSNikolas Klauser# include <__cxx03/charconv> 80*b9a2658aSNikolas Klauser#else 81d5c654b5SNikolas Klauser# include <__config> 82d5c654b5SNikolas Klauser 83d5c654b5SNikolas Klauser# if _LIBCPP_STD_VER >= 17 84e983a659SMark de Wever# include <__charconv/chars_format.h> 856c4267fbSMichael Jones# include <__charconv/from_chars_floating_point.h> 86f7efcacaSMark de Wever# include <__charconv/from_chars_integral.h> 87e983a659SMark de Wever# include <__charconv/from_chars_result.h> 88a15ae413SMark de Wever# include <__charconv/tables.h> 89f7efcacaSMark de Wever# include <__charconv/to_chars.h> 90a15ae413SMark de Wever# include <__charconv/to_chars_base_10.h> 91f7efcacaSMark de Wever# include <__charconv/to_chars_floating_point.h> 92f7efcacaSMark de Wever# include <__charconv/to_chars_integral.h> 93e983a659SMark de Wever# include <__charconv/to_chars_result.h> 94f7efcacaSMark de Wever# include <__charconv/traits.h> 95d5c654b5SNikolas Klauser# endif // _LIBCPP_STD_VER >= 17 96d5c654b5SNikolas Klauser 97a65070a7Sphilnik777# include <version> 98d2748964SZhihao Yuan 99d2748964SZhihao Yuan# if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 100d2748964SZhihao Yuan# pragma GCC system_header 101d2748964SZhihao Yuan# endif 102d2748964SZhihao Yuan 103d2748964SZhihao Yuan_LIBCPP_BEGIN_NAMESPACE_STD 104d2748964SZhihao Yuan 105d2748964SZhihao Yuan_LIBCPP_END_NAMESPACE_STD 106d2748964SZhihao Yuan 107e31c2a1bSMark de Wever# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 108a65070a7Sphilnik777# include <cmath> 10989b356f0SNikolas Klauser# include <concepts> 110e99c4906SNikolas Klauser# include <cstddef> 111a65070a7Sphilnik777# include <cstdint> 11275196f8eSNikolas Klauser# include <cstdlib> 113e8cb3559SNikolas Klauser# include <cstring> 114e31c2a1bSMark de Wever# include <iosfwd> 115a65070a7Sphilnik777# include <limits> 1169474e094SLouis Dionne# include <new> 1170a4aa8a1SNikolas Klauser# include <type_traits> 118e31c2a1bSMark de Wever# endif 119*b9a2658aSNikolas Klauser#endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS) 120e31c2a1bSMark de Wever 121d2748964SZhihao Yuan#endif // _LIBCPP_CHARCONV 122