--- parser3/src/include/pa_int.h 2026/01/06 16:36:39 1.2 +++ parser3/src/include/pa_int.h 2026/01/07 13:40:02 1.4 @@ -8,14 +8,14 @@ #ifndef PA_INT_H #define PA_INT_H -#define IDENT_PA_INT_H "$Id: pa_int.h,v 1.2 2026/01/06 16:36:39 moko Exp $" +#define IDENT_PA_INT_H "$Id: pa_int.h,v 1.4 2026/01/07 13:40:02 moko Exp $" // includes #include "pa_memory.h" #include "pa_types.h" -//#define PA_WIDE_INT +#define PA_WIDE_INT #ifdef PA_WIDE_INT // int53, -(2^53-1) .. +(2^53-1) safe convertion from double #define PA_WINT_MIN -9007199254740991LL @@ -45,7 +45,8 @@ inline uint clip2uint(double value) { /// Commonly used, templated to work with any integer type -template char* pa_itoa(T n, T base=10){ +template char* pa_itoa(T n){ + const T base=10; char buf[MAX_NUMBER + 1]; char* pos=buf + MAX_NUMBER; *pos='\0'; @@ -66,24 +67,7 @@ template char* pa_itoa(T n, return pa_strdup(pos, buf + MAX_NUMBER - pos); } -static char* pa_itoa(int i, int base=10){ // custom to support INT_MIN - char buf[MAX_NUMBER + 1]; - char* pos=buf + MAX_NUMBER; - *pos='\0'; - - bool negative=i < 0; - unsigned int n= i < 0 ? -i : i; - - do { - *(--pos)=(char)(n % base) + '0'; - n/=base; - } while (n > 0); - - if (negative) { - *(--pos) = '-'; - } - return pa_strdup(pos, buf + MAX_NUMBER - pos); -} +char* pa_itoa(int); // custom to support INT_MIN template char* pa_uitoa(T n, T base=10){ char buf[MAX_NUMBER + 1];