OSDN Git Service

QDir no longer requires abstraction
authorIvailo Monev <xakepa10@gmail.com>
Sun, 30 Oct 2022 00:27:43 +0000 (03:27 +0300)
committerIvailo Monev <xakepa10@gmail.com>
Sun, 30 Oct 2022 00:27:43 +0000 (03:27 +0300)
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
src/core/io/qdir.cpp
src/core/io/qdir_p.h

index 4118386..5a3f611 100644 (file)
@@ -22,7 +22,6 @@
 #include "qplatformdefs.h"
 #include "qdir.h"
 #include "qdir_p.h"
-#include "qabstractfileengine.h"
 #ifndef QT_NO_DEBUG_STREAM
 #include "qdebug.h"
 #endif
@@ -49,7 +48,6 @@ QDirPrivate::QDirPrivate(const QString &path, const QStringList &nameFilters_, Q
     , nameFilters(nameFilters_)
     , sort(sort_)
     , filters(filters_)
-    , fileEngine(nullptr)
     , fileListsInitialized(false)
 {
     setPath(path.isEmpty() ? QString::fromLatin1(".") : path);
@@ -73,7 +71,6 @@ QDirPrivate::QDirPrivate(const QDirPrivate &copy)
     , nameFilters(copy.nameFilters)
     , sort(copy.sort)
     , filters(copy.filters)
-    , fileEngine(nullptr)
     , fileListsInitialized(false)
     , dirEntry(copy.dirEntry)
     , metaData(copy.metaData)
@@ -82,23 +79,13 @@ QDirPrivate::QDirPrivate(const QDirPrivate &copy)
 
 QDirPrivate::~QDirPrivate()
 {
-    delete fileEngine;
 }
 
 bool QDirPrivate::exists() const
 {
-    if (!fileEngine) {
-        QFileSystemEngine::fillMetaData(dirEntry, metaData,
-                QFileSystemMetaData::ExistsAttribute | QFileSystemMetaData::DirectoryType); // always stat
-        return metaData.exists() && metaData.isDirectory();
-    }
-    const QAbstractFileEngine::FileFlags info =
-        fileEngine->fileFlags(QAbstractFileEngine::DirectoryType
-                                       | QAbstractFileEngine::ExistsFlag
-                                       | QAbstractFileEngine::Refresh);
-    if (!(info & QAbstractFileEngine::DirectoryType))
-        return false;
-    return info & QAbstractFileEngine::ExistsFlag;
+    QFileSystemEngine::fillMetaData(dirEntry, metaData,
+            QFileSystemMetaData::ExistsAttribute | QFileSystemMetaData::DirectoryType); // always stat
+    return metaData.exists() && metaData.isDirectory();
 }
 
 inline void QDirPrivate::setPath(const QString &path)
@@ -110,7 +97,6 @@ inline void QDirPrivate::setPath(const QString &path)
 
     dirEntry = QFileSystemEntry(QDir::fromNativeSeparators(path));
     metaData.clear();
-    initFileEngine();
     clearFileLists();
     absoluteDirEntry = QFileSystemEntry();
 }
@@ -127,18 +113,12 @@ inline void QDirPrivate::resolveAbsoluteEntry() const
     if (!absoluteDirEntry.isEmpty() || dirEntry.isEmpty())
         return;
 
-    QString absoluteName;
-    if (!fileEngine) {
-        if (!dirEntry.isRelative() && dirEntry.isClean()) {
-            absoluteDirEntry = dirEntry;
-            return;
-        }
-
-        absoluteName = QFileSystemEngine::absoluteName(dirEntry).filePath();
-    } else {
-        absoluteName = fileEngine->fileName(QAbstractFileEngine::AbsoluteName);
+    if (!dirEntry.isRelative() && dirEntry.isClean()) {
+        absoluteDirEntry = dirEntry;
+        return;
     }
 
+    QString absoluteName = QFileSystemEngine::absoluteName(dirEntry).filePath();
     absoluteDirEntry = QFileSystemEntry(QDir::cleanPath(absoluteName));
 }
 
@@ -267,12 +247,6 @@ inline void QDirPrivate::initFileLists(const QDir &dir) const
     }
 }
 
