From b83b990659419b37d8ebffd451eb49bccfe62669 Mon Sep 17 00:00:00 2001 From: Edward Welbourne Date: Fri, 9 Oct 2020 15:40:10 +0200 Subject: Replace QLocalePriave::create() with a plain constructor Be up front about using new in all the places where it's created. Made one of the global statics into a function-local static. Eliminated a static made redundant by its const sibling. Made two members const now that they can be. Change-Id: I46532b3c1e0e62d1f8c84f55494f70cff09d4404 Reviewed-by: Thiago Macieira --- src/corelib/text/qlocale.cpp | 26 ++++++++++---------------- src/corelib/text/qlocale_p.h | 28 ++++++++++------------------ 2 files changed, 20 insertions(+), 34 deletions(-) (limited to 'src/corelib/text') diff --git a/src/corelib/text/qlocale.cpp b/src/corelib/text/qlocale.cpp index 15a65f2203..89928a5e87 100644 --- a/src/corelib/text/qlocale.cpp +++ b/src/corelib/text/qlocale.cpp @@ -583,16 +583,10 @@ static const QLocaleData *default_data = nullptr; static const QLocaleData *const c_data = locale_data; static QLocalePrivate *c_private() { - static QLocalePrivate c_locale{ - c_data, Q_BASIC_ATOMIC_INITIALIZER(1), 0, QLocale::OmitGroupSeparator }; + static QLocalePrivate c_locale(c_data, 0, QLocale::OmitGroupSeparator, 1); return &c_locale; } -static const QLocaleData *systemData(); -static uint defaultIndex(); -Q_GLOBAL_STATIC_WITH_ARGS(QExplicitlySharedDataPointer, systemLocalePrivate, - (QLocalePrivate::create(systemData(), defaultIndex()))) - #ifndef QT_NO_SYSTEMLOCALE /****************************************************************************** ** Default system locale behavior @@ -743,7 +737,7 @@ QDataStream &operator>>(QDataStream &ds, QLocale &l) static const int locale_data_size = sizeof(locale_data)/sizeof(QLocaleData) - 1; Q_GLOBAL_STATIC_WITH_ARGS(QSharedDataPointer, defaultLocalePrivate, - (QLocalePrivate::create(defaultData(), defaultIndex()))) + (new QLocalePrivate(defaultData(), defaultIndex()))) static QLocalePrivate *localePrivateByName(const QString &name) { @@ -751,9 +745,9 @@ static QLocalePrivate *localePrivateByName(const QString &name) return c_private(); const int index = QLocaleData::findLocaleIndex(QLocaleId::fromName(name)); Q_ASSERT(index >= 0 && size_t(index) < std::size(locale_data) - 1); - return QLocalePrivate::create(locale_data + index, index, - locale_data[index].m_language_id == QLocale::C - ? QLocale::OmitGroupSeparator : QLocale::DefaultNumberOptions); + return new QLocalePrivate(locale_data + index, index, + locale_data[index].m_language_id == QLocale::C + ? QLocale::OmitGroupSeparator : QLocale::DefaultNumberOptions); } static QLocalePrivate *findLocalePrivate(QLocale::Language language, QLocale::Script script, @@ -775,7 +769,7 @@ static QLocalePrivate *findLocalePrivate(QLocale::Language language, QLocale::Sc data = defaultData(); index = defaultIndex(); } - return QLocalePrivate::create(data, index, numberOptions); + return new QLocalePrivate(data, index, numberOptions); } QString QLocaleData::decimalPoint() const @@ -2442,10 +2436,10 @@ QString QLocale::toString(double i, char f, int prec) const QLocale QLocale::system() { + static QLocalePrivate locale(systemData(), defaultIndex(), DefaultNumberOptions, 1); QT_PREPEND_NAMESPACE(systemData)(); // trigger updating of the system data if necessary - if (systemLocalePrivate.isDestroyed()) - return QLocale(QLocale::C); - return QLocale(*systemLocalePrivate->data()); + + return QLocale(locale); } @@ -2484,7 +2478,7 @@ QList QLocale::matchingLocales(QLocale::Language language, const QLocaleId id = locale_data[index].id(); if (filter.acceptScriptCountry(id)) { result.append(QLocale(*(id.language_id == C ? c_private() - : QLocalePrivate::create(locale_data + index, index)))); + : new QLocalePrivate(locale_data + index, index)))); } ++index; } while (filter.acceptLanguage(locale_data[index].m_language_id)); diff --git a/src/corelib/text/qlocale_p.h b/src/corelib/text/qlocale_p.h index 6367bb1fda..d435e1666a 100644 --- a/src/corelib/text/qlocale_p.h +++ b/src/corelib/text/qlocale_p.h @@ -391,23 +391,14 @@ public: quint8 m_grouping_least : 3; // Number of digits after last grouping separator (before decimal). }; -class Q_CORE_EXPORT QLocalePrivate // A POD type +class Q_CORE_EXPORT QLocalePrivate { public: - static QLocalePrivate *create( - const QLocaleData *data, const uint index, - QLocale::NumberOptions numberOptions = QLocale::DefaultNumberOptions) - { - auto *retval = new QLocalePrivate; - retval->m_data = data; - retval->ref.storeRelaxed(0); - retval->m_index = index; - retval->m_numberOptions = numberOptions; - return retval; - } - - static QLocalePrivate *get(QLocale &l) { return l.d; } - static const QLocalePrivate *get(const QLocale &l) { return l.d; } + constexpr QLocalePrivate(const QLocaleData *data, const uint index, + QLocale::NumberOptions numberOptions = QLocale::DefaultNumberOptions, + int refs = 0) + : m_data(data), ref Q_BASIC_ATOMIC_INITIALIZER(refs), + m_index(index), m_numberOptions(numberOptions) {} quint16 languageId() const { return m_data->m_language_id; } quint16 countryId() const { return m_data->m_country_id; } @@ -419,6 +410,7 @@ public: inline QLatin1String scriptCode() const { return scriptToCode(QLocale::Script(m_data->m_script_id)); } inline QLatin1String countryCode() const { return countryToCode(QLocale::Country(m_data->m_country_id)); } + static const QLocalePrivate *get(const QLocale &l) { return l.d; } static QLatin1String languageToCode(QLocale::Language language); static QLatin1String scriptToCode(QLocale::Script script); static QLatin1String countryToCode(QLocale::Country country); @@ -431,9 +423,9 @@ public: QLocale::MeasurementSystem measurementSystem() const; // System locale has an m_data all its own; all others have m_data = locale_data + m_index - const QLocaleData *m_data; + const QLocaleData *const m_data; QBasicAtomicInt ref; - uint m_index; + const uint m_index; QLocale::NumberOptions m_numberOptions; }; @@ -446,7 +438,7 @@ inline QLocalePrivate *QSharedDataPointer::clone() { // cannot use QLocalePrivate's copy constructor // since it is deleted in C++11 - return QLocalePrivate::create(d->m_data, d->m_index, d->m_numberOptions); + return new QLocalePrivate(d->m_data, d->m_index, d->m_numberOptions); } inline char QLocaleData::numericToCLocale(QStringView in) const -- cgit v1.2.3