Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qfileinfo_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QFILEINFO_P_H
5#define QFILEINFO_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include "qfileinfo.h"
19#include "qdatetime.h"
20#include "qatomic.h"
21#include "qshareddata.h"
23
24#include <QtCore/private/qabstractfileengine_p.h>
25#include <QtCore/private/qfilesystementry_p.h>
26#include <QtCore/private/qfilesystemmetadata_p.h>
27
28#include <memory>
29
31
33{
34public:
35 enum {
36 // note: cachedFlags is only 30-bits wide
40 CachedSize = 0x08,
46 };
47
48 static QFileInfoPrivate *get(QFileInfo *fi) { return fi->d_func(); }
49
51 : QSharedData(), fileEngine(nullptr),
52 cachedFlags(0),
54 cache_enabled(true), fileFlags(0), fileSize(0)
55 {}
69 inline QFileInfoPrivate(const QString &file)
70 : fileEntry(file),
72 cachedFlags(0),
73#ifndef QT_NO_FSFILEENGINE
74 isDefaultConstructed(file.isEmpty()),
75#else
77#endif
78 cache_enabled(true), fileFlags(0), fileSize(0)
79 {
80 }
81
82 inline QFileInfoPrivate(const QFileSystemEntry &file, const QFileSystemMetaData &data)
87 cachedFlags(0),
89 cache_enabled(true), fileFlags(0), fileSize(0)
90 {
91 //If the file engine is not null, this maybe a "mount point" for a custom file engine
92 //in which case we can't trust the metadata
93 if (fileEngine)
94 metaData = QFileSystemMetaData();
95 }
96
97 inline QFileInfoPrivate(const QFileSystemEntry &file, const QFileSystemMetaData &data, std::unique_ptr<QAbstractFileEngine> engine)
98 : fileEntry(file),
101 cachedFlags(0),
102#ifndef QT_NO_FSFILEENGINE
104#else
106#endif
107 cache_enabled(true), fileFlags(0), fileSize(0)
108 {
109 }
110
111 inline void clearFlags() const {
112 fileFlags = 0;
113 cachedFlags = 0;
114 if (fileEngine)
115 (void)fileEngine->fileFlags(QAbstractFileEngine::Refresh);
116 }
117 inline void clear() {
118 metaData.clear();
120 for (int i = QAbstractFileEngine::NFileNames - 1 ; i >= 0 ; --i)
121 fileNames[i].clear();
122 fileOwners[1].clear();
123 fileOwners[0].clear();
124 }
125
127 QDateTime &getFileTime(QFile::FileTime) const;
129 QString getFileOwner(QAbstractFileEngine::FileOwner own) const;
130
131 QFileSystemEntry fileEntry;
133
135
137 mutable QString fileOwners[2]; // QAbstractFileEngine::FileOwner: OwnerUser and OwnerGroup
138 mutable QDateTime fileTimes[4]; // QFile::FileTime: FileBirthTime, FileMetadataChangeTime, FileModificationTime, FileAccessTime
139
140 mutable uint cachedFlags : 30;
141 bool const isDefaultConstructed : 1; // QFileInfo is a default constructed instance
145 inline bool getCachedFlag(uint c) const
146 { return cache_enabled ? (cachedFlags & c) : 0; }
147 inline void setCachedFlag(uint c) const
148 { if (cache_enabled) cachedFlags |= c; }
149
150 template <typename Ret, typename FSLambda, typename EngineLambda>
153 {
155 return defaultValue;
156 if (fileEngine)
157 return engineLambda();
158 if (!cache_enabled || !metaData.hasFlags(fsFlags)) {
159 QFileSystemEngine::fillMetaData(fileEntry, metaData, fsFlags);
160 // ignore errors, fillMetaData will have cleared the flags
161 }
162 return fsLambda();
163 }
164
165 template <typename Ret, typename FSLambda, typename EngineLambda>
168 {
169 return checkAttribute(Ret(), std::move(fsFlags), std::move(fsLambda), engineLambda);
170 }
171};
172
173QT_END_NAMESPACE
174
175#endif // QFILEINFO_P_H
QFileInfoPrivate(const QFileSystemEntry &file, const QFileSystemMetaData &data, std::unique_ptr< QAbstractFileEngine > engine)
Definition qfileinfo_p.h:97
bool const isDefaultConstructed
QFileInfoPrivate(const QFileSystemEntry &file, const QFileSystemMetaData &data)
Definition qfileinfo_p.h:82
Ret checkAttribute(QFileSystemMetaData::MetaDataFlags fsFlags, FSLambda fsLambda, EngineLambda engineLambda) const
QFileSystemMetaData metaData
QDateTime & getFileTime(QFile::FileTime) const
std::unique_ptr< QAbstractFileEngine > const fileEngine
QDateTime fileTimes[4]
uint getFileFlags(QAbstractFileEngine::FileFlags) const
Definition qfileinfo.cpp:99
void clearFlags() const
void setCachedFlag(uint c) const
QString getFileOwner(QAbstractFileEngine::FileOwner own) const
Definition qfileinfo.cpp:75
QString fileOwners[2]
bool getCachedFlag(uint c) const
QFileInfoPrivate(const QFileInfoPrivate &copy)
Definition qfileinfo_p.h:56
QFileSystemEntry fileEntry
static QFileInfoPrivate * get(QFileInfo *fi)
Definition qfileinfo_p.h:48
QString getFileName(QAbstractFileEngine::FileName) const
Definition qfileinfo.cpp:17
QString fileNames[QAbstractFileEngine::NFileNames]
QFileInfoPrivate(const QString &file)
Definition qfileinfo_p.h:69
Ret checkAttribute(Ret defaultValue, QFileSystemMetaData::MetaDataFlags fsFlags, FSLambda fsLambda, EngineLambda engineLambda) const
\inmodule QtCore
Definition qshareddata.h:19
QSharedData() noexcept
Constructs a QSharedData object with a reference count of 0.
Definition qshareddata.h:23
Combined button and popup list for selecting options.
QDebug operator<<(QDebug dbg, const QFileInfo &fi)
bool comparesEqual(const QFileInfo &lhs, const QFileInfo &rhs)