87 template<
typename QueryNative,
typename QueryFileInfo,
typename QueryIterator>
88 decltype(
auto) visit(QueryNative qn, QueryFileInfo qf, QueryIterator qi)
93 template<
typename QueryNative,
typename QueryFileInfo,
typename QueryIterator>
95 QueryNative &&queryNative, QueryFileInfo &&queryFileInfo, QueryIterator &&queryIterator)
98 std::forward<QueryNative>(queryNative),
99 std::forward<QueryFileInfo>(queryFileInfo),
100 [&](
const Iterator &iterator) {
return queryIterator(iterator.iterator); }
104 template<
typename QueryNative,
typename QueryFileInfo>
105 auto query(QueryNative &&queryNative,
const QueryFileInfo &queryFileInfo)
108 std::forward<QueryNative>(queryNative),
109 [&](Iterator &iterator) {
return queryFileInfo(iterator.ensureFileInfo()); },
135 [](Iterator &iterator) ->
const QFileInfo & {
return iterator.ensureFileInfo(); },
136 [
this](
const Native &native) ->
const QFileInfo & {
138 new QFileInfoPrivate(native.entry, native.metaData));
140 [](
const QFileInfo &fileInfo) ->
const QFileInfo & {
return fileInfo; }
147 [](
const Native &native) {
return native.entry.fileName(); },
148 [](
const QFileInfo &info) {
return info.fileName(); },
149 [](
const QAbstractFileEngineIterator *it) {
return it->currentFileName(); });
155 [](
const Native &native) {
return native.entry.baseName(); },
156 [](
const QFileInfo &info) {
return info.baseName(); });
162 [](
const Native &native) {
return native.entry.completeBaseName(); },
163 [](
const QFileInfo &info) {
return info.completeBaseName(); });
169 [](
const Native &native) {
return native.entry.suffix(); },
170 [](
const QFileInfo &info) {
return info.suffix(); });
176 [](
const Native &native) {
return native.entry.completeSuffix(); },
177 [](
const QFileInfo &info) {
return info.completeSuffix(); });
183 [](
const Native &native) {
return native.entry.filePath(); },
184 [](
const QFileInfo &info) {
return info.filePath(); },
185 [](
const QAbstractFileEngineIterator *it) {
return it->currentFilePath(); });
210 return native.ensureFilled(QFileSystemMetaData::DirectoryType).isDirectory();
212 [](
const QFileInfo &fileInfo) {
return fileInfo.isDir(); });
218 return native.ensureFilled(QFileSystemMetaData::FileType).isFile();
220 [](
const QFileInfo &fileInfo) {
return fileInfo.isFile(); });
226 return native.ensureFilled(QFileSystemMetaData::LegacyLinkType).isLegacyLink();
228 [](
const QFileInfo &fileInfo) {
return fileInfo.isSymLink(); });
234 return native.ensureFilled(QFileSystemMetaData::LinkType).isLink();
236 [](
const QFileInfo &fileInfo) {
return fileInfo.isSymbolicLink(); });
242 return native.ensureFilled(QFileSystemMetaData::ExistsAttribute).exists();
244 [](
const QFileInfo &fileInfo) {
return fileInfo.exists(); });
250 return native.ensureFilled(QFileSystemMetaData::HiddenAttribute).isHidden();
252 [](
const QFileInfo &fileInfo) {
return fileInfo.isHidden(); });
258 return native.ensureFilled(QFileSystemMetaData::UserReadPermission).isReadable();
260 [](
const QFileInfo &fileInfo) {
return fileInfo.isReadable(); });
266 return native.ensureFilled(QFileSystemMetaData::UserWritePermission).isWritable();
268 [](
const QFileInfo &fileInfo) {
return fileInfo.isWritable(); });
274 return native.ensureFilled(QFileSystemMetaData::UserExecutePermission)
277 [](
const QFileInfo &fileInfo) {
return fileInfo.isExecutable(); });
290 friend class QFileSystemIterator;
297 const QAbstractFileEngineIterator *iterator =
nullptr;
298 std::optional<QFileInfo> fileInfo;
300 const QFileInfo &ensureFileInfo()
302 if (!fileInfo.has_value())
303 fileInfo = iterator->currentFileInfo();
310 QFileSystemEntry entry;
311 QFileSystemMetaData metaData;
313 const QFileSystemMetaData &ensureFilled(QFileSystemMetaData::MetaDataFlag what)
315 if (!metaData.hasFlags(what))
316 QFileSystemEngine::fillMetaData(entry, metaData, what);
321 std::variant<Native, QFileInfo, Iterator> content;
QDirEntryInfo(QFileSystemEntry &&e, QFileSystemMetaData &&md)
const QFileInfo & fileInfo()
QString absoluteFilePath()
QString canonicalFilePath()
QDateTime fileTime(QFile::FileTime type, const QTimeZone &tz)
QDirEntryInfo(QFileInfo &&info)
QDirEntryInfo(const QAbstractFileEngineIterator *iterator)
QString completeBaseName()
constexpr decltype(auto) visit(Visitor &&vis, Variant &&var)
T & emplace(Variant &v, Args &&...args)
overloaded(Ts...) -> overloaded< Ts... >
#define QT_VARIANT_VISIT_CASE(num)