from_chars.ipp 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // Copyright 2022 Peter Dimov
  2. // Copyright 2023 Matt Borland
  3. // Distributed under the Boost Software License, Version 1.0.
  4. // https://www.boost.org/LICENSE_1_0.txt
  5. // https://stackoverflow.com/questions/38060411/visual-studio-2015-wont-suppress-error-c4996
  6. #ifndef _SCL_SECURE_NO_WARNINGS
  7. # define _SCL_SECURE_NO_WARNINGS
  8. #endif
  9. #ifndef NO_WARN_MBCS_MFC_DEPRECATION
  10. # define NO_WARN_MBCS_MFC_DEPRECATION
  11. #endif
  12. #include <boost/json/detail/charconv/detail/fast_float/fast_float.hpp>
  13. #include <boost/json/detail/charconv/detail/from_chars_float_impl.hpp>
  14. #include <boost/json/detail/charconv/from_chars.hpp>
  15. #include <system_error>
  16. #include <string>
  17. #include <cstdlib>
  18. #include <cerrno>
  19. #include <cstring>
  20. #if defined(__GNUC__) && __GNUC__ < 5
  21. # pragma GCC diagnostic ignored "-Wmissing-field-initializers"
  22. #endif
  23. std::errc boost::json::detail::charconv::detail::errno_to_errc(int errno_value) noexcept
  24. {
  25. switch (errno_value)
  26. {
  27. case EINVAL:
  28. return std::errc::invalid_argument;
  29. case ERANGE:
  30. return std::errc::result_out_of_range;
  31. default:
  32. return std::errc();
  33. }
  34. }
  35. boost::json::detail::charconv::from_chars_result boost::json::detail::charconv::from_chars(const char* first, const char* last, double& value, boost::json::detail::charconv::chars_format fmt) noexcept
  36. {
  37. if (fmt != boost::json::detail::charconv::chars_format::hex)
  38. {
  39. return boost::json::detail::charconv::detail::fast_float::from_chars(first, last, value, fmt);
  40. }
  41. return boost::json::detail::charconv::detail::from_chars_float_impl(first, last, value, fmt);
  42. }