From de23d2fa45d09ddca0a388c997fc886b8d0d558e Mon Sep 17 00:00:00 2001 From: Arend Lammertink Date: Wed, 9 May 2018 15:29:35 +0200 Subject: [PATCH] Added support for tabsize for toString. --- src/toString.cpp | 62 +++++++++++++++++++++++++++++------------------- src/toString.h | 16 ++++++------- 2 files changed, 46 insertions(+), 32 deletions(-) diff --git a/src/toString.cpp b/src/toString.cpp index 5c56686..79fac4e 100644 --- a/src/toString.cpp +++ b/src/toString.cpp @@ -34,58 +34,58 @@ #endif -static const char* NumberToString(unsigned long n, uint8_t base=DEC); -static const char* NumberToString(long n, uint8_t base=DEC); -static const char* FloatToString(double number, uint8_t digits); +static const char* NumberToString(unsigned long n, int tabsize, uint8_t base); +static const char* NumberToString(long n, int tabsize, uint8_t base); +static const char* FloatToString(double number, int tabsize, uint8_t digits); // Public Methods ////////////////////////////////////////////////////////////// -const char* toString(char b, int base) +const char* toString(char b, int tabsize, int base) { - return NumberToString((long) b, base); + return NumberToString((long) b, tabsize, base); } -const char* toString(unsigned char b, int base) +const char* toString(unsigned char b, int tabsize, int base) { - return NumberToString((unsigned long) b, base); + return NumberToString((unsigned long) b, tabsize, base); } -const char* toString(int n, int base) +const char* toString(int n, int tabsize, int base) { - return NumberToString((long) n, base); + return NumberToString((long) n, tabsize, base); } -const char* toString(unsigned int n, int base) +const char* toString(unsigned int n, int tabsize, int base) { - return NumberToString((unsigned long) n, base); + return NumberToString((unsigned long) n, tabsize, base); } -const char* toString(long n, int base) +const char* toString(long n, int tabsize, int base) { - return NumberToString(n, base); + return NumberToString(n, tabsize, base); } -const char* toString(unsigned long n, int base) +const char* toString(unsigned long n, int tabsize, int base) { - return NumberToString(n, base); + return NumberToString(n, tabsize, base); } -const char* toString(double n, int digits) +const char* toString(double n, int tabsize, int digits) { - return FloatToString(n, digits); + return FloatToString(n, tabsize, digits); } -const char* toString(Fix16 n, int digits) +const char* toString(Fix16 n, int tabsize, int digits) { - return FloatToString(static_cast(n), digits); + return FloatToString(static_cast(n), tabsize, digits); } // Private Methods ///////////////////////////////////////////////////////////// -static const char* NumberToString(unsigned long n, uint8_t base) +static const char* NumberToString(unsigned long n, int tabsize, uint8_t base) { static char buf[8 * sizeof(long) + 1]; // Assumes 8-bit chars plus zero byte. char *str = &buf[sizeof(buf) - 1]; @@ -102,10 +102,12 @@ static const char* NumberToString(unsigned long n, uint8_t base) *--str = c < 10 ? c + '0' : c + 'A' - 10; } while(n); + while( strlen(str) < tabsize ) *--str = ' '; + return str; } -static const char* NumberToString(long n, uint8_t base) +static const char* NumberToString(long n, int tabsize, uint8_t base) { static char buf[8 * sizeof(long) + 1]; // Assumes 8-bit chars plus zero byte. char *str = &buf[sizeof(buf) - 1]; @@ -131,10 +133,12 @@ static const char* NumberToString(long n, uint8_t base) if( isneg ) *--str = '-'; + while( strlen(str) < tabsize ) *--str = ' '; + return str; } -static const char* FloatToString(double number, uint8_t digits) +static const char* FloatToString(double number, int tabsize, uint8_t digits) { static char buf[20]; char *str = &buf[0]; @@ -163,7 +167,7 @@ static const char* FloatToString(double number, uint8_t digits) // Extract the integer part of the number and print it unsigned long int_part = (unsigned long)number; double remainder = number - (double)int_part; - strcpy(str, NumberToString(int_part)); + strcpy(str, NumberToString(int_part,0,DEC)); while( *str != 0 ) str++; // Print the decimal point, but only if there are digits beyond @@ -177,11 +181,21 @@ static const char* FloatToString(double number, uint8_t digits) remainder *= 10.0; unsigned int toPrint = (unsigned int)(remainder); - strcpy(str, NumberToString((unsigned long)remainder)); + strcpy(str, NumberToString((unsigned long)remainder,0,DEC)); while( !*str ) str++; remainder -= toPrint; } + if( int len=strlen(buf) < tabsize ) + { + int shift = tabsize - len; + char *str = &buf[0] + tabsize + 1; + *str-- = '\0'; + + for( int i=0; i