[IRBuilder] Refactor FMF interface (#121657)
[llvm-project.git] / libcxx / include / charconv
blob3526bb9ae05f487d3d3e80f3f2671d1900881748
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 //===----------------------------------------------------------------------===//
10 #ifndef _LIBCPP_CHARCONV
11 #define _LIBCPP_CHARCONV
14     charconv synopsis
16 namespace std {
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   };
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   };
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;
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);
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);
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);
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   };
65   constexpr from_chars_result from_chars(const char* first, const char* last,
66                                see below& value, int base = 10);                         // constexpr since C++23
68   from_chars_result from_chars(const char* first, const char* last,
69                                float& value, chars_format fmt);
71   from_chars_result from_chars(const char* first, const char* last,
72                                double& value, chars_format fmt);
74 } // namespace std
78 #if __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
79 #  include <__cxx03/charconv>
80 #else
81 #  include <__config>
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
97 #  include <version>
99 #  if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
100 #    pragma GCC system_header
101 #  endif
103 _LIBCPP_BEGIN_NAMESPACE_STD
105 _LIBCPP_END_NAMESPACE_STD
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)
121 #endif // _LIBCPP_CHARCONV