Add numeric conversion methods to QLatin1String

[ChangeLog][QtCore][QLatin1String] Added numeric conversion
methods.

Task-number: QTBUG-98433
Change-Id: I414577ae715debe3d5ba9c6a160859aca790e017
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
This commit is contained in:
Sona Kurazyan 2022-02-22 09:03:19 +01:00
parent bb30beb726
commit f39f539858
3 changed files with 89 additions and 0 deletions

View File

@ -10130,6 +10130,62 @@ QString &QString::setRawData(const QChar *unicode, qsizetype size)
equal to string \a s2; otherwise returns \c false.
*/
/*!
\fn qlonglong QLatin1String::toLongLong(bool *ok, int base) const
\fn qulonglong QLatin1String::toULongLong(bool *ok, int base) const
\fn int QLatin1String::toInt(bool *ok, int base) const
\fn uint QLatin1String::toUInt(bool *ok, int base) const
\fn long QLatin1String::toLong(bool *ok, int base) const
\fn ulong QLatin1String::toULong(bool *ok, int base) const
\fn short QLatin1String::toShort(bool *ok, int base) const
\fn ushort QLatin1String::toUShort(bool *ok, int base) const
\since 6.4
Returns this QLatin1String converted to a corresponding numeric value using
base \a base, which is ten by default. Bases 0 and 2 through 36 are supported,
using letters for digits beyond 9; A is ten, B is eleven and so on.
If \a base is 0, the base is determined automatically using the following
rules: if the Latin-1 string begins with "0x", the rest of it is read as
hexadecimal (base 16); otherwise, if it begins with "0", the rest of it is
read as octal (base 8); otherwise it is read as decimal.
Returns 0 if the conversion fails.
If \a ok is not \nullptr, failure is reported by setting *\a{ok}
to \c false, and success by setting *\a{ok} to \c true.
//! [latin1-numeric-conversion-note]
\note The conversion of the number is performed in the default C locale,
regardless of the user's locale. Use QLocale to perform locale-aware
conversions between numbers and strings.
This function ignores leading and trailing spacing characters.
//! [latin1-numeric-conversion-note]
*/
/*!
\fn double QLatin1String::toDouble(bool *ok) const
\fn float QLatin1String::toFloat(bool *ok) const
\since 6.4
Returns this QLatin1String converted to a corresponding floating-point value.
Returns an infinity if the conversion overflows or 0.0 if the
conversion fails for other reasons (e.g. underflow).
If \a ok is not \nullptr, failure is reported by setting *\a{ok}
to \c false, and success by setting *\a{ok} to \c true.
\warning The QLatin1String content may only contain valid numerical
characters which includes the plus/minus sign, the character e used in
scientific notation, and the decimal point. Including the unit or additional
characters leads to a conversion error.
\include qstring.cpp latin1-numeric-conversion-note
*/
#if !defined(QT_NO_DATASTREAM) || defined(QT_BOOTSTRAPPED)
/*!
\fn QDataStream &operator<<(QDataStream &stream, const QString &string)

View File

@ -177,6 +177,37 @@ public:
[[nodiscard]] qsizetype lastIndexOf(QChar c, qsizetype from, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
{ return QtPrivate::lastIndexOf(*this, from, QStringView(&c, 1), cs); }
[[nodiscard]] short toShort(bool *ok = nullptr, int base = 10) const
{ return QtPrivate::toIntegral<short>(QByteArrayView(*this), ok, base); }
[[nodiscard]] ushort toUShort(bool *ok = nullptr, int base = 10) const
{ return QtPrivate::toIntegral<ushort>(QByteArrayView(*this), ok, base); }
[[nodiscard]] int toInt(bool *ok = nullptr, int base = 10) const
{ return QtPrivate::toIntegral<int>(QByteArrayView(*this), ok, base); }
[[nodiscard]] uint toUInt(bool *ok = nullptr, int base = 10) const
{ return QtPrivate::toIntegral<uint>(QByteArrayView(*this), ok, base); }
[[nodiscard]] long toLong(bool *ok = nullptr, int base = 10) const
{ return QtPrivate::toIntegral<long>(QByteArrayView(*this), ok, base); }
[[nodiscard]] ulong toULong(bool *ok = nullptr, int base = 10) const
{ return QtPrivate::toIntegral<ulong>(QByteArrayView(*this), ok, base); }
[[nodiscard]] qlonglong toLongLong(bool *ok = nullptr, int base = 10) const
{ return QtPrivate::toIntegral<qlonglong>(QByteArrayView(*this), ok, base); }
[[nodiscard]] qulonglong toULongLong(bool *ok = nullptr, int base = 10) const
{ return QtPrivate::toIntegral<qulonglong>(QByteArrayView(*this), ok, base); }
[[nodiscard]] float toFloat(bool *ok = nullptr) const
{
const auto r = QtPrivate::toFloat(*this);
if (ok)
*ok = bool(r);
return r.value_or(0.0f);
}
[[nodiscard]] double toDouble(bool *ok = nullptr) const
{
const auto r = QtPrivate::toDouble(*this);
if (ok)
*ok = bool(r);
return r.value_or(0.0);
}
using value_type = const char;
using reference = value_type&;
using const_reference = reference;

View File

@ -714,6 +714,8 @@ private Q_SLOTS:
void toNumber_QStringView() { toNumber_impl<QStringView>(); }
void toNumber_QByteArray_data() { toNumber_data(); }
void toNumber_QByteArray() { toNumber_impl<QByteArray>(); }
void toNumber_QLatin1String_data() { toNumber_data(); }
void toNumber_QLatin1String() { toNumber_impl<QLatin1String>(); }
private:
void count_data();