-inline void QDirPrivate::initFileEngine()
-{
-    delete fileEngine;
-    fileEngine = QAbstractFileEngine::create(dirEntry.filePath());
-}
-
 /*!
     \class QDir
     \brief The QDir class provides access to directory structures and their contents.
@@ -566,11 +540,8 @@ QString QDir::absolutePath() const
 QString QDir::canonicalPath() const
 {
     const QDirPrivate* d = d_ptr.constData();
-    if (!d->fileEngine) {
-        QFileSystemEntry answer = QFileSystemEngine::canonicalName(d->dirEntry, d->metaData);
-        return answer.filePath();
-    }
-    return d->fileEngine->fileName(QAbstractFileEngine::CanonicalName);
+    QFileSystemEntry answer = QFileSystemEngine::canonicalName(d->dirEntry, d->metaData);
+    return answer.filePath();
 }
 
 /*!
@@ -803,7 +774,6 @@ QStringList QDir::nameFilters() const
 void QDir::setNameFilters(const QStringList &nameFilters)
 {
     QDirPrivate* d = d_ptr.data();
-    d->initFileEngine();
     d->clearFileLists();
 
     d->nameFilters = nameFilters;
@@ -897,7 +867,6 @@ QDir::Filters QDir::filter() const
 void QDir::setFilter(Filters filters)
 {
     QDirPrivate* d = d_ptr.data();
-    d->initFileEngine();
     d->clearFileLists();
 
     d->filters = filters;
@@ -955,7 +924,6 @@ QDir::SortFlags QDir::sorting() const
 void QDir::setSorting(SortFlags sort)
 {
     QDirPrivate* d = d_ptr.data();
-    d->initFileEngine();
     d->clearFileLists();
 
     d->sort = sort;
@@ -1141,9 +1109,7 @@ bool QDir::mkdir(const QString &dirName) const
     const QDirPrivate* d = d_ptr.constData();
 
     QString fn = filePath(dirName);
-    if (!d->fileEngine)
-        return QFileSystemEngine::createDirectory(QFileSystemEntry(fn), false);
-    return d->fileEngine->mkdir(fn, false);
+    return QFileSystemEngine::createDirectory(QFileSystemEntry(fn), false);
 }
 
 /*!
@@ -1165,10 +1131,7 @@ bool QDir::rmdir(const QString &dirName) const
     const QDirPrivate* d = d_ptr.constData();
 
     QString fn = filePath(dirName);
-    if (!d->fileEngine)
-        return QFileSystemEngine::removeDirectory(QFileSystemEntry(fn), false);
-
-    return d->fileEngine->rmdir(fn, false);
+    return QFileSystemEngine::removeDirectory(QFileSystemEntry(fn), false);
 }
 
 /*!
@@ -1194,9 +1157,7 @@ bool QDir::mkpath(const QString &dirPath) const
     const QDirPrivate* d = d_ptr.constData();
 
     QString fn = filePath(dirPath);
-    if (!d->fileEngine)
-        return QFileSystemEngine::createDirectory(QFileSystemEntry(fn), true);
-    return d->fileEngine->mkdir(fn, true);
+    return QFileSystemEngine::createDirectory(QFileSystemEntry(fn), true);
 }
 
 /*!
@@ -1220,9 +1181,7 @@ bool QDir::rmpath(const QString &dirPath) const
     const QDirPrivate* d = d_ptr.constData();
 
     QString fn = filePath(dirPath);
-    if (!d->fileEngine)
-        return QFileSystemEngine::removeDirectory(QFileSystemEntry(fn), true);
-    return d->fileEngine->rmdir(fn, true);
+    return QFileSystemEngine::removeDirectory(QFileSystemEntry(fn), true);
 }
 
 /*!
@@ -1238,19 +1197,10 @@ bool QDir::isReadable() const
 {
     const QDirPrivate* d = d_ptr.constData();
 
-    if (!d->fileEngine) {
-        if (!d->metaData.hasFlags(QFileSystemMetaData::UserReadPermission))
-            QFileSystemEngine::fillMetaData(d->dirEntry, d->metaData, QFileSystemMetaData::UserReadPermission);
+    if (!d->metaData.hasFlags(QFileSystemMetaData::UserReadPermission))
+        QFileSystemEngine::fillMetaData(d->dirEntry, d->metaData, QFileSystemMetaData::UserReadPermission);
 
-        return (d->metaData.permissions() & QFile::ReadUser) != 0;
-    }
-
-    const QAbstractFileEngine::FileFlags info =
-        d->fileEngine->fileFlags(QAbstractFileEngine::DirectoryType
-                                       | QAbstractFileEngine::PermsMask);
-    if (!(info & QAbstractFileEngine::DirectoryType))
-        return false;
-    return info & QAbstractFileEngine::ReadUserPerm;
+    return (d->metaData.permissions() & QFile::ReadUser) != 0;
 }
 
 /*!
@@ -1283,9 +1233,7 @@ bool QDir::exists() const
 */
 bool QDir::isRoot() const
 {
-    if (!d_ptr->fileEngine)
-        return d_ptr->dirEntry.isRoot();
-    return d_ptr->fileEngine->fileFlags(QAbstractFileEngine::FlagsMask) & QAbstractFileEngine::RootFlag;
+    return d_ptr->dirEntry.isRoot();
 }
 
 /*!
@@ -1315,12 +1263,9 @@ bool QDir::isRoot() const
 */
 bool QDir::isRelative() const
 {
-    if (!d_ptr->fileEngine)
-        return d_ptr->dirEntry.isRelative();
-    return d_ptr->fileEngine->isRelativePath();
+    return d_ptr->dirEntry.isRelative();
 }
 
