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 <thiago.macieira@intel.com>
This commit is contained in:
Edward Welbourne 2020-10-09 15:40:10 +02:00
parent e330a9bb44
commit b83b990659
2 changed files with 20 additions and 34 deletions

View File

@ -583,16 +583,10 @@ static const QLocaleData *default_data = nullptr;
static const QLocaleData *const c_data = locale_data; static const QLocaleData *const c_data = locale_data;
static QLocalePrivate *c_private() static QLocalePrivate *c_private()
{ {
static QLocalePrivate c_locale{ static QLocalePrivate c_locale(c_data, 0, QLocale::OmitGroupSeparator, 1);
c_data, Q_BASIC_ATOMIC_INITIALIZER(1), 0, QLocale::OmitGroupSeparator };
return &c_locale; return &c_locale;
} }
static const QLocaleData *systemData();
static uint defaultIndex();
Q_GLOBAL_STATIC_WITH_ARGS(QExplicitlySharedDataPointer<QLocalePrivate>, systemLocalePrivate,
(QLocalePrivate::create(systemData(), defaultIndex())))
#ifndef QT_NO_SYSTEMLOCALE #ifndef QT_NO_SYSTEMLOCALE
/****************************************************************************** /******************************************************************************
** Default system locale behavior ** 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; static const int locale_data_size = sizeof(locale_data)/sizeof(QLocaleData) - 1;
Q_GLOBAL_STATIC_WITH_ARGS(QSharedDataPointer<QLocalePrivate>, defaultLocalePrivate, Q_GLOBAL_STATIC_WITH_ARGS(QSharedDataPointer<QLocalePrivate>, defaultLocalePrivate,
(QLocalePrivate::create(defaultData(), defaultIndex()))) (new QLocalePrivate(defaultData(), defaultIndex())))
static QLocalePrivate *localePrivateByName(const QString &name) static QLocalePrivate *localePrivateByName(const QString &name)
{ {
@ -751,9 +745,9 @@ static QLocalePrivate *localePrivateByName(const QString &name)
return c_private(); return c_private();
const int index = QLocaleData::findLocaleIndex(QLocaleId::fromName(name)); const int index = QLocaleData::findLocaleIndex(QLocaleId::fromName(name));
Q_ASSERT(index >= 0 && size_t(index) < std::size(locale_data) - 1); Q_ASSERT(index >= 0 && size_t(index) < std::size(locale_data) - 1);
return QLocalePrivate::create(locale_data + index, index, return new QLocalePrivate(locale_data + index, index,
locale_data[index].m_language_id == QLocale::C locale_data[index].m_language_id == QLocale::C
? QLocale::OmitGroupSeparator : QLocale::DefaultNumberOptions); ? QLocale::OmitGroupSeparator : QLocale::DefaultNumberOptions);
} }
static QLocalePrivate *findLocalePrivate(QLocale::Language language, QLocale::Script script, static QLocalePrivate *findLocalePrivate(QLocale::Language language, QLocale::Script script,
@ -775,7 +769,7 @@ static QLocalePrivate *findLocalePrivate(QLocale::Language language, QLocale::Sc
data = defaultData(); data = defaultData();
index = defaultIndex(); index = defaultIndex();
} }
return QLocalePrivate::create(data, index, numberOptions); return new QLocalePrivate(data, index, numberOptions);
} }
QString QLocaleData::decimalPoint() const QString QLocaleData::decimalPoint() const
@ -2442,10 +2436,10 @@ QString QLocale::toString(double i, char f, int prec) const
QLocale QLocale::system() QLocale QLocale::system()
{ {
static QLocalePrivate locale(systemData(), defaultIndex(), DefaultNumberOptions, 1);
QT_PREPEND_NAMESPACE(systemData)(); // trigger updating of the system data if necessary QT_PREPEND_NAMESPACE(systemData)(); // trigger updating of the system data if necessary
if (systemLocalePrivate.isDestroyed())
return QLocale(QLocale::C); return QLocale(locale);
return QLocale(*systemLocalePrivate->data());
} }
@ -2484,7 +2478,7 @@ QList<QLocale> QLocale::matchingLocales(QLocale::Language language,
const QLocaleId id = locale_data[index].id(); const QLocaleId id = locale_data[index].id();
if (filter.acceptScriptCountry(id)) { if (filter.acceptScriptCountry(id)) {
result.append(QLocale(*(id.language_id == C ? c_private() result.append(QLocale(*(id.language_id == C ? c_private()
: QLocalePrivate::create(locale_data + index, index)))); : new QLocalePrivate(locale_data + index, index))));
} }
++index; ++index;
} while (filter.acceptLanguage(locale_data[index].m_language_id)); } while (filter.acceptLanguage(locale_data[index].m_language_id));

View File

@ -391,23 +391,14 @@ public:
quint8 m_grouping_least : 3; // Number of digits after last grouping separator (before decimal). 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: public:
static QLocalePrivate *create( constexpr QLocalePrivate(const QLocaleData *data, const uint index,
const QLocaleData *data, const uint index, QLocale::NumberOptions numberOptions = QLocale::DefaultNumberOptions,
QLocale::NumberOptions numberOptions = QLocale::DefaultNumberOptions) int refs = 0)
{ : m_data(data), ref Q_BASIC_ATOMIC_INITIALIZER(refs),
auto *retval = new QLocalePrivate; m_index(index), m_numberOptions(numberOptions) {}
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; }
quint16 languageId() const { return m_data->m_language_id; } quint16 languageId() const { return m_data->m_language_id; }
quint16 countryId() const { return m_data->m_country_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 scriptCode() const { return scriptToCode(QLocale::Script(m_data->m_script_id)); }
inline QLatin1String countryCode() const { return countryToCode(QLocale::Country(m_data->m_country_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 languageToCode(QLocale::Language language);
static QLatin1String scriptToCode(QLocale::Script script); static QLatin1String scriptToCode(QLocale::Script script);
static QLatin1String countryToCode(QLocale::Country country); static QLatin1String countryToCode(QLocale::Country country);
@ -431,9 +423,9 @@ public:
QLocale::MeasurementSystem measurementSystem() const; QLocale::MeasurementSystem measurementSystem() const;
// System locale has an m_data all its own; all others have m_data = locale_data + m_index // 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; QBasicAtomicInt ref;
uint m_index; const uint m_index;
QLocale::NumberOptions m_numberOptions; QLocale::NumberOptions m_numberOptions;
}; };
@ -446,7 +438,7 @@ inline QLocalePrivate *QSharedDataPointer<QLocalePrivate>::clone()
{ {
// cannot use QLocalePrivate's copy constructor // cannot use QLocalePrivate's copy constructor
// since it is deleted in C++11 // 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 inline char QLocaleData::numericToCLocale(QStringView in) const