Added toNumber() variants for floating-point types.

This commit is contained in:
Patrick 2024-12-04 01:08:53 +01:00
parent 5bd19369ce
commit 49791c4fd0

View File

@ -329,7 +329,7 @@ constexpr auto toUpper(TArgs&&... args)
}
template<typename TNumber>
template<std::integral TNumber>
[[nodiscard]]
constexpr bool toNumber(std::string_view stringView, TNumber& outNumber, int base = 10) MIJIN_NOEXCEPT
{
@ -339,7 +339,7 @@ constexpr bool toNumber(std::string_view stringView, TNumber& outNumber, int bas
return res.ec == std::errc{} && res.ptr == end;
}
template<typename TChar, typename TTraits, typename TNumber>
template<typename TChar, typename TTraits, std::integral TNumber>
[[nodiscard]]
constexpr bool toNumber(std::basic_string_view<TChar, TTraits> stringView, TNumber& outNumber, int base = 10) MIJIN_NOEXCEPT requires (!std::is_same_v<TChar, char>)
{
@ -350,6 +350,27 @@ constexpr bool toNumber(std::basic_string_view<TChar, TTraits> stringView, TNumb
return toNumber(asString, outNumber, base);
}
template<std::floating_point TNumber>
[[nodiscard]]
constexpr bool toNumber(std::string_view stringView, TNumber& outNumber, std::chars_format fmt = std::chars_format::general) MIJIN_NOEXCEPT
{
const char* start = &*stringView.begin();
const char* end = start + stringView.size();
const std::from_chars_result res = std::from_chars(start, end, outNumber, fmt);
return res.ec == std::errc{} && res.ptr == end;
}
template<typename TChar, typename TTraits, std::floating_point TNumber>
[[nodiscard]]
constexpr bool toNumber(std::basic_string_view<TChar, TTraits> stringView, TNumber& outNumber, std::chars_format fmt = std::chars_format::general) MIJIN_NOEXCEPT requires (!std::is_same_v<TChar, char>)
{
std::string asString;
asString.resize(stringView.size());
// should only contain number symbols, so just cast down to char
std::transform(stringView.begin(), stringView.end(), asString.begin(), [](TChar chr) { return static_cast<char>(chr); });
return toNumber(asString, outNumber, fmt);
}
template<typename TChar>
[[nodiscard]]
constexpr bool isDecimalChar(TChar chr) noexcept