optimize QString::number()

Signed-off-by: Ivailo Monev <xakepa10@laimg.moc>
This commit is contained in:
Ivailo Monev 2019-07-16 21:30:08 +00:00
parent 53e5868862
commit 39ba7c8e38

View file

@ -5489,14 +5489,7 @@ float QString::toFloat(bool *ok) const
*/ */
QString &QString::setNum(qlonglong n, int base) QString &QString::setNum(qlonglong n, int base)
{ {
#if defined(QT_CHECK_RANGE) *this = QString::number(n, base);
if (Q_UNLIKELY(base < 2 || base > 36)) {
qWarning("QString::setNum: Invalid base (%d)", base);
base = 10;
}
#endif
QLocale locale(QLocale::C);
*this = locale.d()->longLongToString(n, -1, base);
return *this; return *this;
} }
@ -5505,14 +5498,7 @@ QString &QString::setNum(qlonglong n, int base)
*/ */
QString &QString::setNum(qulonglong n, int base) QString &QString::setNum(qulonglong n, int base)
{ {
#if defined(QT_CHECK_RANGE) *this = QString::number(n, base);
if (Q_UNLIKELY(base < 2 || base > 36)) {
qWarning("QString::setNum: Invalid base (%d)", base);
base = 10;
}
#endif
QLocale locale(QLocale::C);
*this = locale.d()->unsLongLongToString(n, -1, base);
return *this; return *this;
} }
@ -5543,32 +5529,7 @@ QString &QString::setNum(qulonglong n, int base)
QString &QString::setNum(double n, char f, int prec) QString &QString::setNum(double n, char f, int prec)
{ {
QLocalePrivate::DoubleForm form = QLocalePrivate::DFDecimal; *this = QString::number(n, f, prec);
uint flags = 0;
if (qIsUpper(f))
flags = QLocalePrivate::CapitalEorX;
f = qToLower(f);
switch (f) {
case 'f':
form = QLocalePrivate::DFDecimal;
break;
case 'e':
form = QLocalePrivate::DFExponent;
break;
case 'g':
form = QLocalePrivate::DFSignificantDigits;
break;
default:
#if defined(QT_CHECK_RANGE)
qWarning("QString::setNum: Invalid format char '%c'", f);
#endif
break;
}
QLocale locale(QLocale::C);
*this = locale.d()->doubleToString(n, prec, form, -1, flags);
return *this; return *this;
} }
@ -5599,9 +5560,7 @@ QString &QString::setNum(double n, char f, int prec)
QString QString::number(long n, int base) QString QString::number(long n, int base)
{ {
QString s; return number(qlonglong(n), base);
s.setNum(n, base);
return s;
} }
/*! /*!
@ -5611,9 +5570,7 @@ QString QString::number(long n, int base)
*/ */
QString QString::number(ulong n, int base) QString QString::number(ulong n, int base)
{ {
QString s; return number(qulonglong(n), base);
s.setNum(n, base);
return s;
} }
/*! /*!
@ -5621,9 +5578,7 @@ QString QString::number(ulong n, int base)
*/ */
QString QString::number(int n, int base) QString QString::number(int n, int base)
{ {
QString s; return number(qlonglong(n), base);
s.setNum(n, base);
return s;
} }
/*! /*!
@ -5631,9 +5586,7 @@ QString QString::number(int n, int base)
*/ */
QString QString::number(uint n, int base) QString QString::number(uint n, int base)
{ {
QString s; return number(qulonglong(n), base);
s.setNum(n, base);
return s;
} }
/*! /*!
@ -5641,9 +5594,14 @@ QString QString::number(uint n, int base)
*/ */
QString QString::number(qlonglong n, int base) QString QString::number(qlonglong n, int base)
{ {
QString s; #if defined(QT_CHECK_RANGE)
s.setNum(n, base); if (Q_UNLIKELY(base < 2 || base > 36)) {
return s; qWarning("QString::number: Invalid base (%d)", base);
base = 10;
}
#endif
QLocale locale(QLocale::C);
return locale.d()->longLongToString(n, -1, base);
} }
/*! /*!
@ -5651,9 +5609,14 @@ QString QString::number(qlonglong n, int base)
*/ */
QString QString::number(qulonglong n, int base) QString QString::number(qulonglong n, int base)
{ {
QString s; #if defined(QT_CHECK_RANGE)
s.setNum(n, base); if (Q_UNLIKELY(base < 2 || base > 36)) {
return s; qWarning("QString::number: Invalid base (%d)", base);
base = 10;
}
#endif
QLocale locale(QLocale::C);
return locale.d()->unsLongLongToString(n, -1, base);
} }
@ -5671,9 +5634,32 @@ QString QString::number(qulonglong n, int base)
*/ */
QString QString::number(double n, char f, int prec) QString QString::number(double n, char f, int prec)
{ {
QString s; QLocalePrivate::DoubleForm form = QLocalePrivate::DFDecimal;
s.setNum(n, f, prec); uint flags = 0;
return s;
if (qIsUpper(f))
flags = QLocalePrivate::CapitalEorX;
f = qToLower(f);
switch (f) {
case 'f':
form = QLocalePrivate::DFDecimal;
break;
case 'e':
form = QLocalePrivate::DFExponent;
break;
case 'g':
form = QLocalePrivate::DFSignificantDigits;
break;
default:
#if defined(QT_CHECK_RANGE)
qWarning("QString::number: Invalid format char '%c'", f);
#endif
break;
}
QLocale locale(QLocale::C);
return locale.d()->doubleToString(n, prec, form, -1, flags);
} }
/*! /*!