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 <thiago.macieira@intel.com>
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
This commit is contained in:
Ivan Solovev 2024-01-25 17:09:07 +01:00
parent d4d3d6fdba
commit 59db912e86
2 changed files with 76 additions and 12 deletions

View File

@ -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
/*****************************************************************************

View File

@ -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