34 template<
typename QueryNative,
typename QueryFileInfo,
typename QueryIterator>
35 decltype(
auto) visit(QueryNative qn, QueryFileInfo qf, QueryIterator qi)
39 [[maybe_unused]]
const bool valueless = content.valueless_by_exception();
40 Q_PRESUME(!valueless);
42 return std::visit(visitor, content);
44 template<
typename QueryNative,
typename QueryFileInfo,
typename QueryIterator>
46 QueryNative &&queryNative, QueryFileInfo &&queryFileInfo, QueryIterator &&queryIterator)
49 std::forward<QueryNative>(queryNative),
50 std::forward<QueryFileInfo>(queryFileInfo),
51 [&](
const Iterator &iterator) {
return queryIterator(iterator.iterator); }
55 template<
typename QueryNative,
typename QueryFileInfo>
56 auto query(QueryNative &&queryNative,
const QueryFileInfo &queryFileInfo)
59 std::forward<QueryNative>(queryNative),
60 [&](Iterator &iterator) {
return queryFileInfo(iterator.ensureFileInfo()); },
86 [](Iterator &iterator) ->
const QFileInfo & {
return iterator.ensureFileInfo(); },
87 [
this](
const Native &native) ->
const QFileInfo & {
88 content = QFileInfo(
new QFileInfoPrivate(native.entry, native.metaData));
89 return std::get<QFileInfo>(content);
91 [](
const QFileInfo &fileInfo) ->
const QFileInfo & {
return fileInfo; }
98 [](
const Native &native) {
return native.entry.fileName(); },
99 [](
const QFileInfo &info) {
return info.fileName(); },
100 [](
const QAbstractFileEngineIterator *it) {
return it->currentFileName(); });
106 [](
const Native &native) {
return native.entry.baseName(); },
107 [](
const QFileInfo &info) {
return info.baseName(); });
113 [](
const Native &native) {
return native.entry.completeBaseName(); },
114 [](
const QFileInfo &info) {
return info.completeBaseName(); });
120 [](
const Native &native) {
return native.entry.suffix(); },
121 [](
const QFileInfo &info) {
return info.suffix(); });
127 [](
const Native &native) {
return native.entry.completeSuffix(); },
128 [](
const QFileInfo &info) {
return info.completeSuffix(); });
134 [](
const Native &native) {
return native.entry.filePath(); },
135 [](
const QFileInfo &info) {
return info.filePath(); },
136 [](
const QAbstractFileEngineIterator *it) {
return it->currentFilePath(); });
161 return native.ensureFilled(QFileSystemMetaData::DirectoryType).isDirectory();
163 [](
const QFileInfo &fileInfo) {
return fileInfo.isDir(); });
169 return native.ensureFilled(QFileSystemMetaData::FileType).isFile();
171 [](
const QFileInfo &fileInfo) {
return fileInfo.isFile(); });
177 return native.ensureFilled(QFileSystemMetaData::LegacyLinkType).isLegacyLink();
179 [](
const QFileInfo &fileInfo) {
return fileInfo.isSymLink(); });
185 return native.ensureFilled(QFileSystemMetaData::LinkType).isLink();
187 [](
const QFileInfo &fileInfo) {
return fileInfo.isSymbolicLink(); });
193 return native.ensureFilled(QFileSystemMetaData::ExistsAttribute).exists();
195 [](
const QFileInfo &fileInfo) {
return fileInfo.exists(); });
201 return native.ensureFilled(QFileSystemMetaData::HiddenAttribute).isHidden();
203 [](
const QFileInfo &fileInfo) {
return fileInfo.isHidden(); });
209 return native.ensureFilled(QFileSystemMetaData::UserReadPermission).isReadable();
211 [](
const QFileInfo &fileInfo) {
return fileInfo.isReadable(); });
217 return native.ensureFilled(QFileSystemMetaData::UserWritePermission).isWritable();
219 [](
const QFileInfo &fileInfo) {
return fileInfo.isWritable(); });
225 return native.ensureFilled(QFileSystemMetaData::UserExecutePermission)
228 [](
const QFileInfo &fileInfo) {
return fileInfo.isExecutable(); });
241 friend class QFileSystemIterator;
248 const QAbstractFileEngineIterator *iterator =
nullptr;
249 std::optional<QFileInfo> fileInfo;
251 const QFileInfo &ensureFileInfo()
253 if (!fileInfo.has_value())
254 fileInfo = iterator->currentFileInfo();
261 QFileSystemEntry entry;
262 QFileSystemMetaData metaData;
264 const QFileSystemMetaData &ensureFilled(QFileSystemMetaData::MetaDataFlag what)
266 if (!metaData.hasFlags(what))
267 QFileSystemEngine::fillMetaData(entry, metaData, what);
272 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()
overloaded(Ts...) -> overloaded< Ts... >