add min_width parameter to methods converting int to string

This commit is contained in:
Tomasz Sowa 2022-05-28 06:06:32 +02:00
parent 5d2788d0d8
commit c3b7ab5793
2 changed files with 90 additions and 81 deletions

View File

@ -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<unsigned long long>(value), base);
return to_str(static_cast<unsigned long long>(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<long long>(value), base);
return to_str(static_cast<long long>(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<unsigned long long>(value), base);
return to_str(static_cast<unsigned long long>(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<long long>(value), base);
return to_str(static_cast<long long>(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<unsigned long long>(value), base);
return to_str(static_cast<unsigned long long>(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<long long>(value), base);
return to_str(static_cast<long long>(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<unsigned long long>(value), base);
return to_wstr(static_cast<unsigned long long>(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<long long>(value), base);
return to_wstr(static_cast<long long>(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<unsigned long long>(value), base);
return to_wstr(static_cast<unsigned long long>(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<long long>(value), base);
return to_wstr(static_cast<long long>(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<unsigned long long>(value), base);
return to_wstr(static_cast<unsigned long long>(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<long long>(value), base);
return to_wstr(static_cast<long long>(value), base, min_width);
}

View File

@ -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<class CharType>
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<class CharType>
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<unsigned long long>(value), buf, buf_len, base, len_out);
bool res = Toa(static_cast<unsigned long long>(value), buf, buf_len, base, len_out, min_width);
if( res )
{
@ -146,44 +155,44 @@ return res;
template<class CharType>
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<unsigned long long>(value), buffer, buf_len, base, len_out);
return Toa(static_cast<unsigned long long>(value), buffer, buf_len, base, len_out, min_width);
}
template<class CharType>
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<long long>(value), buffer, buf_len, base, len_out);
return Toa(static_cast<long long>(value), buffer, buf_len, base, len_out, min_width);
}
template<class CharType>
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<unsigned long long>(value), buffer, buf_len, base, len_out);
return Toa(static_cast<unsigned long long>(value), buffer, buf_len, base, len_out, min_width);
}
template<class CharType>
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<long long>(value), buffer, buf_len, base, len_out);
return Toa(static_cast<long long>(value), buffer, buf_len, base, len_out, min_width);
}
template<class CharType>
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<unsigned long long>(value), buffer, buf_len, base, len_out);
return Toa(static_cast<unsigned long long>(value), buffer, buf_len, base, len_out, min_width);
}
template<class CharType>
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<long long>(value), buffer, buf_len, base, len_out);
return Toa(static_cast<long long>(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<class StringType>
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<class StringType>
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<class StringType>
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<unsigned long long>(value), res, clear_string, base);
Toa(static_cast<unsigned long long>(value), res, clear_string, base, min_width);
}
template<class StringType>
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<long long>(value), res, clear_string, base);
Toa(static_cast<long long>(value), res, clear_string, base, min_width);
}
template<class StringType>
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<unsigned long long>(value), res, clear_string, base);
Toa(static_cast<unsigned long long>(value), res, clear_string, base, min_width);
}
template<class StringType>
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<long long>(value), res, clear_string, base);
Toa(static_cast<long long>(value), res, clear_string, base, min_width);
}
template<class StringType>
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<unsigned long long>(value), res, clear_string, base);
Toa(static_cast<unsigned long long>(value), res, clear_string, base, min_width);
}
template<class StringType>
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<long long>(value), res, clear_string, base);
Toa(static_cast<long long>(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);