diff --git a/src/convert/inttostr.cpp b/src/convert/inttostr.cpp index b9a8d6d..89d9272 100644 --- a/src/convert/inttostr.cpp +++ b/src/convert/inttostr.cpp @@ -5,7 +5,7 @@ */ /* - * Copyright (c) 2021, Tomasz Sowa + * Copyright (c) 2021-2022, Tomasz Sowa * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -41,114 +41,114 @@ namespace pt { -std::string to_str(unsigned long long value, int base) +std::string to_str(unsigned long long value, int base, size_t min_width) { std::string res; - Toa(value, res, false, base); + Toa(value, res, false, base, min_width); return res; } -std::string to_str(long long value, int base) +std::string to_str(long long value, int base, size_t min_width) { std::string res; - Toa(value, res, false, base); + Toa(value, res, false, base, min_width); return res; } -std::string to_str(unsigned long value, int base) +std::string to_str(unsigned long value, int base, size_t min_width) { - return to_str(static_cast(value), base); + return to_str(static_cast(value), base, min_width); } -std::string to_str(long value, int base) +std::string to_str(long value, int base, size_t min_width) { - return to_str(static_cast(value), base); + return to_str(static_cast(value), base, min_width); } -std::string to_str(unsigned int value, int base) +std::string to_str(unsigned int value, int base, size_t min_width) { - return to_str(static_cast(value), base); + return to_str(static_cast(value), base, min_width); } -std::string to_str(int value, int base) +std::string to_str(int value, int base, size_t min_width) { - return to_str(static_cast(value), base); + return to_str(static_cast(value), base, min_width); } -std::string to_str(unsigned short value, int base) +std::string to_str(unsigned short value, int base, size_t min_width) { - return to_str(static_cast(value), base); + return to_str(static_cast(value), base, min_width); } -std::string to_str(short value, int base) +std::string to_str(short value, int base, size_t min_width) { - return to_str(static_cast(value), base); + return to_str(static_cast(value), base, min_width); } -std::wstring to_wstr(unsigned long long value, int base) +std::wstring to_wstr(unsigned long long value, int base, size_t min_width) { std::wstring res; - Toa(value, res, false, base); + Toa(value, res, false, base, min_width); return res; } -std::wstring to_wstr(long long value, int base) +std::wstring to_wstr(long long value, int base, size_t min_width) { std::wstring res; - Toa(value, res, false, base); + Toa(value, res, false, base, min_width); return res; } -std::wstring to_wstr(unsigned long value, int base) +std::wstring to_wstr(unsigned long value, int base, size_t min_width) { - return to_wstr(static_cast(value), base); + return to_wstr(static_cast(value), base, min_width); } -std::wstring to_wstr(long value, int base) +std::wstring to_wstr(long value, int base, size_t min_width) { - return to_wstr(static_cast(value), base); + return to_wstr(static_cast(value), base, min_width); } -std::wstring to_wstr(unsigned int value, int base) +std::wstring to_wstr(unsigned int value, int base, size_t min_width) { - return to_wstr(static_cast(value), base); + return to_wstr(static_cast(value), base, min_width); } -std::wstring to_wstr(int value, int base) +std::wstring to_wstr(int value, int base, size_t min_width) { - return to_wstr(static_cast(value), base); + return to_wstr(static_cast(value), base, min_width); } -std::wstring to_wstr(unsigned short value, int base) +std::wstring to_wstr(unsigned short value, int base, size_t min_width) { - return to_wstr(static_cast(value), base); + return to_wstr(static_cast(value), base, min_width); } -std::wstring to_wstr(short value, int base) +std::wstring to_wstr(short value, int base, size_t min_width) { - return to_wstr(static_cast(value), base); + return to_wstr(static_cast(value), base, min_width); } diff --git a/src/convert/inttostr.h b/src/convert/inttostr.h index f134dc8..bac0f1d 100644 --- a/src/convert/inttostr.h +++ b/src/convert/inttostr.h @@ -5,7 +5,7 @@ */ /* - * Copyright (c) 2012-2021, Tomasz Sowa + * Copyright (c) 2012-2022, Tomasz Sowa * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -52,8 +52,9 @@ namespace pt // if the buffer is too small it will be terminated at the beginning (empty string) // and the function returns false +// min_width - if greater than zero then it is used for zero padding template -bool Toa(unsigned long long value, CharType * buffer, size_t buf_len, int base = 10, size_t * len_out = 0) +bool Toa(unsigned long long value, CharType * buffer, size_t buf_len, int base = 10, size_t * len_out = nullptr, size_t min_width = 0) { size_t i1, i2; long rest; @@ -77,6 +78,14 @@ long rest; } while(value != 0 && i2 < buf_len); + if( min_width > 0 ) + { + for( ; i2 < min_width && i2 < buf_len ; ++i2) + { + buffer[i2] = '0'; + } + } + if( i2 >= buf_len ) { buffer[0] = 0; // ops, the buffer was too small @@ -106,7 +115,7 @@ return true; // if the buffer is too small it will be terminated at the beginning (empty string) // and the function returns false template -bool Toa(long long value, CharType * buffer, size_t buf_len, int base = 10, size_t * len_out = 0) +bool Toa(long long value, CharType * buffer, size_t buf_len, int base = 10, size_t * len_out = nullptr, size_t min_width = 0) { if( len_out ) *len_out = 0; @@ -126,7 +135,7 @@ bool Toa(long long value, CharType * buffer, size_t buf_len, int base = 10, size is_sign = true; } - bool res = Toa(static_cast(value), buf, buf_len, base, len_out); + bool res = Toa(static_cast(value), buf, buf_len, base, len_out, min_width); if( res ) { @@ -146,44 +155,44 @@ return res; template -bool Toa(unsigned long value, CharType * buffer, size_t buf_len, int base = 10, size_t * len_out = 0) +bool Toa(unsigned long value, CharType * buffer, size_t buf_len, int base = 10, size_t * len_out = 0, size_t min_width = 0) { - return Toa(static_cast(value), buffer, buf_len, base, len_out); + return Toa(static_cast(value), buffer, buf_len, base, len_out, min_width); } template -bool Toa(long value, CharType * buffer, size_t buf_len, int base = 10, size_t * len_out = 0) +bool Toa(long value, CharType * buffer, size_t buf_len, int base = 10, size_t * len_out = 0, size_t min_width = 0) { - return Toa(static_cast(value), buffer, buf_len, base, len_out); + return Toa(static_cast(value), buffer, buf_len, base, len_out, min_width); } template -bool Toa(unsigned int value, CharType * buffer, size_t buf_len, int base = 10, size_t * len_out = 0) +bool Toa(unsigned int value, CharType * buffer, size_t buf_len, int base = 10, size_t * len_out = 0, size_t min_width = 0) { - return Toa(static_cast(value), buffer, buf_len, base, len_out); + return Toa(static_cast(value), buffer, buf_len, base, len_out, min_width); } template -bool Toa(int value, CharType * buffer, size_t buf_len, int base = 10, size_t * len_out = 0) +bool Toa(int value, CharType * buffer, size_t buf_len, int base = 10, size_t * len_out = 0, size_t min_width = 0) { - return Toa(static_cast(value), buffer, buf_len, base, len_out); + return Toa(static_cast(value), buffer, buf_len, base, len_out, min_width); } template -bool Toa(unsigned short value, CharType * buffer, size_t buf_len, int base = 10, size_t * len_out = 0) +bool Toa(unsigned short value, CharType * buffer, size_t buf_len, int base = 10, size_t * len_out = 0, size_t min_width = 0) { - return Toa(static_cast(value), buffer, buf_len, base, len_out); + return Toa(static_cast(value), buffer, buf_len, base, len_out, min_width); } template -bool Toa(short value, CharType * buffer, size_t buf_len, int base = 10, size_t * len_out = 0) +bool Toa(short value, CharType * buffer, size_t buf_len, int base = 10, size_t * len_out = 0, size_t min_width = 0) { - return Toa(static_cast(value), buffer, buf_len, base, len_out); + return Toa(static_cast(value), buffer, buf_len, base, len_out, min_width); } @@ -192,7 +201,7 @@ bool Toa(short value, CharType * buffer, size_t buf_len, int base = 10, size_t * template -void Toa(unsigned long long value, StringType & res, bool clear_string = true, int base = 10) +void Toa(unsigned long long value, StringType & res, bool clear_string = true, int base = 10, size_t min_width = 0) { typename StringType::value_type buffer[50]; size_t buffer_len = sizeof(buffer) / sizeof(wchar_t); @@ -204,13 +213,13 @@ void Toa(unsigned long long value, StringType & res, bool clear_string = true, i * the size of the buffer is sufficient so the status should always be true */ size_t len_out; - Toa(value, buffer, buffer_len, base, &len_out); + Toa(value, buffer, buffer_len, base, &len_out, min_width); res.append(buffer, len_out); } template -void Toa(long long value, StringType & res, bool clear_string = true, int base = 10) +void Toa(long long value, StringType & res, bool clear_string = true, int base = 10, size_t min_width = 0) { typename StringType::value_type buffer[50]; size_t buffer_len = sizeof(buffer) / sizeof(wchar_t); @@ -222,71 +231,71 @@ void Toa(long long value, StringType & res, bool clear_string = true, int base = * the size of the buffer is sufficient so the status should always be true */ size_t len_out; - Toa(value, buffer, buffer_len, base, &len_out); + Toa(value, buffer, buffer_len, base, &len_out, min_width); res.append(buffer, len_out); } template -void Toa(unsigned long value, StringType & res, bool clear_string = true, int base = 10) +void Toa(unsigned long value, StringType & res, bool clear_string = true, int base = 10, size_t min_width = 0) { - Toa(static_cast(value), res, clear_string, base); + Toa(static_cast(value), res, clear_string, base, min_width); } template -void Toa(long value, StringType & res, bool clear_string = true, int base = 10) +void Toa(long value, StringType & res, bool clear_string = true, int base = 10, size_t min_width = 0) { - Toa(static_cast(value), res, clear_string, base); + Toa(static_cast(value), res, clear_string, base, min_width); } template -void Toa(unsigned int value, StringType & res, bool clear_string = true, int base = 10) +void Toa(unsigned int value, StringType & res, bool clear_string = true, int base = 10, size_t min_width = 0) { - Toa(static_cast(value), res, clear_string, base); + Toa(static_cast(value), res, clear_string, base, min_width); } template -void Toa(int value, StringType & res, bool clear_string = true, int base = 10) +void Toa(int value, StringType & res, bool clear_string = true, int base = 10, size_t min_width = 0) { - Toa(static_cast(value), res, clear_string, base); + Toa(static_cast(value), res, clear_string, base, min_width); } template -void Toa(unsigned short value, StringType & res, bool clear_string = true, int base = 10) +void Toa(unsigned short value, StringType & res, bool clear_string = true, int base = 10, size_t min_width = 0) { - Toa(static_cast(value), res, clear_string, base); + Toa(static_cast(value), res, clear_string, base, min_width); } template -void Toa(short value, StringType & res, bool clear_string = true, int base = 10) +void Toa(short value, StringType & res, bool clear_string = true, int base = 10, size_t min_width = 0) { - Toa(static_cast(value), res, clear_string, base); + Toa(static_cast(value), res, clear_string, base, min_width); } -std::string to_str(unsigned long long value, int base = 10); -std::string to_str(long long value, int base = 10); -std::string to_str(unsigned long value, int base = 10); -std::string to_str(long value, int base = 10); -std::string to_str(unsigned int value, int base = 10); -std::string to_str(int value, int base = 10); -std::string to_str(unsigned short value, int base = 10); -std::string to_str(short value, int base = 10); +std::string to_str(unsigned long long value, int base = 10, size_t min_width = 0); +std::string to_str(long long value, int base = 10, size_t min_width = 0); +std::string to_str(unsigned long value, int base = 10, size_t min_width = 0); +std::string to_str(long value, int base = 10, size_t min_width = 0); +std::string to_str(unsigned int value, int base = 10, size_t min_width = 0); +std::string to_str(int value, int base = 10, size_t min_width = 0); +std::string to_str(unsigned short value, int base = 10, size_t min_width = 0); +std::string to_str(short value, int base = 10, size_t min_width = 0); -std::wstring to_wstr(unsigned long long value, int base = 10); -std::wstring to_wstr(long long value, int base = 10); -std::wstring to_wstr(unsigned long value, int base = 10); -std::wstring to_wstr(long value, int base = 10); -std::wstring to_wstr(unsigned int value, int base = 10); -std::wstring to_wstr(int value, int base = 10); -std::wstring to_wstr(unsigned short value, int base = 10); -std::wstring to_wstr(short value, int base = 10); +std::wstring to_wstr(unsigned long long value, int base = 10, size_t min_width = 0); +std::wstring to_wstr(long long value, int base = 10, size_t min_width = 0); +std::wstring to_wstr(unsigned long value, int base = 10, size_t min_width = 0); +std::wstring to_wstr(long value, int base = 10, size_t min_width = 0); +std::wstring to_wstr(unsigned int value, int base = 10, size_t min_width = 0); +std::wstring to_wstr(int value, int base = 10, size_t min_width = 0); +std::wstring to_wstr(unsigned short value, int base = 10, size_t min_width = 0); +std::wstring to_wstr(short value, int base = 10, size_t min_width = 0);