From 64dc9a4eff9205e91d883bf8de8d0463a7e793a2 Mon Sep 17 00:00:00 2001 From: Matt Borland Date: Fri, 2 Jun 2023 10:04:03 +0200 Subject: [PATCH] Add __float128 overload --- include/boost/charconv/to_chars.hpp | 5 +++++ src/to_chars.cpp | 17 +++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/include/boost/charconv/to_chars.hpp b/include/boost/charconv/to_chars.hpp index 467fc5c..ed71b6e 100644 --- a/include/boost/charconv/to_chars.hpp +++ b/include/boost/charconv/to_chars.hpp @@ -778,6 +778,11 @@ BOOST_CHARCONV_DECL to_chars_result to_chars(char* first, char* last, double val BOOST_CHARCONV_DECL to_chars_result to_chars(char* first, char* last, long double value, chars_format fmt = chars_format::general, int precision = -1 ) noexcept; +#ifdef BOOST_HAS_FLOAT128 +BOOST_CHARCONV_DECL to_chars_result to_chars(char* first, char* last, __float128 value, + chars_format fmt = chars_format::general, int precision = -1 ) noexcept; +#endif + } // namespace charconv } // namespace boost diff --git a/src/to_chars.cpp b/src/to_chars.cpp index 355ef53..6df6f12 100644 --- a/src/to_chars.cpp +++ b/src/to_chars.cpp @@ -616,4 +616,21 @@ boost::charconv::to_chars_result boost::charconv::to_chars( char* first, char* l #endif +#ifdef BOOST_HAS_FLOAT128 +boost::charconv::to_chars_result to_chars(char* first, char* last, __float128 value, boost::charconv::chars_format fmt, int precision) noexcept +{ + if (first > last) + { + return {last, std::errc::invalid_argument}; + } + + (void)fmt; + (void)precision; + const auto fd128 = boost::charconv::detail::ryu::float128_to_fd128(value); + const auto num_chars = boost::charconv::detail::ryu::generic_to_chars(fd128, first); + + return { first + num_chars, std::errc() }; +} + +#endif