diff options
Diffstat (limited to 'src/corelib/io/qdir_p.h')
-rw-r--r-- | src/corelib/io/qdir_p.h | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/src/corelib/io/qdir_p.h b/src/corelib/io/qdir_p.h index 7f90f8d167..7dce69c195 100644 --- a/src/corelib/io/qdir_p.h +++ b/src/corelib/io/qdir_p.h @@ -18,6 +18,8 @@ #include "qfilesystementry_p.h" #include "qfilesystemmetadata_p.h" +#include <QtCore/qmutex.h> + #include <memory> QT_BEGIN_NAMESPACE @@ -37,14 +39,13 @@ public: QDir::SortFlags sort_ = QDir::SortFlags(QDir::Name | QDir::IgnoreCase), QDir::Filters filters_ = QDir::AllEntries); - explicit QDirPrivate(const QDirPrivate ©); + explicit QDirPrivate(const QDirPrivate ©); // Copies everything except mutex and fileEngine bool exists() const; - void initFileEngine(); void initFileLists(const QDir &dir) const; - static void sortFileList(QDir::SortFlags, QFileInfoList &, QStringList *, QFileInfoList *); + static void sortFileList(QDir::SortFlags, const QFileInfoList &, QStringList *, QFileInfoList *); static inline QChar getFilterSepChar(const QString &nameFilter); @@ -52,13 +53,10 @@ public: void setPath(const QString &path); - void clearFileLists(); - - void resolveAbsoluteEntry() const; + enum MetaDataClearing { KeepMetaData, IncludingMetaData }; + void clearCache(MetaDataClearing mode); - mutable bool fileListsInitialized; - mutable QStringList files; - mutable QFileInfoList fileInfos; + QString resolveAbsoluteEntry() const; QStringList nameFilters; QDir::SortFlags sort; @@ -67,8 +65,17 @@ public: std::unique_ptr<QAbstractFileEngine> fileEngine; QFileSystemEntry dirEntry; - mutable QFileSystemEntry absoluteDirEntry; - mutable QFileSystemMetaData metaData; + + struct FileCache + { + QMutex mutex; + QStringList files; + QFileInfoList fileInfos; + std::atomic<bool> fileListsInitialized = false; + QFileSystemEntry absoluteDirEntry; + QFileSystemMetaData metaData; + }; + mutable FileCache fileCache; }; Q_DECLARE_OPERATORS_FOR_FLAGS(QDirPrivate::PathNormalizations) |