Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
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"
22#include "qfilesystemengine_p.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,
45 CachedPerms = 0x100
46 };
47
68 : fileEntry(file),
69 fileEngine(QFileSystemEngine::createLegacyEngine(fileEntry, metaData)),
70 cachedFlags(0),
71#ifndef QT_NO_FSFILEENGINE
72 isDefaultConstructed(file.isEmpty()),
73#else
75#endif
76 cache_enabled(true), fileFlags(0), fileSize(0)
77 {
78 }
79
81 : QSharedData(),
84 fileEngine(QFileSystemEngine::createLegacyEngine(fileEntry, metaData)),
85 cachedFlags(0),
87 cache_enabled(true), fileFlags(0), fileSize(0)
88 {
89 //If the file engine is not null, this maybe a "mount point" for a custom file engine
90 //in which case we can't trust the metadata
91 if (fileEngine)
93 }
94
95 inline QFileInfoPrivate(const QFileSystemEntry &file, const QFileSystemMetaData &data, std::unique_ptr<QAbstractFileEngine> engine)
96 : fileEntry(file),
98 fileEngine{std::move(engine)},
99 cachedFlags(0),
100#ifndef QT_NO_FSFILEENGINE
102#else
104#endif
105 cache_enabled(true), fileFlags(0), fileSize(0)
106 {
107 }
108
109 inline void clearFlags() const {
110 fileFlags = 0;
111 cachedFlags = 0;
112 if (fileEngine)
114 }
115 inline void clear() {
116 metaData.clear();
117 clearFlags();
118 for (int i = QAbstractFileEngine::NFileNames - 1 ; i >= 0 ; --i)
119 fileNames[i].clear();
120 fileOwners[1].clear();
121 fileOwners[0].clear();
122 }
123
124 uint getFileFlags(QAbstractFileEngine::FileFlags) const;
128
131
132 std::unique_ptr<QAbstractFileEngine> const fileEngine;
133
135 mutable QString fileOwners[2]; // QAbstractFileEngine::FileOwner: OwnerUser and OwnerGroup
136 mutable QDateTime fileTimes[4]; // QFile::FileTime: FileBirthTime, FileMetadataChangeTime, FileModificationTime, FileAccessTime
137
138 mutable uint cachedFlags : 30;
139 bool const isDefaultConstructed : 1; // QFileInfo is a default constructed instance
143 inline bool getCachedFlag(uint c) const
144 { return cache_enabled ? (cachedFlags & c) : 0; }
145 inline void setCachedFlag(uint c) const
146 { if (cache_enabled) cachedFlags |= c; }
147
148 template <typename Ret, typename FSLambda, typename EngineLambda>
149 Ret checkAttribute(Ret defaultValue, QFileSystemMetaData::MetaDataFlags fsFlags,
150 FSLambda fsLambda, EngineLambda engineLambda) const
151 {
153 return defaultValue;
154 if (fileEngine)
155 return engineLambda();
156 if (!cache_enabled || !metaData.hasFlags(fsFlags)) {
158 // ignore errors, fillMetaData will have cleared the flags
159 }
160 return fsLambda();
161 }
162
163 template <typename Ret, typename FSLambda, typename EngineLambda>
164 Ret checkAttribute(QFileSystemMetaData::MetaDataFlags fsFlags, FSLambda fsLambda,
165 EngineLambda engineLambda) const
166 {
167 return checkAttribute(Ret(), std::move(fsFlags), std::move(fsLambda), engineLambda);
168 }
169};
170
172
173#endif // QFILEINFO_P_H
FileOwner
\value OwnerUser The user who owns the file.
FileName
These values are used to request a file name in a particular format.
\inmodule QtCore\reentrant
Definition qdatetime.h:283
QFileInfoPrivate(const QFileSystemEntry &file, const QFileSystemMetaData &data, std::unique_ptr< QAbstractFileEngine > engine)
Definition qfileinfo_p.h:95
bool const isDefaultConstructed
QFileInfoPrivate(const QFileSystemEntry &file, const QFileSystemMetaData &data)
Definition qfileinfo_p.h:80
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:54
QFileSystemEntry fileEntry
QString getFileName(QAbstractFileEngine::FileName) const
Definition qfileinfo.cpp:17
QString fileNames[QAbstractFileEngine::NFileNames]
QFileInfoPrivate(const QString &file)
Definition qfileinfo_p.h:67
Ret checkAttribute(Ret defaultValue, QFileSystemMetaData::MetaDataFlags fsFlags, FSLambda fsLambda, EngineLambda engineLambda) const
static bool fillMetaData(const QFileSystemEntry &entry, QFileSystemMetaData &data, QFileSystemMetaData::MetaDataFlags what)
bool hasFlags(MetaDataFlags flags) const
\inmodule QtCore
Definition qshareddata.h:19
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
void clear()
Clears the contents of the string and makes it null.
Definition qstring.h:1252
Combined button and popup list for selecting options.
static jboolean copy(JNIEnv *, jobject)
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
const GLubyte * c
unsigned int uint
Definition qtypes.h:34
long long qint64
Definition qtypes.h:60
QFile file
[0]
QObject::connect nullptr
QJSEngine engine
[0]