From 58a4f41af2b27957bc9dac89df21051620e3d2ec Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Tue, 11 Apr 2017 12:25:37 +0200 Subject: QDate/Time: add toString(QStringView) overloads [ChangeLog][QtCore][QDate/QTime/QDateTime] Added toString() overloads taking the format as a QStringView. Change-Id: I322fa22e6b13fe8ba4badf0a3133425bd067ef32 Reviewed-by: Edward Welbourne --- src/corelib/tools/qdatetime.cpp | 51 ++++++++++++++++++++++--- src/corelib/tools/qdatetime.h | 9 +++++ src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp | 4 +- src/printsupport/kernel/qcups.cpp | 2 +- src/testlib/qtest.h | 6 +-- tests/auto/corelib/io/qnodebug/tst_qnodebug.cpp | 2 +- 6 files changed, 62 insertions(+), 12 deletions(-) diff --git a/src/corelib/tools/qdatetime.cpp b/src/corelib/tools/qdatetime.cpp index ab1e3672d6..ba1dacff8f 100644 --- a/src/corelib/tools/qdatetime.cpp +++ b/src/corelib/tools/qdatetime.cpp @@ -70,6 +70,13 @@ QT_BEGIN_NAMESPACE +#if QT_STRINGVIEW_LEVEL < 2 +static inline QStringView quick_stringview_cast(const QString &format) +{ + return QStringView(format.data(), format.size()); // avoids isNull() check as we don't care +} +#endif + /***************************************************************************** Date/Time Constants *****************************************************************************/ @@ -879,6 +886,9 @@ QString QDate::toString(Qt::DateFormat format) const } /*! + \fn QString QDate::toString(const QString &format) const + \fn QString QDate::toString(QStringView format) const + Returns the date as a string. The \a format parameter determines the format of the result string. @@ -927,10 +937,18 @@ QString QDate::toString(Qt::DateFormat format) const \sa fromString(), QDateTime::toString(), QTime::toString(), QLocale::toString() */ -QString QDate::toString(const QString& format) const +QString QDate::toString(QStringView format) const { return QLocale::system().toString(*this, format); // QLocale::c() ### Qt6 } + +#if QT_STRINGVIEW_LEVEL < 2 +QString QDate::toString(const QString &format) const +{ + return toString(quick_stringview_cast(format)); +} +#endif + #endif //QT_NO_DATESTRING /*! @@ -1625,6 +1643,9 @@ QString QTime::toString(Qt::DateFormat format) const } /*! + \fn QString QTime::toString(const QString &format) const + \fn QString QTime::toString(QStringView format) const + Returns the time as a string. The \a format parameter determines the format of the result string. @@ -1675,11 +1696,20 @@ QString QTime::toString(Qt::DateFormat format) const \sa fromString(), QDate::toString(), QDateTime::toString(), QLocale::toString() */ -QString QTime::toString(const QString& format) const +QString QTime::toString(QStringView format) const { return QLocale::system().toString(*this, format); // QLocale::c() ### Qt6 } + +#if QT_STRINGVIEW_VERSION < 2 +QString QTime::toString(const QString &format) const +{ + return toString(quick_stringview_cast(format)); +} +#endif + #endif //QT_NO_DATESTRING + /*! Sets the time to hour \a h, minute \a m, seconds \a s and milliseconds \a ms. @@ -3853,6 +3883,9 @@ QString QDateTime::toString(Qt::DateFormat format) const } /*! + \fn QString QDateTime::toString(const QString &format) const + \fn QString QDateTime::toString(QStringView format) const + Returns the datetime as a string. The \a format parameter determines the format of the result string. @@ -3925,10 +3958,18 @@ QString QDateTime::toString(Qt::DateFormat format) const \sa fromString(), QDate::toString(), QTime::toString(), QLocale::toString() */ -QString QDateTime::toString(const QString& format) const +QString QDateTime::toString(QStringView format) const { return QLocale::system().toString(*this, format); // QLocale::c() ### Qt6 } + +#if QT_STRINGVIEW_LEVEL < 2 +QString QDateTime::toString(const QString &format) const +{ + return toString(quick_stringview_cast(format)); +} +#endif + #endif //QT_NO_DATESTRING static inline void massageAdjustedDateTime(const QDateTimeData &d, QDate *date, QTime *time) @@ -5264,7 +5305,7 @@ QDebug operator<<(QDebug dbg, const QDate &date) QDebug operator<<(QDebug dbg, const QTime &time) { QDebugStateSaver saver(dbg); - dbg.nospace() << "QTime(" << time.toString(QStringLiteral("HH:mm:ss.zzz")) << ')'; + dbg.nospace() << "QTime(" << time.toString(QStringViewLiteral("HH:mm:ss.zzz")) << ')'; return dbg; } @@ -5273,7 +5314,7 @@ QDebug operator<<(QDebug dbg, const QDateTime &date) QDebugStateSaver saver(dbg); const Qt::TimeSpec ts = date.timeSpec(); dbg.nospace() << "QDateTime("; - dbg.noquote() << date.toString(QStringLiteral("yyyy-MM-dd HH:mm:ss.zzz t")) + dbg.noquote() << date.toString(QStringViewLiteral("yyyy-MM-dd HH:mm:ss.zzz t")) << ' ' << ts; switch (ts) { case Qt::UTC: diff --git a/src/corelib/tools/qdatetime.h b/src/corelib/tools/qdatetime.h index c7f14ed40a..e3552f5c82 100644 --- a/src/corelib/tools/qdatetime.h +++ b/src/corelib/tools/qdatetime.h @@ -89,7 +89,10 @@ public: #endif // QT_NO_TEXTDATE #ifndef QT_NO_DATESTRING QString toString(Qt::DateFormat f = Qt::TextDate) const; +#if QT_STRINGVIEW_LEVEL < 2 QString toString(const QString &format) const; +#endif + QString toString(QStringView format) const; #endif #if QT_DEPRECATED_SINCE(5,0) QT_DEPRECATED inline bool setYMD(int y, int m, int d) @@ -162,7 +165,10 @@ public: int msec() const; #ifndef QT_NO_DATESTRING QString toString(Qt::DateFormat f = Qt::TextDate) const; +#if QT_STRINGVIEW_LEVEL < 2 QString toString(const QString &format) const; +#endif + QString toString(QStringView format) const; #endif bool setHMS(int h, int m, int s, int ms = 0); @@ -295,7 +301,10 @@ public: #ifndef QT_NO_DATESTRING QString toString(Qt::DateFormat f = Qt::TextDate) const; +#if QT_STRINGVIEW_LEVEL < 2 QString toString(const QString &format) const; +#endif + QString toString(QStringView format) const; #endif QDateTime addDays(qint64 days) const Q_REQUIRED_RESULT; QDateTime addMonths(int months) const Q_REQUIRED_RESULT; diff --git a/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp b/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp index dd773fb022..e7f9be9e39 100644 --- a/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp +++ b/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp @@ -479,14 +479,14 @@ bool QSQLiteResult::exec() break; case QVariant::DateTime: { const QDateTime dateTime = value.toDateTime(); - const QString str = dateTime.toString(QStringLiteral("yyyy-MM-ddThh:mm:ss.zzz")); + const QString str = dateTime.toString(QStringViewLiteral("yyyy-MM-ddThh:mm:ss.zzz")); res = sqlite3_bind_text16(d->stmt, i + 1, str.utf16(), str.size() * sizeof(ushort), SQLITE_TRANSIENT); break; } case QVariant::Time: { const QTime time = value.toTime(); - const QString str = time.toString(QStringLiteral("hh:mm:ss.zzz")); + const QString str = time.toString(QStringViewLiteral("hh:mm:ss.zzz")); res = sqlite3_bind_text16(d->stmt, i + 1, str.utf16(), str.size() * sizeof(ushort), SQLITE_TRANSIENT); break; diff --git a/src/printsupport/kernel/qcups.cpp b/src/printsupport/kernel/qcups.cpp index d655dd09ba..4bd5c1441a 100644 --- a/src/printsupport/kernel/qcups.cpp +++ b/src/printsupport/kernel/qcups.cpp @@ -98,7 +98,7 @@ static inline QString jobHoldToString(const QCUPSSupport::JobHoldUntil jobHold, if (holdUntilTime < localDateTime.time()) localDateTime = localDateTime.addDays(1); localDateTime.setTime(holdUntilTime); - return localDateTime.toUTC().time().toString(QStringLiteral("HH:mm")); + return localDateTime.toUTC().time().toString(QStringViewLiteral("HH:mm")); } // else fall through: Q_FALLTHROUGH(); diff --git a/src/testlib/qtest.h b/src/testlib/qtest.h index b9bb10818e..94f36c330b 100644 --- a/src/testlib/qtest.h +++ b/src/testlib/qtest.h @@ -83,21 +83,21 @@ template<> inline char *toString(const QByteArray &ba) template<> inline char *toString(const QTime &time) { return time.isValid() - ? qstrdup(qPrintable(time.toString(QLatin1String("hh:mm:ss.zzz")))) + ? qstrdup(qPrintable(time.toString(QStringViewLiteral("hh:mm:ss.zzz")))) : qstrdup("Invalid QTime"); } template<> inline char *toString(const QDate &date) { return date.isValid() - ? qstrdup(qPrintable(date.toString(QLatin1String("yyyy/MM/dd")))) + ? qstrdup(qPrintable(date.toString(QStringViewLiteral("yyyy/MM/dd")))) : qstrdup("Invalid QDate"); } template<> inline char *toString(const QDateTime &dateTime) { return dateTime.isValid() - ? qstrdup(qPrintable(dateTime.toString(QLatin1String("yyyy/MM/dd hh:mm:ss.zzz[t]")))) + ? qstrdup(qPrintable(dateTime.toString(QStringViewLiteral("yyyy/MM/dd hh:mm:ss.zzz[t]")))) : qstrdup("Invalid QDateTime"); } #endif // QT_NO_DATESTRING diff --git a/tests/auto/corelib/io/qnodebug/tst_qnodebug.cpp b/tests/auto/corelib/io/qnodebug/tst_qnodebug.cpp index b0acb1c58d..b78fa29fb6 100644 --- a/tests/auto/corelib/io/qnodebug/tst_qnodebug.cpp +++ b/tests/auto/corelib/io/qnodebug/tst_qnodebug.cpp @@ -64,7 +64,7 @@ void tst_QNoDebug::noDebugOutput() const void tst_QNoDebug::streaming() const { QDateTime dt(QDate(1,2,3),QTime(4,5,6)); - const QByteArray debugString = dt.toString(QStringLiteral("yyyy-MM-dd HH:mm:ss.zzz t")).toLatin1(); + const QByteArray debugString = dt.toString(QStringViewLiteral("yyyy-MM-dd HH:mm:ss.zzz t")).toLatin1(); const QByteArray message = "QDateTime(" + debugString + " Qt::TimeSpec(LocalTime))"; QTest::ignoreMessage(QtWarningMsg, message.constData()); qWarning() << dt; -- cgit v1.2.3