diff options
author | Denis Dzyubenko <denis.dzyubenko@nokia.com> | 2011-05-20 12:37:55 (GMT) |
---|---|---|
committer | Denis Dzyubenko <denis.dzyubenko@nokia.com> | 2011-05-20 12:56:08 (GMT) |
commit | c19ff75707621b0c5bcb832da84921a0370d72a8 (patch) | |
tree | 18757b3fbb13fa21d502a1c69bc8fc321a176bed /src/corelib | |
parent | 96d10abbb40c52ac6274f1144766f3fb27dfd726 (diff) | |
download | Qt-c19ff75707621b0c5bcb832da84921a0370d72a8.zip Qt-c19ff75707621b0c5bcb832da84921a0370d72a8.tar.gz Qt-c19ff75707621b0c5bcb832da84921a0370d72a8.tar.bz2 |
Improved performance of the QLocale::name() function.
Task-number: QTBUG-19168
Reviewed-by: Zeno Albisser
Diffstat (limited to 'src/corelib')
-rw-r--r-- | src/corelib/tools/qlocale.cpp | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/src/corelib/tools/qlocale.cpp b/src/corelib/tools/qlocale.cpp index c8ed94b..c398a5c 100644 --- a/src/corelib/tools/qlocale.cpp +++ b/src/corelib/tools/qlocale.cpp @@ -942,19 +942,32 @@ QLocale::Country QLocale::country() const QString QLocale::name() const { - Language l = language(); + const QLocalePrivate *dd = d(); - QString result = d()->languageCode(); + if (dd->m_language_id == QLocale::AnyLanguage) + return QString(); + if (dd->m_language_id == QLocale::C) + return QLatin1String("C"); - if (l == C) - return result; + const unsigned char *c = language_code_list + 3*(uint(dd->m_language_id)); - Country c = country(); - if (c == AnyCountry) - return result; + QString result(7, Qt::Uninitialized); + ushort *data = (ushort *)result.unicode(); + const ushort *begin = data; - result.append(QLatin1Char('_')); - result.append(d()->countryCode()); + *data++ = ushort(c[0]); + *data++ = ushort(c[1]); + if (c[2] != 0) + *data++ = ushort(c[2]); + if (dd->m_country_id != AnyCountry) { + *data++ = '_'; + const unsigned char *c = country_code_list + 3*(uint(dd->m_country_id)); + *data++ = ushort(c[0]); + *data++ = ushort(c[1]); + if (c[2] != 0) + *data++ = ushort(c[2]); + } + result.resize(data - begin); return result; } |