QAbstractFileEngine: make {begin,end}EntryList() return a unique_ptr

Makes ownership clearer.

Change-Id: Ibb57ca900ef30b16d48964a977e997ba6705248b
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
This commit is contained in:
Ahmad Samir 2023-12-17 20:18:38 +02:00
parent 66dd00dcfd
commit e146d835a6
17 changed files with 59 additions and 41 deletions

View File

@ -38,10 +38,10 @@ QAbstractSocketEngine *ZipEngineHandler::create(const QString &fileName) const
//! [2]
QAbstractFileEngineIterator *
QAbstractFileEngine::IteratorUniquePtr
CustomFileEngine::beginEntryList(QDir::Filters filters, const QStringList &filterNames)
{
return new CustomFileEngineIterator(filters, filterNames);
return std::make_unique<CustomFileEngineIterator>(filters, filterNames);
}
//! [2]

View File

@ -890,6 +890,14 @@ bool QAbstractFileEngine::cloneTo(QAbstractFileEngine *target)
Synonym for QAbstractFileEngineIterator.
*/
/*!
\typedef QAbstractFileEngine::IteratorUniquePtr
\since 6.8
Synonym for std::unique_ptr<Iterator> (that is a
std::unique_ptr<QAbstractFileEngineIterator>).
*/
/*!
Constructs a QAbstractFileEngineIterator, using the entry filters \a
filters, and wildcard name filters \a nameFilters.
@ -1019,20 +1027,19 @@ QFileInfo QAbstractFileEngineIterator::currentFileInfo() const
*/
/*!
Returns an instance of a QAbstractFileEngineIterator using \a filters for
entry filtering and \a filterNames for name filtering. This function is
called by QDirListing to initiate directory iteration.
QDirListing takes ownership of the returned instance, and deletes it when
it's done.
Returns a QAbstractFileEngine::IteratorUniquePtr, that uses \a filters
for entry filtering and \a filterNames for name filtering. This function
is called by QDirListing to initiate directory iteration.
\sa QDirListing
*/
QAbstractFileEngine::Iterator *QAbstractFileEngine::beginEntryList(QDir::Filters filters, const QStringList &filterNames)
QAbstractFileEngine::IteratorUniquePtr
QAbstractFileEngine::beginEntryList(QDir::Filters filters,
const QStringList &filterNames)
{
Q_UNUSED(filters);
Q_UNUSED(filterNames);
return nullptr;
return {};
}
/*!

View File

@ -19,6 +19,7 @@
#include "QtCore/qfile.h"
#include "QtCore/qdir.h"
#include <memory>
#include <optional>
#ifdef open
@ -126,8 +127,11 @@ public:
bool unmap(uchar *ptr);
typedef QAbstractFileEngineIterator Iterator;
virtual Iterator *beginEntryList(QDir::Filters filters, const QStringList &filterNames);
virtual Iterator* endEntryList() { return nullptr; }
using IteratorUniquePtr = std::unique_ptr<Iterator>;
virtual IteratorUniquePtr
beginEntryList(QDir::Filters filters, const QStringList &filterNames);
virtual IteratorUniquePtr endEntryList() { return {}; }
virtual qint64 read(char *data, qint64 maxlen);
virtual qint64 readLine(char *data, qint64 maxlen);

View File

@ -165,10 +165,9 @@ void QDirListingPrivate::pushDirectory(QDirEntryInfo &entryInfo)
if (engine) {
engine->setFileName(path);
QAbstractFileEngineIterator *it = engine->beginEntryList(filters, nameFilters);
if (it) {
if (auto it = engine->beginEntryList(filters, nameFilters)) {
it->setPath(path);
fileEngineIterators.emplace(FEngineIteratorPtr(it));
fileEngineIterators.emplace(std::move(it));
} else {
// No iterator; no entry list.
}

View File

@ -791,9 +791,10 @@ qint64 QFSFileEnginePrivate::writeFdFh(const char *data, qint64 len)
/*!
\internal
*/
QAbstractFileEngine::Iterator *QFSFileEngine::beginEntryList(QDir::Filters filters, const QStringList &filterNames)
QAbstractFileEngine::IteratorUniquePtr
QFSFileEngine::beginEntryList(QDir::Filters filters, const QStringList &filterNames)
{
return new QFSFileEngineIterator(filters, filterNames);
return std::make_unique<QFSFileEngineIterator>(filters, filterNames);
}
#endif // QT_NO_FILESYSTEMITERATOR

View File

@ -10,8 +10,8 @@
QT_BEGIN_NAMESPACE
QFSFileEngineIterator::QFSFileEngineIterator(QDir::Filters filters, const QStringList &filterNames)
: QAbstractFileEngineIterator(filters, filterNames)
, done(false)
: QAbstractFileEngineIterator(filters, filterNames),
done(false)
{
}

View File

@ -82,7 +82,8 @@ public:
int handle() const override;
#ifndef QT_NO_FILESYSTEMITERATOR
Iterator *beginEntryList(QDir::Filters filters, const QStringList &filterNames) override;
IteratorUniquePtr beginEntryList(QDir::Filters filters,
const QStringList &filterNames) override;
#endif
qint64 read(char *data, qint64 maxlen) override;

View File

@ -1534,11 +1534,10 @@ QDateTime QResourceFileEngine::fileTime(FileTime time) const
/*!
\internal
*/
QAbstractFileEngine::Iterator *QResourceFileEngine::beginEntryList(QDir::Filters filters,
const QStringList &filterNames)
QAbstractFileEngine::IteratorUniquePtr
QResourceFileEngine::beginEntryList(QDir::Filters filters, const QStringList &filterNames)
{
return new QResourceFileEngineIterator(filters, filterNames);
return std::make_unique<QResourceFileEngineIterator>(filters, filterNames);
}
bool QResourceFileEngine::extension(Extension extension, const ExtensionOption *option, ExtensionReturn *output)

View File

@ -49,7 +49,8 @@ public:
QDateTime fileTime(FileTime time) const override;
Iterator *beginEntryList(QDir::Filters filters, const QStringList &filterNames) override;
IteratorUniquePtr beginEntryList(QDir::Filters filters,
const QStringList &filterNames) override;
bool extension(Extension extension, const ExtensionOption *option = nullptr, ExtensionReturn *output = nullptr) override;
bool supportsExtension(Extension extension) const override;

View File

@ -248,10 +248,10 @@ QString AndroidContentFileEngine::fileName(FileName f) const
return QString();
}
QAbstractFileEngine::Iterator *AndroidContentFileEngine::beginEntryList(QDir::Filters filters,
const QStringList &filterNames)
QAbstractFileEngine::IteratorUniquePtr
AndroidContentFileEngine::beginEntryList(QDir::Filters filters, const QStringList &filterNames)
{
return new AndroidContentFileEngineIterator(filters, filterNames);
return std::make_unique<AndroidContentFileEngineIterator>(filters, filterNames);
}
AndroidContentFileEngineHandler::AndroidContentFileEngineHandler() = default;

View File

@ -30,7 +30,8 @@ public:
QDateTime fileTime(FileTime time) const override;
FileFlags fileFlags(FileFlags type = FileInfoAll) const override;
QString fileName(FileName file = DefaultName) const override;
QAbstractFileEngine::Iterator *beginEntryList(QDir::Filters filters, const QStringList &filterNames) override;
IteratorUniquePtr beginEntryList(QDir::Filters filters,
const QStringList &filterNames) override;
private:
void closeNativeFileDescriptor();

View File

@ -367,10 +367,11 @@ public:
m_assetsInfoCache.insert(m_fileName, newAssetInfoPtr);
}
Iterator *beginEntryList(QDir::Filters filters, const QStringList &filterNames) override
IteratorUniquePtr
beginEntryList(QDir::Filters filters, const QStringList &filterNames) override
{
if (m_assetInfo && m_assetInfo->type == AssetItem::Type::Folder)
return new AndroidAbstractFileEngineIterator(filters, filterNames, m_fileName);
return std::make_unique<AndroidAbstractFileEngineIterator>(filters, filterNames, m_fileName);
return nullptr;
}

View File

@ -29,7 +29,8 @@ public:
void setFileName(const QString &file) override;
#ifndef QT_NO_FILESYSTEMITERATOR
Iterator *beginEntryList(QDir::Filters filters, const QStringList &filterNames) override;
IteratorUniquePtr beginEntryList(QDir::Filters filters,
const QStringList &filterNames) override;
#endif
void setError(QFile::FileError error, const QString &str) { QAbstractFileEngine::setError(error, str); }

View File

@ -440,10 +440,10 @@ void QIOSFileEngineAssetsLibrary::setFileName(const QString &file)
#ifndef QT_NO_FILESYSTEMITERATOR
QAbstractFileEngine::Iterator *QIOSFileEngineAssetsLibrary::beginEntryList(
QDir::Filters filters, const QStringList &filterNames)
QAbstractFileEngine::IteratorUniquePtr
QIOSFileEngineAssetsLibrary::beginEntryList(QDir::Filters filters, const QStringList &filterNames)
{
return new QIOSFileEngineIteratorAssetsLibrary(filters, filterNames);
return std::make_unique<QIOSFileEngineIteratorAssetsLibrary>(filters, filterNames);
}
QT_END_NAMESPACE

View File

@ -459,9 +459,11 @@ public:
: QFSFileEngine(fileName)
{
}
Iterator *beginEntryList(QDir::Filters filters, const QStringList &filterNames) override
IteratorUniquePtr
beginEntryList(QDir::Filters filters, const QStringList &filterNames) override
{
return new Iterator(filters, filterNames);
return std::make_unique<Iterator>(filters, filterNames);
}
FileFlags fileFlags(FileFlags type) const override
{

View File

@ -436,8 +436,9 @@ public:
: QFSFileEngine(fileName)
{ }
QAbstractFileEngineIterator *beginEntryList(QDir::Filters, const QStringList &) override
{ return 0; }
IteratorUniquePtr
beginEntryList(QDir::Filters, const QStringList &) override
{ return nullptr; }
};
class EngineWithNoIteratorHandler : public QAbstractFileEngineHandler

View File

@ -421,8 +421,8 @@ public:
: QFSFileEngine(fileName)
{ }
QAbstractFileEngineIterator *beginEntryList(QDir::Filters, const QStringList &) override
{ return 0; }
IteratorUniquePtr beginEntryList(QDir::Filters, const QStringList &) override
{ return nullptr; }
};
class EngineWithNoIteratorHandler : public QAbstractFileEngineHandler