QDirIteratorPrivate: assign to members directly

Instead of passing default args to the constructor. The alternative is
adding as many constructors as the public class has.

The dirEntry member benefits from copy-elision in the 3 QDirIterator
overloads that construct a QFileSystemEntry.

Change-Id: I7b6bcc54a7e00255be9903d58cc09f4e202a25c3
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
Ahmad Samir 2023-12-23 18:21:28 +02:00
parent eb2db79064
commit 1a3753fc78

View File

@ -90,9 +90,7 @@ public:
class QDirIteratorPrivate class QDirIteratorPrivate
{ {
public: public:
QDirIteratorPrivate(const QFileSystemEntry &entry, const QStringList &nameFilters, void init(bool resolveEngine);
QDir::Filters _filters, QDirIterator::IteratorFlags flags, bool resolveEngine = true);
void advance(); void advance();
bool entryMatches(const QString & fileName, const QFileInfo &fileInfo); bool entryMatches(const QString & fileName, const QFileInfo &fileInfo);
@ -103,9 +101,9 @@ public:
std::unique_ptr<QAbstractFileEngine> engine; std::unique_ptr<QAbstractFileEngine> engine;
QFileSystemEntry dirEntry; QFileSystemEntry dirEntry;
const QStringList nameFilters; QStringList nameFilters;
const QDir::Filters filters; QDir::Filters filters;
const QDirIterator::IteratorFlags iteratorFlags; QDirIterator::IteratorFlags iteratorFlags;
#if QT_CONFIG(regularexpression) #if QT_CONFIG(regularexpression)
QList<QRegularExpression> nameRegExps; QList<QRegularExpression> nameRegExps;
@ -123,16 +121,14 @@ public:
QDuplicateTracker<QString> visitedLinks; QDuplicateTracker<QString> visitedLinks;
}; };
/*! void QDirIteratorPrivate::init(bool resolveEngine = true)
\internal
*/
QDirIteratorPrivate::QDirIteratorPrivate(const QFileSystemEntry &entry, const QStringList &nameFilters,
QDir::Filters _filters, QDirIterator::IteratorFlags flags, bool resolveEngine)
: dirEntry(entry)
, nameFilters(nameFilters.contains("*"_L1) ? QStringList() : nameFilters)
, filters(QDir::NoFilter == _filters ? QDir::AllEntries : _filters)
, iteratorFlags(flags)
{ {
if (nameFilters.contains("*"_L1))
nameFilters.clear();
if (filters == QDir::NoFilter)
filters = QDir::AllEntries;
#if QT_CONFIG(regularexpression) #if QT_CONFIG(regularexpression)
nameRegExps.reserve(nameFilters.size()); nameRegExps.reserve(nameFilters.size());
for (const auto &filter : nameFilters) { for (const auto &filter : nameFilters) {
@ -380,9 +376,15 @@ bool QDirIteratorPrivate::matchesFilters(const QString &fileName, const QFileInf
\sa hasNext(), next(), IteratorFlags \sa hasNext(), next(), IteratorFlags
*/ */
QDirIterator::QDirIterator(const QDir &dir, IteratorFlags flags) QDirIterator::QDirIterator(const QDir &dir, IteratorFlags flags)
: d(new QDirIteratorPrivate)
{ {
const QDirPrivate *other = dir.d_ptr.constData(); const QDirPrivate *other = dir.d_ptr.constData();
d.reset(new QDirIteratorPrivate(other->dirEntry, other->nameFilters, other->filters, flags, bool(other->fileEngine))); d->dirEntry = other->dirEntry;
d->nameFilters = other->nameFilters;
d->filters = other->filters;
d->iteratorFlags = flags;
const bool resolveEngine = other->fileEngine ? true : false;
d->init(resolveEngine);
} }
/*! /*!
@ -399,8 +401,12 @@ QDirIterator::QDirIterator(const QDir &dir, IteratorFlags flags)
\sa hasNext(), next(), IteratorFlags \sa hasNext(), next(), IteratorFlags
*/ */
QDirIterator::QDirIterator(const QString &path, QDir::Filters filters, IteratorFlags flags) QDirIterator::QDirIterator(const QString &path, QDir::Filters filters, IteratorFlags flags)
: d(new QDirIteratorPrivate(QFileSystemEntry(path), QStringList(), filters, flags)) : d(new QDirIteratorPrivate)
{ {
d->dirEntry = QFileSystemEntry(path);
d->filters = filters;
d->iteratorFlags = flags;
d->init();
} }
/*! /*!
@ -416,8 +422,12 @@ QDirIterator::QDirIterator(const QString &path, QDir::Filters filters, IteratorF
\sa hasNext(), next(), IteratorFlags \sa hasNext(), next(), IteratorFlags
*/ */
QDirIterator::QDirIterator(const QString &path, IteratorFlags flags) QDirIterator::QDirIterator(const QString &path, IteratorFlags flags)
: d(new QDirIteratorPrivate(QFileSystemEntry(path), QStringList(), QDir::NoFilter, flags)) : d(new QDirIteratorPrivate)
{ {
d->dirEntry = QFileSystemEntry(path);
d->filters = QDir::NoFilter;
d->iteratorFlags = flags;
d->init();
} }
/*! /*!
@ -440,8 +450,13 @@ QDirIterator::QDirIterator(const QString &path, IteratorFlags flags)
*/ */
QDirIterator::QDirIterator(const QString &path, const QStringList &nameFilters, QDirIterator::QDirIterator(const QString &path, const QStringList &nameFilters,
QDir::Filters filters, IteratorFlags flags) QDir::Filters filters, IteratorFlags flags)
: d(new QDirIteratorPrivate(QFileSystemEntry(path), nameFilters, filters, flags)) : d(new QDirIteratorPrivate)
{ {
d->dirEntry = QFileSystemEntry(path);
d->nameFilters = nameFilters;
d->filters = filters;
d->iteratorFlags = flags;
d->init();
} }
/*! /*!