diff options
author | Erik Verbruggen <erik.verbruggen@qt.io> | 2017-04-20 15:43:01 +0200 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@qt.io> | 2017-05-05 12:28:45 +0000 |
commit | 37274744212216f8792c2220faaebfb1e40d1327 (patch) | |
tree | 5f1eedc56421ec3ab5678b0180284533ac0ed98e /src | |
parent | dbd55cdaf367bdc9d6774bcb9927cbe19f18065f (diff) | |
download | qtbase-37274744212216f8792c2220faaebfb1e40d1327.tar.gz |
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>
Diffstat (limited to 'src')
-rw-r--r-- | src/corelib/tools/qlocale.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/corelib/tools/qlocale.cpp b/src/corelib/tools/qlocale.cpp index 5eb45f3b2c..dcdf6b5ed7 100644 --- a/src/corelib/tools/qlocale.cpp +++ b/src/corelib/tools/qlocale.cpp @@ -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)); |