diff options
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 8c80ec1ebab..f1315a78f0e 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 bb30689e60b..55655adfc41 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 b6ef42399d5..eef83fc46de 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 ae9d808abc3..8200366a5aa 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 d4fcf7d8625..df8dd494eec 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 d6c9320ce02..c65b6e5d3e1 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 9cbe3fc96bd..a2dc6993055 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 d16b799754c..d61846084a5 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 2439695ab9c..01ff3c8c5f8 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 1e213f5a3e2..316daef1dad 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 98e6bef63ca..adaff7f6655 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 902dee5f25e..6d5479a5599 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 e3fb8547346..3d27dc48ed5 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 e8a885a053d..a3593669cf8 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 d34ca243e0d..cf8d5af5838 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 e4d0b88d2de..d534feb3cee 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 04ba4068317..1b550e1f0d6 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  | 
