Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-04-17 08:24:07

0001 // Copyright 2022 Peter Dimov
0002 // Copyright 2023 Matt Borland
0003 // Distributed under the Boost Software License, Version 1.0.
0004 // https://www.boost.org/LICENSE_1_0.txt
0005 
0006 #ifndef BOOST_CHARCONV_FROM_CHARS_HPP_INCLUDED
0007 #define BOOST_CHARCONV_FROM_CHARS_HPP_INCLUDED
0008 
0009 #include <boost/charconv/detail/config.hpp>
0010 #include <boost/charconv/detail/from_chars_result.hpp>
0011 #include <boost/charconv/detail/from_chars_integer_impl.hpp>
0012 #include <boost/charconv/detail/bit_layouts.hpp>
0013 #include <boost/charconv/config.hpp>
0014 #include <boost/charconv/chars_format.hpp>
0015 #include <boost/core/detail/string_view.hpp>
0016 #include <system_error>
0017 
0018 namespace boost { namespace charconv {
0019 
0020 // integer overloads
0021 
0022 BOOST_CHARCONV_GCC5_CONSTEXPR from_chars_result from_chars(const char* first, const char* last, bool& value, int base = 10) noexcept = delete;
0023 BOOST_CHARCONV_GCC5_CONSTEXPR from_chars_result from_chars(const char* first, const char* last, char& value, int base = 10) noexcept
0024 {
0025     return detail::from_chars(first, last, value, base);
0026 }
0027 BOOST_CHARCONV_GCC5_CONSTEXPR from_chars_result from_chars(const char* first, const char* last, signed char& value, int base = 10) noexcept
0028 {
0029     return detail::from_chars(first, last, value, base);
0030 }
0031 BOOST_CHARCONV_GCC5_CONSTEXPR from_chars_result from_chars(const char* first, const char* last, unsigned char& value, int base = 10) noexcept
0032 {
0033     return detail::from_chars(first, last, value, base);
0034 }
0035 BOOST_CHARCONV_GCC5_CONSTEXPR from_chars_result from_chars(const char* first, const char* last, short& value, int base = 10) noexcept
0036 {
0037     return detail::from_chars(first, last, value, base);
0038 }
0039 BOOST_CHARCONV_GCC5_CONSTEXPR from_chars_result from_chars(const char* first, const char* last, unsigned short& value, int base = 10) noexcept
0040 {
0041     return detail::from_chars(first, last, value, base);
0042 }
0043 BOOST_CHARCONV_GCC5_CONSTEXPR from_chars_result from_chars(const char* first, const char* last, int& value, int base = 10) noexcept
0044 {
0045     return detail::from_chars(first, last, value, base);
0046 }
0047 BOOST_CHARCONV_GCC5_CONSTEXPR from_chars_result from_chars(const char* first, const char* last, unsigned int& value, int base = 10) noexcept
0048 {
0049     return detail::from_chars(first, last, value, base);
0050 }
0051 BOOST_CHARCONV_GCC5_CONSTEXPR from_chars_result from_chars(const char* first, const char* last, long& value, int base = 10) noexcept
0052 {
0053     return detail::from_chars(first, last, value, base);
0054 }
0055 BOOST_CHARCONV_GCC5_CONSTEXPR from_chars_result from_chars(const char* first, const char* last, unsigned long& value, int base = 10) noexcept
0056 {
0057     return detail::from_chars(first, last, value, base);
0058 }
0059 BOOST_CHARCONV_GCC5_CONSTEXPR from_chars_result from_chars(const char* first, const char* last, long long& value, int base = 10) noexcept
0060 {
0061     return detail::from_chars(first, last, value, base);
0062 }
0063 BOOST_CHARCONV_GCC5_CONSTEXPR from_chars_result from_chars(const char* first, const char* last, unsigned long long& value, int base = 10) noexcept
0064 {
0065     return detail::from_chars(first, last, value, base);
0066 }
0067 
0068 #ifdef BOOST_CHARCONV_HAS_INT128
0069 BOOST_CHARCONV_GCC5_CONSTEXPR from_chars_result from_chars(const char* first, const char* last, boost::int128_type& value, int base = 10) noexcept
0070 {
0071     return detail::from_chars128(first, last, value, base);
0072 }
0073 BOOST_CHARCONV_GCC5_CONSTEXPR from_chars_result from_chars(const char* first, const char* last, boost::uint128_type& value, int base = 10) noexcept
0074 {
0075     return detail::from_chars128(first, last, value, base);
0076 }
0077 #endif
0078 
0079 BOOST_CHARCONV_GCC5_CONSTEXPR from_chars_result from_chars(boost::core::string_view sv, bool& value, int base = 10) noexcept = delete;
0080 BOOST_CHARCONV_GCC5_CONSTEXPR from_chars_result from_chars(boost::core::string_view sv, char& value, int base = 10) noexcept
0081 {
0082     return detail::from_chars(sv.data(), sv.data() + sv.size(), value, base);
0083 }
0084 BOOST_CHARCONV_GCC5_CONSTEXPR from_chars_result from_chars(boost::core::string_view sv, signed char& value, int base = 10) noexcept
0085 {
0086     return detail::from_chars(sv.data(), sv.data() + sv.size(), value, base);
0087 }
0088 BOOST_CHARCONV_GCC5_CONSTEXPR from_chars_result from_chars(boost::core::string_view sv, unsigned char& value, int base = 10) noexcept
0089 {
0090     return detail::from_chars(sv.data(), sv.data() + sv.size(), value, base);
0091 }
0092 BOOST_CHARCONV_GCC5_CONSTEXPR from_chars_result from_chars(boost::core::string_view sv, short& value, int base = 10) noexcept
0093 {
0094     return detail::from_chars(sv.data(), sv.data() + sv.size(), value, base);
0095 }
0096 BOOST_CHARCONV_GCC5_CONSTEXPR from_chars_result from_chars(boost::core::string_view sv, unsigned short& value, int base = 10) noexcept
0097 {
0098     return detail::from_chars(sv.data(), sv.data() + sv.size(), value, base);
0099 }
0100 BOOST_CHARCONV_GCC5_CONSTEXPR from_chars_result from_chars(boost::core::string_view sv, int& value, int base = 10) noexcept
0101 {
0102     return detail::from_chars(sv.data(), sv.data() + sv.size(), value, base);
0103 }
0104 BOOST_CHARCONV_GCC5_CONSTEXPR from_chars_result from_chars(boost::core::string_view sv, unsigned int& value, int base = 10) noexcept
0105 {
0106     return detail::from_chars(sv.data(), sv.data() + sv.size(), value, base);
0107 }
0108 BOOST_CHARCONV_GCC5_CONSTEXPR from_chars_result from_chars(boost::core::string_view sv, long& value, int base = 10) noexcept
0109 {
0110     return detail::from_chars(sv.data(), sv.data() + sv.size(), value, base);
0111 }
0112 BOOST_CHARCONV_GCC5_CONSTEXPR from_chars_result from_chars(boost::core::string_view sv, unsigned long& value, int base = 10) noexcept
0113 {
0114     return detail::from_chars(sv.data(), sv.data() + sv.size(), value, base);
0115 }
0116 BOOST_CHARCONV_GCC5_CONSTEXPR from_chars_result from_chars(boost::core::string_view sv, long long& value, int base = 10) noexcept
0117 {
0118     return detail::from_chars(sv.data(), sv.data() + sv.size(), value, base);
0119 }
0120 BOOST_CHARCONV_GCC5_CONSTEXPR from_chars_result from_chars(boost::core::string_view sv, unsigned long long& value, int base = 10) noexcept
0121 {
0122     return detail::from_chars(sv.data(), sv.data() + sv.size(), value, base);
0123 }
0124 
0125 #ifdef BOOST_CHARCONV_HAS_INT128
0126 BOOST_CHARCONV_GCC5_CONSTEXPR from_chars_result from_chars(boost::core::string_view sv, boost::int128_type& value, int base = 10) noexcept
0127 {
0128     return detail::from_chars128(sv.data(), sv.data() + sv.size(), value, base);
0129 }
0130 BOOST_CHARCONV_GCC5_CONSTEXPR from_chars_result from_chars(boost::core::string_view sv, boost::uint128_type& value, int base = 10) noexcept
0131 {
0132     return detail::from_chars128(sv.data(), sv.data() + sv.size(), value, base);
0133 }
0134 #endif
0135 
0136 //----------------------------------------------------------------------------------------------------------------------
0137 // Floating Point
0138 //----------------------------------------------------------------------------------------------------------------------
0139 
0140 BOOST_CHARCONV_DECL from_chars_result from_chars_erange(const char* first, const char* last, float& value, chars_format fmt = chars_format::general) noexcept;
0141 BOOST_CHARCONV_DECL from_chars_result from_chars_erange(const char* first, const char* last, double& value, chars_format fmt = chars_format::general) noexcept;
0142 
0143 #ifndef BOOST_CHARCONV_UNSUPPORTED_LONG_DOUBLE
0144 BOOST_CHARCONV_DECL from_chars_result from_chars_erange(const char* first, const char* last, long double& value, chars_format fmt = chars_format::general) noexcept;
0145 #endif
0146 
0147 #ifdef BOOST_CHARCONV_HAS_QUADMATH
0148 BOOST_CHARCONV_DECL from_chars_result from_chars_erange(const char* first, const char* last, __float128& value, chars_format fmt = chars_format::general) noexcept;
0149 #endif
0150 
0151 // <stdfloat> types
0152 #ifdef BOOST_CHARCONV_HAS_FLOAT16
0153 BOOST_CHARCONV_DECL from_chars_result from_chars_erange(const char* first, const char* last, std::float16_t& value, chars_format fmt = chars_format::general) noexcept;
0154 #endif
0155 #ifdef BOOST_CHARCONV_HAS_FLOAT32
0156 BOOST_CHARCONV_DECL from_chars_result from_chars_erange(const char* first, const char* last, std::float32_t& value, chars_format fmt = chars_format::general) noexcept;
0157 #endif
0158 #ifdef BOOST_CHARCONV_HAS_FLOAT64
0159 BOOST_CHARCONV_DECL from_chars_result from_chars_erange(const char* first, const char* last, std::float64_t& value, chars_format fmt = chars_format::general) noexcept;
0160 #endif
0161 #if defined(BOOST_CHARCONV_HAS_STDFLOAT128) && defined(BOOST_CHARCONV_HAS_QUADMATH)
0162 BOOST_CHARCONV_DECL from_chars_result from_chars_erange(const char* first, const char* last, std::float128_t& value, chars_format fmt = chars_format::general) noexcept;
0163 #endif
0164 #ifdef BOOST_CHARCONV_HAS_BRAINFLOAT16
0165 BOOST_CHARCONV_DECL from_chars_result from_chars_erange(const char* first, const char* last, std::bfloat16_t& value, chars_format fmt = chars_format::general) noexcept;
0166 #endif
0167 
0168 BOOST_CHARCONV_DECL from_chars_result from_chars_erange(boost::core::string_view sv, float& value, chars_format fmt = chars_format::general) noexcept;
0169 BOOST_CHARCONV_DECL from_chars_result from_chars_erange(boost::core::string_view sv, double& value, chars_format fmt = chars_format::general) noexcept;
0170 
0171 #ifndef BOOST_CHARCONV_UNSUPPORTED_LONG_DOUBLE
0172 BOOST_CHARCONV_DECL from_chars_result from_chars_erange(boost::core::string_view sv, long double& value, chars_format fmt = chars_format::general) noexcept;
0173 #endif
0174 
0175 #ifdef BOOST_CHARCONV_HAS_FLOAT128
0176 BOOST_CHARCONV_DECL from_chars_result from_chars_erange(boost::core::string_view sv, __float128& value, chars_format fmt = chars_format::general) noexcept;
0177 #endif
0178 
0179 // <stdfloat> types
0180 #ifdef BOOST_CHARCONV_HAS_FLOAT16
0181 BOOST_CHARCONV_DECL from_chars_result from_chars_erange(boost::core::string_view sv, std::float16_t& value, chars_format fmt = chars_format::general) noexcept;
0182 #endif
0183 #ifdef BOOST_CHARCONV_HAS_FLOAT32
0184 BOOST_CHARCONV_DECL from_chars_result from_chars_erange(boost::core::string_view sv, std::float32_t& value, chars_format fmt = chars_format::general) noexcept;
0185 #endif
0186 #ifdef BOOST_CHARCONV_HAS_FLOAT64
0187 BOOST_CHARCONV_DECL from_chars_result from_chars_erange(boost::core::string_view sv, std::float64_t& value, chars_format fmt = chars_format::general) noexcept;
0188 #endif
0189 #if defined(BOOST_CHARCONV_HAS_STDFLOAT128) && defined(BOOST_CHARCONV_HAS_FLOAT128)
0190 BOOST_CHARCONV_DECL from_chars_result from_chars_erange(boost::core::string_view sv, std::float128_t& value, chars_format fmt = chars_format::general) noexcept;
0191 #endif
0192 #ifdef BOOST_CHARCONV_HAS_BRAINFLOAT16
0193 BOOST_CHARCONV_DECL from_chars_result from_chars_erange(boost::core::string_view sv, std::bfloat16_t& value, chars_format fmt = chars_format::general) noexcept;
0194 #endif
0195 
0196 // The following adhere to the standard library definition with std::errc::result_out_of_range
0197 // Returns value unmodified
0198 // See: https://github.com/cppalliance/charconv/issues/110
0199 
0200 BOOST_CHARCONV_DECL from_chars_result from_chars(const char* first, const char* last, float& value, chars_format fmt = chars_format::general) noexcept;
0201 BOOST_CHARCONV_DECL from_chars_result from_chars(const char* first, const char* last, double& value, chars_format fmt = chars_format::general) noexcept;
0202 
0203 #ifndef BOOST_CHARCONV_UNSUPPORTED_LONG_DOUBLE
0204 BOOST_CHARCONV_DECL from_chars_result from_chars(const char* first, const char* last, long double& value, chars_format fmt = chars_format::general) noexcept;
0205 #endif
0206 
0207 #ifdef BOOST_CHARCONV_HAS_FLOAT128
0208 BOOST_CHARCONV_DECL from_chars_result from_chars(const char* first, const char* last, __float128& value, chars_format fmt = chars_format::general) noexcept;
0209 #endif
0210 #ifdef BOOST_CHARCONV_HAS_FLOAT16
0211 BOOST_CHARCONV_DECL from_chars_result from_chars(const char* first, const char* last, std::float16_t& value, chars_format fmt = chars_format::general) noexcept;
0212 #endif
0213 #ifdef BOOST_CHARCONV_HAS_FLOAT32
0214 BOOST_CHARCONV_DECL from_chars_result from_chars(const char* first, const char* last, std::float32_t& value, chars_format fmt = chars_format::general) noexcept;
0215 #endif
0216 #ifdef BOOST_CHARCONV_HAS_FLOAT64
0217 BOOST_CHARCONV_DECL from_chars_result from_chars(const char* first, const char* last, std::float64_t& value, chars_format fmt = chars_format::general) noexcept;
0218 #endif
0219 #if defined(BOOST_CHARCONV_HAS_STDFLOAT128) && defined(BOOST_CHARCONV_HAS_FLOAT128)
0220 BOOST_CHARCONV_DECL from_chars_result from_chars(const char* first, const char* last, std::float128_t& value, chars_format fmt = chars_format::general) noexcept;
0221 #endif
0222 #ifdef BOOST_CHARCONV_HAS_BRAINFLOAT16
0223 BOOST_CHARCONV_DECL from_chars_result from_chars(const char* first, const char* last, std::bfloat16_t& value, chars_format fmt = chars_format::general) noexcept;
0224 #endif
0225 
0226 BOOST_CHARCONV_DECL from_chars_result from_chars(boost::core::string_view sv, float& value, chars_format fmt = chars_format::general) noexcept;
0227 BOOST_CHARCONV_DECL from_chars_result from_chars(boost::core::string_view sv, double& value, chars_format fmt = chars_format::general) noexcept;
0228 
0229 #ifndef BOOST_CHARCONV_UNSUPPORTED_LONG_DOUBLE
0230 BOOST_CHARCONV_DECL from_chars_result from_chars(boost::core::string_view sv, long double& value, chars_format fmt = chars_format::general) noexcept;
0231 #endif
0232 
0233 #ifdef BOOST_CHARCONV_HAS_FLOAT128
0234 BOOST_CHARCONV_DECL from_chars_result from_chars(boost::core::string_view sv, __float128& value, chars_format fmt = chars_format::general) noexcept;
0235 #endif
0236 #ifdef BOOST_CHARCONV_HAS_FLOAT16
0237 BOOST_CHARCONV_DECL from_chars_result from_chars(boost::core::string_view sv, std::float16_t& value, chars_format fmt = chars_format::general) noexcept;
0238 #endif
0239 #ifdef BOOST_CHARCONV_HAS_FLOAT32
0240 BOOST_CHARCONV_DECL from_chars_result from_chars(boost::core::string_view sv, std::float32_t& value, chars_format fmt = chars_format::general) noexcept;
0241 #endif
0242 #ifdef BOOST_CHARCONV_HAS_FLOAT64
0243 BOOST_CHARCONV_DECL from_chars_result from_chars(boost::core::string_view sv, std::float64_t& value, chars_format fmt = chars_format::general) noexcept;
0244 #endif
0245 #if defined(BOOST_CHARCONV_HAS_STDFLOAT128) && defined(BOOST_CHARCONV_HAS_FLOAT128)
0246 BOOST_CHARCONV_DECL from_chars_result from_chars(boost::core::string_view sv, std::float128_t& value, chars_format fmt = chars_format::general) noexcept;
0247 #endif
0248 #ifdef BOOST_CHARCONV_HAS_BRAINFLOAT16
0249 BOOST_CHARCONV_DECL from_chars_result from_chars(boost::core::string_view sv, std::bfloat16_t& value, chars_format fmt = chars_format::general) noexcept;
0250 #endif
0251 
0252 } // namespace charconv
0253 } // namespace boost
0254 
0255 #endif // #ifndef BOOST_CHARCONV_FROM_CHARS_HPP_INCLUDED