11#ifndef SEQAN_STD_CHARCONV_SHIM
12#define SEQAN_STD_CHARCONV_SHIM
36#if __cpp_lib_to_chars < 201611
41namespace seqan3::contrib::charconv_float
43using ::std::chars_format;
44using ::std::from_chars_result;
45using ::std::to_chars_result;
50template <std::
floating_po
int value_type>
51inline to_chars_result to_chars_floating_point(
char * first,
char * last, value_type value)
noexcept
61 return {last, std::errc::value_too_large};
71template <std::
floating_po
int value_type>
72inline from_chars_result from_chars_floating_point(
char const * first,
75 chars_format
fmt = chars_format::general)
noexcept
85 return {last, std::errc::invalid_argument};
88 constexpr ptrdiff_t buffer_size = 100;
89 char buffer[buffer_size];
91 if (
fmt != chars_format::general)
94 for (
auto it = first;
it != last; ++
it)
96 if (*
it ==
'e' || *
it ==
'E')
104 return {last, std::errc::invalid_argument};
107 return {last, std::errc::invalid_argument};
117 if ((*last !=
'\0') ||
fmt == chars_format::hex)
127 if (
fmt == chars_format::hex)
135 buffer[std::min<ptrdiff_t>(buffer_size -
offset, last - first)] =
'\0';
141 start =
const_cast<char *
>(first);
146 if constexpr (std::same_as<std::remove_reference_t<value_type>,
float>)
150 if constexpr (std::same_as<std::remove_reference_t<value_type>,
double>)
154 if constexpr (std::same_as<std::remove_reference_t<value_type>,
long double>)
159 last = first + (
end - start);
163 return {last, std::errc::result_out_of_range};
165 else if (
tmp == 0 && end == start)
167 return {last, std::errc::invalid_argument};
177namespace seqan3::contrib::charconv_float
186template <std::
floating_po
int floating_po
int_type>
189 return to_chars_floating_point(first, last, value);
251template <std::
floating_po
int floating_po
int_type>
252inline from_chars_result
from_chars(
char const * first,
255 chars_format
fmt = chars_format::general)
noexcept
257 return from_chars_floating_point(first, last, value,
fmt);
265using ::seqan3::contrib::charconv_float::from_chars;
266using ::seqan3::contrib::charconv_float::to_chars;
@ offset
Sequence (seqan3::field::seq) relative start position (0-based), unsigned value.
constexpr auto const & get(configuration< configs_t... > const &config) noexcept
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition configuration.hpp:412
SeqAn specific customisations in the standard namespace.