diff options
author | hjk <hjk@qt.io> | 2022-01-21 12:22:54 +0100 |
---|---|---|
committer | hjk <hjk@qt.io> | 2022-01-26 13:13:41 +0000 |
commit | 1fc83d2a568dea3233212b351d6e9ffbc05c75e9 (patch) | |
tree | db9cc36793eef961237f18ea1567baa7732be592 /src/libs/utils/filepath.cpp | |
parent | c6fdb66b2bd5c1dd30220fb0e87d2fc2e0dc2615 (diff) | |
download | qt-creator-1fc83d2a568dea3233212b351d6e9ffbc05c75e9.tar.gz |
Utils: Wrap various file system iteration flags and filters
... into a single class.
This makes passing them around as a whole easier, and opens a path
to have "generic" filters in form of a lambda or such.
Change-Id: Ibf644b2fedcf0f1a35258030710afff8f5873f88
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Diffstat (limited to 'src/libs/utils/filepath.cpp')
-rw-r--r-- | src/libs/utils/filepath.cpp | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/src/libs/utils/filepath.cpp b/src/libs/utils/filepath.cpp index 2b665d0c84..bcf713687a 100644 --- a/src/libs/utils/filepath.cpp +++ b/src/libs/utils/filepath.cpp @@ -718,19 +718,16 @@ bool FilePath::createDir() const return dir.mkpath(dir.absolutePath()); } -FilePaths FilePath::dirEntries(const QStringList &nameFilters, - QDir::Filters filters, - QDirIterator::IteratorFlags flags, - QDir::SortFlags sort) const +FilePaths FilePath::dirEntries(const FileFilter &filter, QDir::SortFlags sort) const { FilePaths result; if (needsDevice()) { QTC_ASSERT(s_deviceHooks.iterateDirectory, return {}); const auto callBack = [&result](const FilePath &path) { result.append(path); return true; }; - s_deviceHooks.iterateDirectory(*this, callBack, nameFilters, filters, flags); + s_deviceHooks.iterateDirectory(*this, callBack, filter); } else { - QDirIterator dit(m_data, nameFilters, filters, flags); + QDirIterator dit(m_data, filter.nameFilters, filter.fileFilters, filter.iteratorFlags); while (dit.hasNext()) result.append(FilePath::fromString(dit.next())); } @@ -748,7 +745,7 @@ FilePaths FilePath::dirEntries(const QStringList &nameFilters, FilePaths FilePath::dirEntries(QDir::Filters filters) const { - return dirEntries({}, filters); + return dirEntries(FileFilter({}, filters)); } // This runs \a callBack on each directory entry matching all \a filters and @@ -756,17 +753,15 @@ FilePaths FilePath::dirEntries(QDir::Filters filters) const // An empty \nameFilters list matches every name. void FilePath::iterateDirectory(const std::function<bool(const FilePath &item)> &callBack, - const QStringList &nameFilters, - QDir::Filters filters, - QDirIterator::IteratorFlags flags) const + const FileFilter &filter) const { if (needsDevice()) { QTC_ASSERT(s_deviceHooks.iterateDirectory, return); - s_deviceHooks.iterateDirectory(*this, callBack, nameFilters, filters, flags); + s_deviceHooks.iterateDirectory(*this, callBack, filter); return; } - QDirIterator it(m_data, nameFilters, filters, flags); + QDirIterator it(m_data, filter.nameFilters, filter.fileFilters, filter.iteratorFlags); while (it.hasNext()) { if (!callBack(FilePath::fromString(it.next()))) return; @@ -1454,6 +1449,15 @@ QTextStream &operator<<(QTextStream &s, const FilePath &fn) return s << fn.toString(); } +FileFilter::FileFilter(const QStringList &nameFilters, + const QDir::Filters fileFilters, + const QDirIterator::IteratorFlags flags) + : nameFilters(nameFilters), + fileFilters(fileFilters), + iteratorFlags(flags) +{ +} + } // namespace Utils std::hash<Utils::FilePath>::result_type |