@@ -189,33 +189,13 @@ from_chars_result_t<UC> from_chars(UC const * first, UC const * last,
189189
190190template <typename T, typename UC>
191191FASTFLOAT_CONSTEXPR20
192- from_chars_result_t <UC> from_chars_advanced (UC const * first, UC const * last ,
193- T &value, parse_options_t <UC> options ) noexcept {
192+ from_chars_result_t <UC> from_chars_advanced (parsed_number_string_t <UC>& pns ,
193+ T &value) noexcept {
194194
195195 static_assert (is_supported_float_type<T>(), " only some floating-point types are supported" );
196196 static_assert (is_supported_char_type<UC>(), " only char, wchar_t, char16_t and char32_t are supported" );
197197
198198 from_chars_result_t <UC> answer;
199- #ifdef FASTFLOAT_SKIP_WHITE_SPACE // disabled by default
200- while ((first != last) && fast_float::is_space (uint8_t (*first))) {
201- first++;
202- }
203- #endif
204- if (first == last) {
205- answer.ec = std::errc::invalid_argument;
206- answer.ptr = first;
207- return answer;
208- }
209- parsed_number_string_t <UC> pns = parse_number_string<UC>(first, last, options);
210- if (!pns.valid ) {
211- if (options.format & chars_format::no_infnan) {
212- answer.ec = std::errc::invalid_argument;
213- answer.ptr = first;
214- return answer;
215- } else {
216- return detail::parse_infnan (first, last, value);
217- }
218- }
219199
220200 answer.ec = std::errc (); // be optimistic
221201 answer.ptr = pns.lastmatch ;
@@ -276,6 +256,39 @@ from_chars_result_t<UC> from_chars_advanced(UC const * first, UC const * last,
276256 return answer;
277257}
278258
259+ template <typename T, typename UC>
260+ FASTFLOAT_CONSTEXPR20
261+ from_chars_result_t <UC> from_chars_advanced (UC const * first, UC const * last,
262+ T &value, parse_options_t <UC> options) noexcept {
263+
264+ static_assert (is_supported_float_type<T>(), " only some floating-point types are supported" );
265+ static_assert (is_supported_char_type<UC>(), " only char, wchar_t, char16_t and char32_t are supported" );
266+
267+ from_chars_result_t <UC> answer;
268+ #ifdef FASTFLOAT_SKIP_WHITE_SPACE // disabled by default
269+ while ((first != last) && fast_float::is_space (uint8_t (*first))) {
270+ first++;
271+ }
272+ #endif
273+ if (first == last) {
274+ answer.ec = std::errc::invalid_argument;
275+ answer.ptr = first;
276+ return answer;
277+ }
278+ parsed_number_string_t <UC> pns = parse_number_string<UC>(first, last, options);
279+ if (!pns.valid ) {
280+ if (options.format & chars_format::no_infnan) {
281+ answer.ec = std::errc::invalid_argument;
282+ answer.ptr = first;
283+ return answer;
284+ } else {
285+ return detail::parse_infnan (first, last, value);
286+ }
287+ }
288+
289+ return from_chars_advanced (pns, value);
290+ }
291+
279292
280293template <typename T, typename UC, typename >
281294FASTFLOAT_CONSTEXPR20
0 commit comments