-
 /*!
     Converts the directory path to an absolute path. If it is already
     absolute nothing happens. Returns true if the conversion
@@ -1332,18 +1277,9 @@ bool QDir::makeAbsolute()
 {
     const QDirPrivate *d = d_ptr.constData();
     QScopedPointer<QDirPrivate> dir;
-    if (d->fileEngine) {
-        QString absolutePath = d->fileEngine->fileName(QAbstractFileEngine::AbsoluteName);
-        if (QDir::isRelativePath(absolutePath))
-            return false;
-
-        dir.reset(new QDirPrivate(*d_ptr.constData()));
-        dir->setPath(absolutePath);
-    } else { // native FS
-        d->resolveAbsoluteEntry();
-        dir.reset(new QDirPrivate(*d_ptr.constData()));
-        dir->setPath(d->absoluteDirEntry.filePath());
-    }
+    d->resolveAbsoluteEntry();
+    dir.reset(new QDirPrivate(*d_ptr.constData()));
+    dir->setPath(d->absoluteDirEntry.filePath());
     d_ptr = dir.take(); // actually detach
     return true;
 }
@@ -1364,10 +1300,6 @@ bool QDir::operator==(const QDir &dir) const
 
     if (d == other)
         return true;
-    if (!d->fileEngine || !other->fileEngine) {
-        if (d->fileEngine != other->fileEngine) // one is native, the other is a custom file-engine
-            return false;
-    }
 
     if (d->filters == other->filters
        && d->sort == other->sort
@@ -1835,7 +1767,6 @@ void QDir::refresh()
 {
     QDirPrivate *d = d_ptr.data();
     d->metaData.clear();
-    d->initFileEngine();
     d->clearFileLists();
 }
 
index fb47321..d65860a 100644 (file)
@@ -39,7 +39,6 @@ public:
 
     bool exists() const;
 
-    void initFileEngine();
     void initFileLists(const QDir &dir) const;
 
     static void sortFileList(QDir::SortFlags, QFileInfoList &, QStringList *, QFileInfoList *);
@@ -54,9 +53,6 @@ public:
     QDir::SortFlags sort;
     QDir::Filters filters;
 
-
-    QAbstractFileEngine* fileEngine;
-
     mutable bool fileListsInitialized;
     mutable QStringList files;
     mutable QFileInfoList fileInfos;