summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2013-04-27 18:18:10 -0700
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-02-14 00:34:25 +0100
commited7458a8a66416c106ad33871a288091058d01ea (patch)
tree6098a3a4804561fe2392d2b7a654ee38069888bb
parent1b26ef0c0c894a720b163333396054a8571e2581 (diff)
QLocalePrivate: move the stringToXxx to QLocaleData
Along with some more helper functions. There are two more functions used in QIntValidator Change-Id: I469ef40426cbb73ab515454bd5ecb12d944f5c0a Reviewed-by: Lars Knoll <lars.knoll@digia.com>
-rw-r--r--src/corelib/tools/qbytearray.cpp6
-rw-r--r--src/corelib/tools/qlocale.cpp68
-rw-r--r--src/corelib/tools/qlocale_p.h72
-rw-r--r--src/corelib/tools/qlocale_tools.cpp2
-rw-r--r--src/corelib/tools/qlocale_tools_p.h2
-rw-r--r--src/corelib/tools/qstring.cpp18
-rw-r--r--src/gui/util/qvalidator.cpp22
7 files changed, 93 insertions, 97 deletions
diff --git a/src/corelib/tools/qbytearray.cpp b/src/corelib/tools/qbytearray.cpp
index 0b645d536b..e9e94c3692 100644
--- a/src/corelib/tools/qbytearray.cpp
+++ b/src/corelib/tools/qbytearray.cpp
@@ -3296,7 +3296,7 @@ qlonglong QByteArray::toLongLong(bool *ok, int base) const
}
#endif
- return QLocalePrivate::bytearrayToLongLong(nulTerminated().constData(), base, ok);
+ return QLocaleData::bytearrayToLongLong(nulTerminated().constData(), base, ok);
}
/*!
@@ -3329,7 +3329,7 @@ qulonglong QByteArray::toULongLong(bool *ok, int base) const
}
#endif
- return QLocalePrivate::bytearrayToUnsLongLong(nulTerminated().constData(), base, ok);
+ return QLocaleData::bytearrayToUnsLongLong(nulTerminated().constData(), base, ok);
}
@@ -3544,7 +3544,7 @@ ushort QByteArray::toUShort(bool *ok, int base) const
double QByteArray::toDouble(bool *ok) const
{
- return QLocalePrivate::bytearrayToDouble(nulTerminated().constData(), ok);
+ return QLocaleData::bytearrayToDouble(nulTerminated().constData(), ok);
}
/*!
diff --git a/src/corelib/tools/qlocale.cpp b/src/corelib/tools/qlocale.cpp
index ef69442ca1..ace22272ec 100644
--- a/src/corelib/tools/qlocale.cpp
+++ b/src/corelib/tools/qlocale.cpp
@@ -1232,12 +1232,12 @@ uint QLocale::toUInt(const QString &s, bool *ok) const
qlonglong QLocale::toLongLong(const QString &s, bool *ok) const
{
- QLocalePrivate::GroupSeparatorMode mode
+ QLocaleData::GroupSeparatorMode mode
= d->m_numberOptions & RejectGroupSeparator
- ? QLocalePrivate::FailOnGroupSeparators
- : QLocalePrivate::ParseGroupSeparators;
+ ? QLocaleData::FailOnGroupSeparators
+ : QLocaleData::ParseGroupSeparators;
- return d->stringToLongLong(s.constData(), s.size(), 10, ok, mode);
+ return d->m_data->stringToLongLong(s.constData(), s.size(), 10, ok, mode);
}
/*!
@@ -1256,12 +1256,12 @@ qlonglong QLocale::toLongLong(const QString &s, bool *ok) const
qulonglong QLocale::toULongLong(const QString &s, bool *ok) const
{
- QLocalePrivate::GroupSeparatorMode mode
+ QLocaleData::GroupSeparatorMode mode
= d->m_numberOptions & RejectGroupSeparator
- ? QLocalePrivate::FailOnGroupSeparators
- : QLocalePrivate::ParseGroupSeparators;
+ ? QLocaleData::FailOnGroupSeparators
+ : QLocaleData::ParseGroupSeparators;
- return d->stringToUnsLongLong(s.constData(), s.size(), 10, ok, mode);
+ return d->m_data->stringToUnsLongLong(s.constData(), s.size(), 10, ok, mode);
}
/*!
@@ -1315,12 +1315,12 @@ float QLocale::toFloat(const QString &s, bool *ok) const
double QLocale::toDouble(const QString &s, bool *ok) const
{
- QLocalePrivate::GroupSeparatorMode mode
+ QLocaleData::GroupSeparatorMode mode
= d->m_numberOptions & RejectGroupSeparator
- ? QLocalePrivate::FailOnGroupSeparators
- : QLocalePrivate::ParseGroupSeparators;
+ ? QLocaleData::FailOnGroupSeparators
+ : QLocaleData::ParseGroupSeparators;
- return d->stringToDouble(s.constData(), s.size(), ok, mode);
+ return d->m_data->stringToDouble(s.constData(), s.size(), ok, mode);
}
/*!
@@ -1445,12 +1445,12 @@ uint QLocale::toUInt(const QStringRef &s, bool *ok) const
qlonglong QLocale::toLongLong(const QStringRef &s, bool *ok) const
{
- QLocalePrivate::GroupSeparatorMode mode
+ QLocaleData::GroupSeparatorMode mode
= d->m_numberOptions & RejectGroupSeparator
- ? QLocalePrivate::FailOnGroupSeparators
- : QLocalePrivate::ParseGroupSeparators;
+ ? QLocaleData::FailOnGroupSeparators
+ : QLocaleData::ParseGroupSeparators;
- return d->stringToLongLong(s.constData(), s.size(), 10, ok, mode);
+ return d->m_data->stringToLongLong(s.constData(), s.size(), 10, ok, mode);
}
/*!
@@ -1471,12 +1471,12 @@ qlonglong QLocale::toLongLong(const QStringRef &s, bool *ok) const
qulonglong QLocale::toULongLong(const QStringRef &s, bool *ok) const
{
- QLocalePrivate::GroupSeparatorMode mode
+ QLocaleData::GroupSeparatorMode mode
= d->m_numberOptions & RejectGroupSeparator
- ? QLocalePrivate::FailOnGroupSeparators
- : QLocalePrivate::ParseGroupSeparators;
+ ? QLocaleData::FailOnGroupSeparators
+ : QLocaleData::ParseGroupSeparators;
- return d->stringToUnsLongLong(s.constData(), s.size(), 10, ok, mode);
+ return d->m_data->stringToUnsLongLong(s.constData(), s.size(), 10, ok, mode);
}
/*!
@@ -1532,12 +1532,12 @@ float QLocale::toFloat(const QStringRef &s, bool *ok) const
double QLocale::toDouble(const QStringRef &s, bool *ok) const
{
- QLocalePrivate::GroupSeparatorMode mode
+ QLocaleData::GroupSeparatorMode mode
= d->m_numberOptions & RejectGroupSeparator
- ? QLocalePrivate::FailOnGroupSeparators
- : QLocalePrivate::ParseGroupSeparators;
+ ? QLocaleData::FailOnGroupSeparators
+ : QLocaleData::ParseGroupSeparators;
- return d->stringToDouble(s.constData(), s.size(), ok, mode);
+ return d->m_data->stringToDouble(s.constData(), s.size(), ok, mode);
}
@@ -3091,7 +3091,7 @@ QString QLocaleData::unsLongLongToString(const QChar zero, const QChar group,
number. We can't detect junk here, since we don't even know the base
of the number.
*/
-bool QLocalePrivate::numberToCLocale(const QChar *str, int len,
+bool QLocaleData::numberToCLocale(const QChar *str, int len,
GroupSeparatorMode group_sep_mode,
CharBuff *result) const
{
@@ -3116,9 +3116,9 @@ bool QLocalePrivate::numberToCLocale(const QChar *str, int len,
char out = digitToCLocale(in);
if (out == 0) {
- if (in == list())
+ if (in == m_list)
out = ';';
- else if (in == percent())
+ else if (in == m_percent)
out = '%';
// for handling base-x numbers
else if (in.unicode() >= 'A' && in.unicode() <= 'Z')
@@ -3145,7 +3145,7 @@ bool QLocalePrivate::numberToCLocale(const QChar *str, int len,
return idx == l;
}
-bool QLocalePrivate::validateChars(const QString &str, NumberMode numMode, QByteArray *buff,
+bool QLocaleData::validateChars(const QString &str, NumberMode numMode, QByteArray *buff,
int decDigits) const
{
buff->clear();
@@ -3238,7 +3238,7 @@ bool QLocalePrivate::validateChars(const QString &str, NumberMode numMode, QByte
return true;
}
-double QLocalePrivate::stringToDouble(const QChar *begin, int len, bool *ok,
+double QLocaleData::stringToDouble(const QChar *begin, int len, bool *ok,
GroupSeparatorMode group_sep_mode) const
{
CharBuff buff;
@@ -3250,7 +3250,7 @@ double QLocalePrivate::stringToDouble(const QChar *begin, int len, bool *ok,
return bytearrayToDouble(buff.constData(), ok);
}
-qlonglong QLocalePrivate::stringToLongLong(const QChar *begin, int len, int base,
+qlonglong QLocaleData::stringToLongLong(const QChar *begin, int len, int base,
bool *ok, GroupSeparatorMode group_sep_mode) const
{
CharBuff buff;
@@ -3263,7 +3263,7 @@ qlonglong QLocalePrivate::stringToLongLong(const QChar *begin, int len, int base
return bytearrayToLongLong(buff.constData(), base, ok);
}
-qulonglong QLocalePrivate::stringToUnsLongLong(const QChar *begin, int len, int base,
+qulonglong QLocaleData::stringToUnsLongLong(const QChar *begin, int len, int base,
bool *ok, GroupSeparatorMode group_sep_mode) const
{
CharBuff buff;
@@ -3276,7 +3276,7 @@ qulonglong QLocalePrivate::stringToUnsLongLong(const QChar *begin, int len, int
return bytearrayToUnsLongLong(buff.constData(), base, ok);
}
-double QLocalePrivate::bytearrayToDouble(const char *num, bool *ok, bool *overflow)
+double QLocaleData::bytearrayToDouble(const char *num, bool *ok, bool *overflow)
{
if (ok != 0)
*ok = true;
@@ -3328,7 +3328,7 @@ double QLocalePrivate::bytearrayToDouble(const char *num, bool *ok, bool *overfl
return d;
}
-qlonglong QLocalePrivate::bytearrayToLongLong(const char *num, int base, bool *ok, bool *overflow)
+qlonglong QLocaleData::bytearrayToLongLong(const char *num, int base, bool *ok, bool *overflow)
{
bool _ok;
const char *endptr;
@@ -3370,7 +3370,7 @@ qlonglong QLocalePrivate::bytearrayToLongLong(const char *num, int base, bool *o
return l;
}
-qulonglong QLocalePrivate::bytearrayToUnsLongLong(const char *num, int base, bool *ok)
+qulonglong QLocaleData::bytearrayToUnsLongLong(const char *num, int base, bool *ok)
{
bool _ok;
const char *endptr;
diff --git a/src/corelib/tools/qlocale_p.h b/src/corelib/tools/qlocale_p.h
index 0063990125..ac12f03356 100644
--- a/src/corelib/tools/qlocale_p.h
+++ b/src/corelib/tools/qlocale_p.h
@@ -188,6 +188,15 @@ public:
ForcePoint = Alternate
};
+ enum GroupSeparatorMode {
+ FailOnGroupSeparators,
+ ParseGroupSeparators
+ };
+
+ enum NumberMode { IntegerMode, DoubleStandardMode, DoubleScientificMode };
+
+ typedef QVarLengthArray<char, 256> CharBuff;
+
static QString doubleToString(const QChar zero, const QChar plus,
const QChar minus, const QChar exponent,
const QChar group, const QChar decimal,
@@ -218,6 +227,24 @@ public:
int width = -1,
unsigned flags = NoFlags) const;
+ double stringToDouble(const QChar *begin, int len, bool *ok, GroupSeparatorMode group_sep_mode) const;
+ qint64 stringToLongLong(const QChar *begin, int len, int base, bool *ok, GroupSeparatorMode group_sep_mode) const;
+ quint64 stringToUnsLongLong(const QChar *begin, int len, int base, bool *ok, GroupSeparatorMode group_sep_mode) const;
+
+ // these functions are used in QIntValidator (QtGui)
+ Q_CORE_EXPORT static double bytearrayToDouble(const char *num, bool *ok, bool *overflow = 0);
+ Q_CORE_EXPORT static qint64 bytearrayToLongLong(const char *num, int base, bool *ok, bool *overflow = 0);
+ Q_CORE_EXPORT static quint64 bytearrayToUnsLongLong(const char *num, int base, bool *ok);
+
+ bool numberToCLocale(const QChar *str, int len,
+ GroupSeparatorMode group_sep_mode,
+ CharBuff *result) const;
+ inline char digitToCLocale(QChar c) const;
+
+ // this function is used in QIntValidator (QtGui)
+ Q_CORE_EXPORT bool validateChars(const QString &str, NumberMode numMode, QByteArray *buff, int decDigits = -1) const;
+
+public:
quint16 m_language_id, m_script_id, m_country_id;
quint16 m_decimal, m_group, m_list, m_percent, m_zero, m_minus, m_plus, m_exponential;
@@ -302,30 +329,8 @@ public:
QLocale::MeasurementSystem measurementSystem() const;
- enum GroupSeparatorMode {
- FailOnGroupSeparators,
- ParseGroupSeparators
- };
-
- double stringToDouble(const QChar *begin, int len, bool *ok, GroupSeparatorMode group_sep_mode) const;
- qint64 stringToLongLong(const QChar *begin, int len, int base, bool *ok, GroupSeparatorMode group_sep_mode) const;
- quint64 stringToUnsLongLong(const QChar *begin, int len, int base, bool *ok, GroupSeparatorMode group_sep_mode) const;
-
- static double bytearrayToDouble(const char *num, bool *ok, bool *overflow = 0);
- static qint64 bytearrayToLongLong(const char *num, int base, bool *ok, bool *overflow = 0);
- static quint64 bytearrayToUnsLongLong(const char *num, int base, bool *ok);
-
- typedef QVarLengthArray<char, 256> CharBuff;
- bool numberToCLocale(const QChar *str, int len,
- GroupSeparatorMode group_sep_mode,
- CharBuff *result) const;
- inline char digitToCLocale(QChar c) const;
-
static void updateSystemPrivate();
- enum NumberMode { IntegerMode, DoubleStandardMode, DoubleScientificMode };
- bool validateChars(const QString &str, NumberMode numMode, QByteArray *buff, int decDigits = -1) const;
-
QString dateTimeToString(const QString &format, const QDateTime &datetime,
const QDate &dateOnly, const QTime &timeOnly,
const QLocale *q) const;
@@ -343,37 +348,34 @@ inline QLocalePrivate *QSharedDataPointer<QLocalePrivate>::clone()
return QLocalePrivate::create(d->m_data, d->m_numberOptions);
}
-inline char QLocalePrivate::digitToCLocale(QChar in) const
+inline char QLocaleData::digitToCLocale(QChar in) const
{
- const QChar _zero = zero();
- const QChar _group = group();
- const ushort zeroUnicode = _zero.unicode();
- const ushort tenUnicode = zeroUnicode + 10;
+ const ushort tenUnicode = m_zero + 10;
- if (in.unicode() >= zeroUnicode && in.unicode() < tenUnicode)
- return '0' + in.unicode() - zeroUnicode;
+ if (in.unicode() >= m_zero && in.unicode() < tenUnicode)
+ return '0' + in.unicode() - m_zero;
if (in.unicode() >= '0' && in.unicode() <= '9')
return in.toLatin1();
- if (in == plus() || in == QLatin1Char('+'))
+ if (in == m_plus || in == QLatin1Char('+'))
return '+';
- if (in == minus() || in == QLatin1Char('-') || in == QChar(0x2212))
+ if (in == m_minus || in == QLatin1Char('-') || in == QChar(0x2212))
return '-';
- if (in == decimal())
+ if (in == m_decimal)
return '.';
- if (in == group())
+ if (in == m_group)
return ',';
- if (in == exponential() || in == exponential().toUpper())
+ if (in == m_exponential || in == QChar::toUpper(m_exponential))
return 'e';
// In several languages group() is the char 0xA0, which looks like a space.
// People use a regular space instead of it and complain it doesn't work.
- if (_group.unicode() == 0xA0 && in.unicode() == ' ')
+ if (m_group == 0xA0 && in.unicode() == ' ')
return ',';
return 0;
diff --git a/src/corelib/tools/qlocale_tools.cpp b/src/corelib/tools/qlocale_tools.cpp
index 81f9d20db7..8a5c4420dc 100644
--- a/src/corelib/tools/qlocale_tools.cpp
+++ b/src/corelib/tools/qlocale_tools.cpp
@@ -185,7 +185,7 @@ QString &exponentForm(QChar zero, QChar decimal, QChar exponential,
}
// Removes thousand-group separators in "C" locale.
-bool removeGroupSeparators(QLocalePrivate::CharBuff *num)
+bool removeGroupSeparators(QLocaleData::CharBuff *num)
{
int group_cnt = 0; // counts number of group chars
int decpt_idx = -1;
diff --git a/src/corelib/tools/qlocale_tools_p.h b/src/corelib/tools/qlocale_tools_p.h
index cb47bfcb5e..ee66b27eb8 100644
--- a/src/corelib/tools/qlocale_tools_p.h
+++ b/src/corelib/tools/qlocale_tools_p.h
@@ -105,7 +105,7 @@ inline bool isZero(double d)
}
// Removes thousand-group separators in "C" locale.
-bool removeGroupSeparators(QLocalePrivate::CharBuff *num);
+bool removeGroupSeparators(QLocaleData::CharBuff *num);
Q_CORE_EXPORT char *qdtoa(double d, int mode, int ndigits, int *decpt,
int *sign, char **rve, char **digits_str);
diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp
index f02b09b836..0c0bcac1b6 100644
--- a/src/corelib/tools/qstring.cpp
+++ b/src/corelib/tools/qstring.cpp
@@ -6075,8 +6075,7 @@ qint64 QString::toLongLong(bool *ok, int base) const
}
#endif
- QLocale c_locale(QLocale::C);
- return c_locale.d->stringToLongLong(constData(), size(), base, ok, QLocalePrivate::FailOnGroupSeparators);
+ return QLocaleData::c()->stringToLongLong(constData(), size(), base, ok, QLocaleData::FailOnGroupSeparators);
}
/*!
@@ -6110,8 +6109,7 @@ quint64 QString::toULongLong(bool *ok, int base) const
}
#endif
- QLocale c_locale(QLocale::C);
- return c_locale.d->stringToUnsLongLong(constData(), size(), base, ok, QLocalePrivate::FailOnGroupSeparators);
+ return QLocaleData::c()->stringToUnsLongLong(constData(), size(), base, ok, QLocaleData::FailOnGroupSeparators);
}
/*!
@@ -6349,8 +6347,7 @@ ushort QString::toUShort(bool *ok, int base) const
double QString::toDouble(bool *ok) const
{
- QLocale c_locale(QLocale::C);
- return c_locale.d->stringToDouble(constData(), size(), ok, QLocalePrivate::FailOnGroupSeparators);
+ return QLocaleData::c()->stringToDouble(constData(), size(), ok, QLocaleData::FailOnGroupSeparators);
}
/*!
@@ -9616,8 +9613,7 @@ qint64 QStringRef::toLongLong(bool *ok, int base) const
}
#endif
- QLocale c_locale(QLocale::C);
- return c_locale.d->stringToLongLong(constData(), size(), base, ok, QLocalePrivate::FailOnGroupSeparators);
+ return QLocaleData::c()->stringToLongLong(constData(), size(), base, ok, QLocaleData::FailOnGroupSeparators);
}
/*!
@@ -9649,8 +9645,7 @@ quint64 QStringRef::toULongLong(bool *ok, int base) const
}
#endif
- QLocale c_locale(QLocale::C);
- return c_locale.d->stringToUnsLongLong(constData(), size(), base, ok, QLocalePrivate::FailOnGroupSeparators);
+ return QLocaleData::c()->stringToUnsLongLong(constData(), size(), base, ok, QLocaleData::FailOnGroupSeparators);
}
/*!
@@ -9867,8 +9862,7 @@ ushort QStringRef::toUShort(bool *ok, int base) const
double QStringRef::toDouble(bool *ok) const
{
- QLocale c_locale(QLocale::C);
- return c_locale.d->stringToDouble(constData(), size(), ok, QLocalePrivate::FailOnGroupSeparators);
+ return QLocaleData::c()->stringToDouble(constData(), size(), ok, QLocaleData::FailOnGroupSeparators);
}
/*!
diff --git a/src/gui/util/qvalidator.cpp b/src/gui/util/qvalidator.cpp
index ed3b3b6dd6..dbb8575397 100644
--- a/src/gui/util/qvalidator.cpp
+++ b/src/gui/util/qvalidator.cpp
@@ -401,7 +401,7 @@ static qlonglong pow10(int exp)
QValidator::State QIntValidator::validate(QString & input, int&) const
{
QByteArray buff;
- if (!locale().d->validateChars(input, QLocalePrivate::IntegerMode, &buff)) {
+ if (!locale().d->m_data->validateChars(input, QLocaleData::IntegerMode, &buff)) {
return Invalid;
}
@@ -418,7 +418,7 @@ QValidator::State QIntValidator::validate(QString & input, int&) const
return Intermediate;
bool ok, overflow;
- qlonglong entered = QLocalePrivate::bytearrayToLongLong(buff.constData(), 10, &ok, &overflow);
+ qlonglong entered = QLocaleData::bytearrayToLongLong(buff.constData(), 10, &ok, &overflow);
if (overflow || !ok)
return Invalid;
@@ -440,11 +440,11 @@ QValidator::State QIntValidator::validate(QString & input, int&) const
void QIntValidator::fixup(QString &input) const
{
QByteArray buff;
- if (!locale().d->validateChars(input, QLocalePrivate::IntegerMode, &buff)) {
+ if (!locale().d->m_data->validateChars(input, QLocaleData::IntegerMode, &buff)) {
return;
}
bool ok, overflow;
- qlonglong entered = QLocalePrivate::bytearrayToLongLong(buff.constData(), 10, &ok, &overflow);
+ qlonglong entered = QLocaleData::bytearrayToLongLong(buff.constData(), 10, &ok, &overflow);
if (ok && !overflow)
input = locale().toString(entered);
}
@@ -532,7 +532,7 @@ public:
QDoubleValidator::Notation notation;
- QValidator::State validateWithLocale(QString & input, QLocalePrivate::NumberMode numMode, const QLocale &locale) const;
+ QValidator::State validateWithLocale(QString & input, QLocaleData::NumberMode numMode, const QLocale &locale) const;
};
@@ -639,24 +639,24 @@ QValidator::State QDoubleValidator::validate(QString & input, int &) const
{
Q_D(const QDoubleValidator);
- QLocalePrivate::NumberMode numMode = QLocalePrivate::DoubleStandardMode;
+ QLocaleData::NumberMode numMode = QLocaleData::DoubleStandardMode;
switch (d->notation) {
case StandardNotation:
- numMode = QLocalePrivate::DoubleStandardMode;
+ numMode = QLocaleData::DoubleStandardMode;
break;
case ScientificNotation:
- numMode = QLocalePrivate::DoubleScientificMode;
+ numMode = QLocaleData::DoubleScientificMode;
break;
}
return d->validateWithLocale(input, numMode, locale());
}
-QValidator::State QDoubleValidatorPrivate::validateWithLocale(QString &input, QLocalePrivate::NumberMode numMode, const QLocale &locale) const
+QValidator::State QDoubleValidatorPrivate::validateWithLocale(QString &input, QLocaleData::NumberMode numMode, const QLocale &locale) const
{
Q_Q(const QDoubleValidator);
QByteArray buff;
- if (!locale.d->validateChars(input, numMode, &buff, q->dec))
+ if (!locale.d->m_data->validateChars(input, numMode, &buff, q->dec))
return QValidator::Invalid;
if (buff.isEmpty())
@@ -669,7 +669,7 @@ QValidator::State QDoubleValidatorPrivate::validateWithLocale(QString &input, QL
return QValidator::Invalid;
bool ok, overflow;
- double i = QLocalePrivate::bytearrayToDouble(buff.constData(), &ok, &overflow);
+ double i = QLocaleData::bytearrayToDouble(buff.constData(), &ok, &overflow);
if (overflow)
return QValidator::Invalid;
if (!ok)