Compare commits
2 Commits
Author | SHA1 | Date |
---|---|---|
Martchus | 8e5c1eab1f | |
Martchus | 96fb32e12f |
|
@ -197,6 +197,16 @@ if (NOT ENABLE_THREAD_LOCAL)
|
||||||
PROPERTY COMPILE_DEFINITIONS ${META_PROJECT_VARNAME}_NO_THREAD_LOCAL)
|
PROPERTY COMPILE_DEFINITIONS ${META_PROJECT_VARNAME}_NO_THREAD_LOCAL)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
# configure use of charconv
|
||||||
|
option(ENABLE_CHARCONV "enables use charconv for integer conversions" ON)
|
||||||
|
option(ENABLE_CHARCONV_FP "enables use charconv for floating point conversions" ON)
|
||||||
|
if (ENABLE_CHARCONV)
|
||||||
|
list(APPEND META_PUBLIC_COMPILE_DEFINITIONS ${META_PROJECT_VARNAME}_ENABLE_CHARCONV)
|
||||||
|
endif ()
|
||||||
|
if (ENABLE_CHARCONV_FP)
|
||||||
|
list(APPEND META_PUBLIC_COMPILE_DEFINITIONS ${META_PROJECT_VARNAME}_ENABLE_CHARCONV_FP)
|
||||||
|
endif ()
|
||||||
|
|
||||||
# include modules to apply configuration
|
# include modules to apply configuration
|
||||||
include(BasicConfig)
|
include(BasicConfig)
|
||||||
include(WindowsResources)
|
include(WindowsResources)
|
||||||
|
|
|
@ -25,6 +25,10 @@
|
||||||
#include <ranges>
|
#include <ranges>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(CPP_UTILITIES_ENABLE_CHARCONV) || defined(CPP_UTILITIES_ENABLE_CHARCONV_FP)
|
||||||
|
#include <charconv>
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace CppUtilities {
|
namespace CppUtilities {
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -442,6 +446,7 @@ template <typename IntegralType, class StringType = std::string, typename BaseTy
|
||||||
Traits::EnableIf<std::is_integral<IntegralType>, std::is_signed<IntegralType>> * = nullptr>
|
Traits::EnableIf<std::is_integral<IntegralType>, std::is_signed<IntegralType>> * = nullptr>
|
||||||
StringType numberToString(IntegralType number, BaseType base = 10)
|
StringType numberToString(IntegralType number, BaseType base = 10)
|
||||||
{
|
{
|
||||||
|
|
||||||
const bool negative = number < 0;
|
const bool negative = number < 0;
|
||||||
std::size_t resSize;
|
std::size_t resSize;
|
||||||
if (negative) {
|
if (negative) {
|
||||||
|
@ -537,7 +542,7 @@ IntegralType stringToNumber(const StringType &string, BaseType base = 10)
|
||||||
*/
|
*/
|
||||||
template <typename IntegralType, class StringType, typename BaseType = IntegralType,
|
template <typename IntegralType, class StringType, typename BaseType = IntegralType,
|
||||||
Traits::EnableIf<std::is_integral<IntegralType>, std::is_signed<IntegralType>, Traits::Not<std::is_scalar<std::decay_t<StringType>>>> * = nullptr>
|
Traits::EnableIf<std::is_integral<IntegralType>, std::is_signed<IntegralType>, Traits::Not<std::is_scalar<std::decay_t<StringType>>>> * = nullptr>
|
||||||
IntegralType stringToNumber(const StringType &string, IntegralType base = 10)
|
IntegralType stringToNumber(const StringType &string, BaseType base = 10)
|
||||||
{
|
{
|
||||||
auto i = string.begin();
|
auto i = string.begin();
|
||||||
auto end = string.end();
|
auto end = string.end();
|
||||||
|
@ -581,10 +586,10 @@ FloatingType stringToNumber(const StringType &string, int base = 10)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
std::string errorMsg;
|
std::string errorMsg;
|
||||||
errorMsg.reserve(42 + string.size());
|
errorMsg.reserve(48 + string.size());
|
||||||
errorMsg += "The string \"";
|
errorMsg += "The string \"";
|
||||||
errorMsg += string;
|
errorMsg += string;
|
||||||
errorMsg += "\" is no valid floating number.";
|
errorMsg += "\" is no valid floating point number.";
|
||||||
throw ConversionException(errorMsg);
|
throw ConversionException(errorMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue