diff options
author | Ahmad Samir <a.samirh78@gmail.com> | 2023-12-17 20:18:38 +0200 |
---|---|---|
committer | Ahmad Samir <a.samirh78@gmail.com> | 2024-03-17 14:30:33 +0200 |
commit | e146d835a69d57748bf2978cf5134ac5d86d81cf (patch) | |
tree | 4b42c83f549b04c5dc39d37e02baeebc9102be44 | |
parent | 66dd00dcfd8a715ff6bc736e6beb5f2d3b2c69cc (diff) |
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>
17 files changed, 59 insertions, 41 deletions
diff --git a/src/corelib/doc/snippets/code/src_corelib_io_qabstractfileengine.cpp b/src/corelib/doc/snippets/code/src_corelib_io_qabstractfileengine.cpp index 8c80ec1eba..f1315a78f0 100644 --- a/src/corelib/doc/snippets/code/src_corelib_io_qabstractfileengine.cpp +++ b/src/corelib/doc/snippets/code/src_corelib_io_qabstractfileengine.cpp @@ -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] diff --git a/src/corelib/io/qabstractfileengine.cpp b/src/corelib/io/qabstractfileengine.cpp index bb30689e60..55655adfc4 100644 --- a/src/corelib/io/qabstractfileengine.cpp +++ b/src/corelib/io/qabstractfileengine.cpp @@ -891,6 +891,14 @@ bool QAbstractFileEngine::cloneTo(QAbstractFileEngine *target) */ /*! + \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 {}; } /*! diff --git a/src/corelib/io/qabstractfileengine_p.h b/src/corelib/io/qabstractfileengine_p.h index b6ef42399d..eef83fc46d 100644 --- a/src/corelib/io/qabstractfileengine_p.h +++ b/src/corelib/io/qabstractfileengine_p.h @@ -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); diff --git a/src/corelib/io/qdirlisting.cpp b/src/corelib/io/qdirlisting.cpp index ae9d808abc..8200366a5a 100644 --- a/src/corelib/io/qdirlisting.cpp +++ b/src/corelib/io/qdirlisting.cpp @@ -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. } diff --git a/src/corelib/io/qfsfileengine.cpp b/src/corelib/io/qfsfileengine.cpp index d4fcf7d862..df8dd494ee 100644 --- a/src/corelib/io/qfsfileengine.cpp +++ b/src/corelib/io/qfsfileengine.cpp @@ -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 diff --git a/src/corelib/io/qfsfileengine_iterator.cpp b/src/corelib/io/qfsfileengine_iterator.cpp index d6c9320ce0..c65b6e5d3e 100644 --- a/src/corelib/io/qfsfileengine_iterator.cpp +++ b/src/corelib/io/qfsfileengine_iterator.cpp @@ -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) { } diff --git a/src/corelib/io/qfsfileengine_p.h b/src/corelib/io/qfsfileengine_p.h index 9cbe3fc96b..a2dc699305 100644 --- a/src/corelib/io/qfsfileengine_p.h +++ b/src/corelib/io/qfsfileengine_p.h @@ -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; diff --git a/src/corelib/io/qresource.cpp b/src/corelib/io/qresource.cpp index d16b799754..d61846084a 100644 --- a/src/corelib/io/qresource.cpp +++ b/src/corelib/io/qresource.cpp @@ -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) diff --git a/src/corelib/io/qresource_p.h b/src/corelib/io/qresource_p.h index 2439695ab9..01ff3c8c5f 100644 --- a/src/corelib/io/qresource_p.h +++ b/src/corelib/io/qresource_p.h @@ -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; diff --git a/src/plugins/platforms/android/androidcontentfileengine.cpp b/src/plugins/platforms/android/androidcontentfileengine.cpp index 1e213f5a3e..316daef1da 100644 --- a/src/plugins/platforms/android/androidcontentfileengine.cpp +++ b/src/plugins/platforms/android/androidcontentfileengine.cpp @@ -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; diff --git a/src/plugins/platforms/android/androidcontentfileengine.h b/src/plugins/platforms/android/androidcontentfileengine.h index 98e6bef63c..adaff7f665 100644 --- a/src/plugins/platforms/android/androidcontentfileengine.h +++ b/src/plugins/platforms/android/androidcontentfileengine.h @@ -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(); diff --git a/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp b/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp index 902dee5f25..6d5479a559 100644 --- a/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp +++ b/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp @@ -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; } diff --git a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.h b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.h index e3fb854734..3d27dc48ed 100644 --- a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.h +++ b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.h @@ -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); } diff --git a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.mm b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.mm index e8a885a053..a3593669cf 100644 --- a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.mm +++ b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.mm @@ -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 diff --git a/tests/auto/corelib/io/qabstractfileengine/tst_qabstractfileengine.cpp b/tests/auto/corelib/io/qabstractfileengine/tst_qabstractfileengine.cpp index d34ca243e0..cf8d5af583 100644 --- a/tests/auto/corelib/io/qabstractfileengine/tst_qabstractfileengine.cpp +++ b/tests/auto/corelib/io/qabstractfileengine/tst_qabstractfileengine.cpp @@ -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 { diff --git a/tests/auto/corelib/io/qdiriterator/tst_qdiriterator.cpp b/tests/auto/corelib/io/qdiriterator/tst_qdiriterator.cpp index e4d0b88d2d..d534feb3ce 100644 --- a/tests/auto/corelib/io/qdiriterator/tst_qdiriterator.cpp +++ b/tests/auto/corelib/io/qdiriterator/tst_qdiriterator.cpp @@ -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 diff --git a/tests/auto/corelib/io/qdirlisting/tst_qdirlisting.cpp b/tests/auto/corelib/io/qdirlisting/tst_qdirlisting.cpp index 04ba406831..1b550e1f0d 100644 --- a/tests/auto/corelib/io/qdirlisting/tst_qdirlisting.cpp +++ b/tests/auto/corelib/io/qdirlisting/tst_qdirlisting.cpp @@ -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 |