From 59db912e860ddd045ea779fa579f2915535d0cf7 Mon Sep 17 00:00:00 2001 From: Ivan Solovev Date: Thu, 25 Jan 2024 17:09:07 +0100 Subject: [PATCH] QDate(Time)?::fromString(): do not use QCalendar as a default argument QCalendar is not a trivial type, so using it as a default argument in various fromString() overloads introduces an extra overhead. In this case the function actually always needs a QCalendar object, and a default-constructed QCalendar reproduces a valid gregorian calendar. But getting rid of a default argument still gives us the benefit of constructing the object only in the library, not at every call site. So, split each overload into two - with and without a QCalendar argument. Amends 41f84f3ddb780ec751e3fc706dd242fc4a99de7a Found in 6.7 API review Pick-to: 6.7 Change-Id: I7329276cbda0e5471dc5348af92fc8c9ca4e0738 Reviewed-by: Thiago Macieira Reviewed-by: Marc Mutz --- src/corelib/time/qdatetime.cpp | 54 ++++++++++++++++++++++++++++++++++ src/corelib/time/qdatetime.h | 34 +++++++++++++-------- 2 files changed, 76 insertions(+), 12 deletions(-) diff --git a/src/corelib/time/qdatetime.cpp b/src/corelib/time/qdatetime.cpp index cdb88a72d5e..1f401948cc1 100644 --- a/src/corelib/time/qdatetime.cpp +++ b/src/corelib/time/qdatetime.cpp @@ -1844,6 +1844,33 @@ QDate QDate::fromString(const QString &string, QStringView format, int baseYear, \overload \since 6.7 */ + +/*! + \fn QDate QDate::fromString(QStringView string, QStringView format, int baseYear) + \overload + \since 6.7 + + Uses a default-constructed QCalendar. +*/ + +/*! + \overload + \since 6.7 + + Uses a default-constructed QCalendar. +*/ +QDate QDate::fromString(const QString &string, QStringView format, int baseYear) +{ + return fromString(string, format, baseYear, QCalendar()); +} + +/*! + \fn QDate QDate::fromString(const QString &string, const QString &format, int baseYear) + \overload + \since 6.7 + + Uses a default-constructed QCalendar. +*/ #endif // datestring /*! @@ -5848,6 +5875,33 @@ QDateTime QDateTime::fromString(const QString &string, QStringView format, int b \overload \since 6.7 */ + +/*! + \fn QDateTime QDateTime::fromString(QStringView string, QStringView format, int baseYear) + \overload + \since 6.7 + + Uses a default-constructed QCalendar. +*/ + +/*! + \overload + \since 6.7 + + Uses a default-constructed QCalendar. +*/ +QDateTime QDateTime::fromString(const QString &string, QStringView format, int baseYear) +{ + return fromString(string, format, baseYear, QCalendar()); +} + +/*! + \fn QDateTime QDateTime::fromString(const QString &string, const QString &format, int baseYear) + \overload + \since 6.7 + + Uses a default-constructed QCalendar. +*/ #endif // datestring /***************************************************************************** diff --git a/src/corelib/time/qdatetime.h b/src/corelib/time/qdatetime.h index 518705fca72..cec7771a8d8 100644 --- a/src/corelib/time/qdatetime.h +++ b/src/corelib/time/qdatetime.h @@ -144,15 +144,20 @@ public: // Overriding base year is likely more common than overriding calendar (and // likely to get more so, as the legacy base drops ever further behind us). static QDate fromString(QStringView string, QStringView format, - int baseYear = QLocale::DefaultTwoDigitBaseYear, - QCalendar cal = QCalendar()) + int baseYear = QLocale::DefaultTwoDigitBaseYear) + { return fromString(string.toString(), format, baseYear); } + static QDate fromString(QStringView string, QStringView format, + int baseYear, QCalendar cal) { return fromString(string.toString(), format, baseYear, cal); } static QDate fromString(const QString &string, QStringView format, - int baseYear = QLocale::DefaultTwoDigitBaseYear, - QCalendar cal = QCalendar()); + int baseYear = QLocale::DefaultTwoDigitBaseYear); + static QDate fromString(const QString &string, QStringView format, + int baseYear, QCalendar cal); static QDate fromString(const QString &string, const QString &format, - int baseYear = QLocale::DefaultTwoDigitBaseYear, - QCalendar cal = QCalendar()) + int baseYear = QLocale::DefaultTwoDigitBaseYear) + { return fromString(string, qToStringViewIgnoringNull(format), baseYear); } + static QDate fromString(const QString &string, const QString &format, + int baseYear, QCalendar cal) { return fromString(string, qToStringViewIgnoringNull(format), baseYear, cal); } #endif static bool isValid(int y, int m, int d); @@ -451,15 +456,20 @@ public: // Overriding base year is likely more common than overriding calendar (and // likely to get more so, as the legacy base drops ever further behind us). static QDateTime fromString(QStringView string, QStringView format, - int baseYear = QLocale::DefaultTwoDigitBaseYear, - QCalendar cal = QCalendar()) + int baseYear = QLocale::DefaultTwoDigitBaseYear) + { return fromString(string.toString(), format, baseYear); } + static QDateTime fromString(QStringView string, QStringView format, + int baseYear, QCalendar cal) { return fromString(string.toString(), format, baseYear, cal); } static QDateTime fromString(const QString &string, QStringView format, - int baseYear = QLocale::DefaultTwoDigitBaseYear, - QCalendar cal = QCalendar()); + int baseYear = QLocale::DefaultTwoDigitBaseYear); + static QDateTime fromString(const QString &string, QStringView format, + int baseYear, QCalendar cal); static QDateTime fromString(const QString &string, const QString &format, - int baseYear = QLocale::DefaultTwoDigitBaseYear, - QCalendar cal = QCalendar()) + int baseYear = QLocale::DefaultTwoDigitBaseYear) + { return fromString(string, qToStringViewIgnoringNull(format), baseYear); } + static QDateTime fromString(const QString &string, const QString &format, + int baseYear, QCalendar cal) { return fromString(string, qToStringViewIgnoringNull(format), baseYear, cal); } #endif