From 481a86c2fa149cfcd7c03f4076cf059f3e133859 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Mon, 6 Jan 2025 18:12:49 +0100 Subject: [PATCH] Include : - modifiche a FromString con integer per uso libreria fast_float. --- EGnStringUtils.h | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/EGnStringUtils.h b/EGnStringUtils.h index 6b828e1..bf39928 100644 --- a/EGnStringUtils.h +++ b/EGnStringUtils.h @@ -125,20 +125,15 @@ ValidateDxfName( std::string& sName, bool bAdvanced) //---------------------------------------------------------------------------- #define FAST_FLOAT_FMT fast_float::chars_format::general | fast_float::chars_format::allow_leading_plus | fast_float::chars_format::skip_white_space +#define FAST_FLOAT_OPTS fast_float::parse_options( FAST_FLOAT_FMT) inline bool FromString( const std::string& sVal, int& nVal) - { const char* pStart = sVal.c_str() ; - char* pStop ; - errno = 0 ; - nVal = strtol( pStart, &pStop, 10) ; - return ( pStop != pStart && errno == 0) ; } + { auto answer = fast_float::from_chars_advanced( sVal.data(), sVal.data() + sVal.size(), nVal, FAST_FLOAT_OPTS) ; + return ( answer.ec == std::errc() && answer.ptr != sVal.data()) ; } inline bool FromString( const std::string& sVal, unsigned int& nVal) - { const char* pStart = sVal.c_str() ; - char* pStop ; - errno = 0 ; - nVal = strtoul( pStart, &pStop, 10) ; - return ( pStop != pStart && errno == 0) ; } + { auto answer = fast_float::from_chars_advanced( sVal.data(), sVal.data() + sVal.size(), nVal, FAST_FLOAT_OPTS) ; + return ( answer.ec == std::errc() && answer.ptr != sVal.data()) ; } inline bool FromString( const std::string& sVal, bool& bVal) { int nTmp ; @@ -152,16 +147,14 @@ FromString( const std::string& sVal, double& dVal) return ( answer.ec == std::errc() && answer.ptr != sVal.data()) ; } template bool FromString( const std::string& sVal, int (&nVal)[size]) - { const char* pStart = sVal.c_str() ; - char* pStop ; - errno = 0 ; + { const char* pFirst = sVal.data() ; for ( int i = 0 ; i < size ; ++ i) { - nVal[i] = strtol( pStart, &pStop, 10) ; - if ( ( i < size - 1 && *pStop != ',') || errno != 0) + auto answer = fast_float::from_chars_advanced( pFirst, sVal.data() + sVal.size(), nVal[i], FAST_FLOAT_OPTS) ; + if ( answer.ec != std::errc() || ( i < size - 1 && answer.ptr[0] != ',')) return false ; - pStart = pStop + 1 ; + pFirst = answer.ptr + 1 ; } - return ( errno == 0) ; + return true ; } template bool FromString( const std::string& sVal, double (&dVal)[size])