Added toNumber() variants for floating-point types.
This commit is contained in:
parent
5bd19369ce
commit
49791c4fd0
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user