Prevent 2 unnecessary QString allocations for QString::number(0u)
QLocaleData::unsLongLongToString uses qulltoa, which will allocate a zero-length QArrayData. Then with padding a single 0 was put in a QString, which gets prepended to the result. By taking care of this special case, we can now also fast-path the common case where base=10 and no flags nor precision was provided. Change-Id: Ia893b0ea4c77634c24e7cef5aafb06d0ef44c507 Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>bb10
parent
dbd55cdaf3
commit
3727474421
|
|
@ -3005,14 +3005,18 @@ QString QLocaleData::unsLongLongToString(const QChar zero, const QChar group,
|
|||
int base, int width,
|
||||
unsigned flags)
|
||||
{
|
||||
const QChar resultZero = base == 10 ? zero : QChar(QLatin1Char('0'));
|
||||
QString num_str = l ? qulltoa(l, base, zero) : QString(resultZero);
|
||||
|
||||
bool precision_not_specified = false;
|
||||
if (precision == -1) {
|
||||
if (flags == NoFlags)
|
||||
return num_str; // fast-path: nothing below applies, so we're done.
|
||||
|
||||
precision_not_specified = true;
|
||||
precision = 1;
|
||||
}
|
||||
|
||||
QString num_str = qulltoa(l, base, zero);
|
||||
|
||||
uint cnt_thousand_sep = 0;
|
||||
if (flags & ThousandsGroup && base == 10) {
|
||||
for (int i = num_str.length() - 3; i > 0; i -=3) {
|
||||
|
|
@ -3021,7 +3025,6 @@ QString QLocaleData::unsLongLongToString(const QChar zero, const QChar group,
|
|||
}
|
||||
}
|
||||
|
||||
const QChar resultZero = base == 10 ? zero : QChar(QLatin1Char('0'));
|
||||
const int zeroPadding = precision - num_str.length()/* + cnt_thousand_sep*/;
|
||||
if (zeroPadding > 0)
|
||||
num_str.prepend(QString(zeroPadding, resultZero));
|
||||
|
|
|
|||
Loading…
Reference in New Issue