diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2013-04-25 22:25:15 -0700 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-05-01 23:05:35 +0200 |
commit | 4d6572aac0eb1f75f3c810ce8e92635b956d29fc (patch) | |
tree | 1592404477b429b00739cb3d1d1f1868a9b288ad /src/corelib/tools | |
parent | 30a8d73fdca819f8803bbb12cdf51bba1d09b22f (diff) |
QLocale: cache the QLocalePrivate for the default QLocale
Change-Id: I6f05da4d426a0aa685dd9f2fd0020e413a4bebad
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/corelib/tools')
-rw-r--r-- | src/corelib/tools/qlocale.cpp | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/corelib/tools/qlocale.cpp b/src/corelib/tools/qlocale.cpp index 57f9b22e53..991cc9e170 100644 --- a/src/corelib/tools/qlocale.cpp +++ b/src/corelib/tools/qlocale.cpp @@ -708,6 +708,9 @@ const QLocaleData *QLocalePrivate::dataPointerForIndex(quint16 index) return &locale_data[index]; } +Q_GLOBAL_STATIC_WITH_ARGS(QSharedDataPointer<QLocalePrivate>, defaultLocalePrivate, + (QLocalePrivate::create(defaultData(), default_number_options))) + static QLocalePrivate *localePrivateByName(const QString &name) { if (name == QLatin1String("C")) @@ -715,11 +718,6 @@ static QLocalePrivate *localePrivateByName(const QString &name) return QLocalePrivate::create(findLocaleData(name)); } -static QLocalePrivate *defaultLocalePrivate() -{ - return QLocalePrivate::create(defaultData(), default_number_options); -} - static QLocalePrivate *findLocalePrivate(QLocale::Language language, QLocale::Script script, QLocale::Country country) { @@ -790,7 +788,7 @@ QLocale::QLocale(const QString &name) */ QLocale::QLocale() - : d(defaultLocalePrivate()) + : d(*defaultLocalePrivate) { } @@ -1002,6 +1000,11 @@ void QLocale::setDefault(const QLocale &locale) { default_data = locale.d->m_data; default_number_options = locale.numberOptions(); + + if (defaultLocalePrivate.exists()) { + // update the cached private + *defaultLocalePrivate = locale.d; + } } /*! |