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
qfilesystemengine_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// Qt-Security score:critical reason:data-parser
4
5#ifndef QFILESYSTEMENGINE_P_H
6#define QFILESYSTEMENGINE_P_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists purely as an
13// implementation detail. This header file may change from version to
14// version without notice, or even be removed.
15//
16// We mean it.
17//
18
19#include "qfile.h"
22#include <QtCore/private/qsystemerror_p.h>
23
24#include <memory>
25#include <optional>
26
28
29#define Q_RETURN_ON_INVALID_FILENAME(message, result)
30 {
31 qWarning(message);
32 errno = EINVAL;
33 return (result);
34 }
35
36inline bool qIsFilenameBroken(const QByteArray &name)
37{
38 return name.contains('\0');
39}
40
41inline bool qIsFilenameBroken(const QString &name)
42{
43 return name.contains(QLatin1Char('\0'));
44}
45
46inline bool qIsFilenameBroken(const QFileSystemEntry &entry)
47{
48 return qIsFilenameBroken(entry.nativeFilePath());
49}
50
51#define Q_CHECK_FILE_NAME(name, result)
52 do {
53 if (Q_UNLIKELY((name).isEmpty()))
54 Q_RETURN_ON_INVALID_FILENAME("Empty filename passed to function", (result));
55 if (Q_UNLIKELY(qIsFilenameBroken(name)))
56 Q_RETURN_ON_INVALID_FILENAME("Broken filename passed to function", (result));
57 } while (false)
58
59Q_CORE_EXPORT bool qt_isCaseSensitive(const QFileSystemEntry &entry, QFileSystemMetaData &data);
60
61class Q_AUTOTEST_EXPORT QFileSystemEngine
62{
63public:
64 using TriStateResult = QAbstractFileEngine::TriStateResult;
65
66 static bool isCaseSensitive(const QFileSystemEntry &entry, QFileSystemMetaData &data);
67
68 static QFileSystemEntry getLinkTarget(const QFileSystemEntry &link, QFileSystemMetaData &data);
69 static QFileSystemEntry getRawLinkPath(const QFileSystemEntry &link,
70 QFileSystemMetaData &data);
71 static QFileSystemEntry getJunctionTarget(const QFileSystemEntry &link, QFileSystemMetaData &data);
72 static QFileSystemEntry canonicalName(const QFileSystemEntry &entry, QFileSystemMetaData &data);
73 static QFileSystemEntry absoluteName(const QFileSystemEntry &entry);
74 static QByteArray id(const QFileSystemEntry &entry);
75 static QString resolveUserName(const QFileSystemEntry &entry, QFileSystemMetaData &data);
76 static QString resolveGroupName(const QFileSystemEntry &entry, QFileSystemMetaData &data);
77
78#if defined(Q_OS_UNIX)
79 static QString resolveUserName(uint userId);
80 static QString resolveGroupName(uint groupId);
81#endif
82
83#if defined(Q_OS_DARWIN)
84 static QString bundleName(const QFileSystemEntry &entry);
85#else
86 static QString bundleName(const QFileSystemEntry &) { return QString(); }
87#endif
88
89 static bool fillMetaData(const QFileSystemEntry &entry, QFileSystemMetaData &data,
90 QFileSystemMetaData::MetaDataFlags what);
91#if defined(Q_OS_UNIX)
92 static TriStateResult cloneFile(int srcfd, int dstfd, const QFileSystemMetaData &knownData);
93 static bool fillMetaData(int fd, QFileSystemMetaData &data); // what = PosixStatFlags
94 static QByteArray id(int fd);
95 static bool setFileTime(int fd, const QDateTime &newDate,
96 QFile::FileTime whatTime, QSystemError &error);
97 static bool setPermissions(int fd, QFile::Permissions permissions, QSystemError &error);
98#endif
99#if defined(Q_OS_WIN)
100 static QFileSystemEntry junctionTarget(const QFileSystemEntry &link, QFileSystemMetaData &data);
101 static bool uncListSharesOnServer(const QString &server, QStringList *list); //Used also by QFSFileEngineIterator::hasNext()
102 static bool fillMetaData(int fd, QFileSystemMetaData &data,
103 QFileSystemMetaData::MetaDataFlags what);
104 static bool fillMetaData(HANDLE fHandle, QFileSystemMetaData &data,
105 QFileSystemMetaData::MetaDataFlags what);
106 static bool fillPermissions(const QFileSystemEntry &entry, QFileSystemMetaData &data,
107 QFileSystemMetaData::MetaDataFlags what);
108 static QByteArray id(HANDLE fHandle);
109 static bool setFileTime(HANDLE fHandle, const QDateTime &newDate,
110 QFile::FileTime whatTime, QSystemError &error);
111 static QString owner(const QFileSystemEntry &entry, QAbstractFileEngine::FileOwner own);
112 static QString nativeAbsoluteFilePath(const QString &path);
113 static bool isDirPath(const QString &path, bool *existed);
114#endif
115 //homePath, rootPath and tempPath shall return clean paths
116 static QString homePath();
117 static QString rootPath();
118 static QString tempPath();
119
120 static bool createDirectory(const QFileSystemEntry &entry, bool createParents,
121 std::optional<QFile::Permissions> permissions = std::nullopt)
122 {
123 if (createParents)
124 return mkpath(entry, permissions);
125 return mkdir(entry, permissions);
126 }
127
128 static bool mkdir(const QFileSystemEntry &entry,
129 std::optional<QFile::Permissions> permissions = std::nullopt);
130 static bool mkpath(const QFileSystemEntry &entry,
131 std::optional<QFile::Permissions> permissions = std::nullopt);
132
133 static bool removeDirectory(const QFileSystemEntry &entry, bool removeEmptyParents)
134 {
135 if (removeEmptyParents)
136 return rmpath(entry);
137 return rmdir(entry);
138 }
139
140 static bool rmdir(const QFileSystemEntry &entry);
141 static bool rmpath(const QFileSystemEntry &entry);
142
143 static bool createLink(const QFileSystemEntry &source, const QFileSystemEntry &target, QSystemError &error);
144
145 static bool copyFile(const QFileSystemEntry &source, const QFileSystemEntry &target, QSystemError &error);
146 static bool supportsMoveFileToTrash();
147 static bool moveFileToTrash(const QFileSystemEntry &source, QFileSystemEntry &newLocation, QSystemError &error);
148 static bool renameFile(const QFileSystemEntry &source, const QFileSystemEntry &target, QSystemError &error);
149 static bool renameOverwriteFile(const QFileSystemEntry &source, const QFileSystemEntry &target, QSystemError &error);
150 static bool removeFile(const QFileSystemEntry &entry, QSystemError &error);
151
152 static bool setPermissions(const QFileSystemEntry &entry, QFile::Permissions permissions,
153 QSystemError &error);
154
155 // unused, therefore not implemented
156 static bool setFileTime(const QFileSystemEntry &entry, const QDateTime &newDate,
157 QFile::FileTime whatTime, QSystemError &error);
158
159 static bool setCurrentPath(const QFileSystemEntry &entry);
160 static QFileSystemEntry currentPath();
161
162 static std::unique_ptr<QAbstractFileEngine>
163 createLegacyEngine(QFileSystemEntry &entry, QFileSystemMetaData &data);
164
165private:
166 static QString slowCanonicalized(const QString &path);
167#if defined(Q_OS_WIN)
168 static void clearWinStatData(QFileSystemMetaData &data);
169#endif
170};
171
172QT_END_NAMESPACE
173
174#endif // include guard
The QAbstractFileEngineIterator class provides an iterator interface for custom file engines.
virtual ~QAbstractFileEnginePrivate()
QAbstractFileEnginePrivate(QAbstractFileEngine *q)
QAbstractFileEngine *const q_ptr
\inmodule QtCore \reentrant
\inmodule QtCore
Definition qdirlisting.h:68
QDirPrivate(const QDirPrivate &copy)
Definition qdir.cpp:105
@ UrlNormalizationMode
Definition qdir_p.h:34
@ RemotePath
Definition qdir_p.h:35
MetaDataClearing
Definition qdir_p.h:65
@ IncludingMetaData
Definition qdir_p.h:65
void clearCache(MetaDataClearing mode)
Definition qdir.cpp:470
void initFileLists(const QDir &dir) const
Definition qdir.cpp:455
bool exists() const
Definition qdir.cpp:122
QString resolveAbsoluteEntry() const
Definition qdir.cpp:178
bool operator()(const QDirSortItem &, const QDirSortItem &) const
Definition qdir.cpp:258
QDirSortItemComparator(QDir::SortFlags flags, QCollator *coll=nullptr)
Definition qdir.cpp:232
int compareStrings(const QString &a, const QString &b, Qt::CaseSensitivity cs) const
Definition qdir.cpp:248
\inmodule QtCore
\inmodule QtCore
Definition qhash.h:1179
const_iterator & operator++() noexcept
The prefix ++ operator ({++i}) advances the iterator to the next item in the hash and returns an iter...
Definition qhash.h:1204
const_iterator(const iterator &o) noexcept
Constructs a copy of other.
Definition qhash.h:1195
constexpr const_iterator() noexcept=default
Constructs an uninitialized iterator.
const_iterator operator++(int) noexcept
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qhash.h:1209
std::forward_iterator_tag iterator_category
Definition qhash.h:1188
const T * operator->() const noexcept
Returns a pointer to the current item's value.
Definition qhash.h:1200
const T & reference
Definition qhash.h:1192
bool operator==(const const_iterator &o) const noexcept
Returns true if other points to the same item as this iterator; otherwise returns false.
Definition qhash.h:1201
const T & value() const noexcept
Returns the current item's value.
Definition qhash.h:1198
const Key & key() const noexcept
Returns the current item's key.
Definition qhash.h:1197
qptrdiff difference_type
Definition qhash.h:1189
const T * pointer
Definition qhash.h:1191
bool operator!=(const const_iterator &o) const noexcept
Returns true if other points to a different item than this iterator; otherwise returns false.
Definition qhash.h:1202
const T & operator*() const noexcept
Returns the current item's value.
Definition qhash.h:1199
\inmodule QtCore
Definition qhash.h:1219
key_iterator & operator++() noexcept
The prefix ++ operator ({++i}) advances the iterator to the next item in the hash and returns an iter...
Definition qhash.h:1237
key_iterator() noexcept=default
bool operator!=(key_iterator o) const noexcept
Returns true if other points to a different item than this iterator; otherwise returns false.
Definition qhash.h:1235
key_iterator operator++(int) noexcept
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qhash.h:1238
const Key & operator*() const noexcept
Returns the current item's key.
Definition qhash.h:1232
const Key * operator->() const noexcept
Returns a pointer to the current item's key.
Definition qhash.h:1233
key_iterator(const_iterator o) noexcept
Definition qhash.h:1230
qptrdiff difference_type
Definition qhash.h:1224
const Key * pointer
Definition qhash.h:1226
bool operator==(key_iterator o) const noexcept
Returns true if other points to the same item as this iterator; otherwise returns false.
Definition qhash.h:1234
const_iterator::iterator_category iterator_category
Definition qhash.h:1223
const Key & reference
Definition qhash.h:1227
const_iterator base() const noexcept
Returns the underlying const_iterator this key_iterator is based on.
Definition qhash.h:1239
\inmodule QtCore
Definition qhash.h:837
T value_type
Definition qhash.h:849
QHash & operator=(const QHash &other) noexcept(std::is_nothrow_destructible< Node >::value)
Assigns other to this hash and returns a reference to this hash.
Definition qhash.h:877
key_value_iterator try_emplace(const_iterator, K &&key, Args &&...args)
Definition qhash.h:1631
T & operator[](const K &key)
Definition qhash.h:1579
key_iterator keyEnd() const noexcept
Definition qhash.h:1255
const T operator[](const K &key) const noexcept
Definition qhash.h:1584
T take(const K &key)
Definition qhash.h:1548
std::pair< const_iterator, const_iterator > equal_range(const Key &key) const noexcept
Definition qhash.h:1309
TryEmplaceResult insertOrAssign(const Key &key, Value &&value)
Definition qhash.h:1473
float load_factor() const noexcept
Returns the current load factor of the QHash's internal hash table.
Definition qhash.h:1515
const_iterator constFind(const Key &key) const noexcept
Definition qhash.h:1357
std::pair< key_value_iterator, bool > insert_or_assign(Key &&key, Value &&value)
Definition qhash.h:1488
~QHash()
Destroys the hash.
Definition qhash.h:868
T & reference
Definition qhash.h:852
iterator erase(const_iterator it)
Definition qhash.h:1291
std::pair< key_value_iterator, bool > try_emplace(K &&key, Args &&...args)
Definition qhash.h:1626
iterator emplace(const Key &key, Args &&... args)
Definition qhash.h:1382
key_value_iterator keyValueBegin()
Definition qhash.h:1256
const_iterator constFind(const K &key) const noexcept
Definition qhash.h:1611
T value(const K &key, const T &defaultValue) const noexcept
Definition qhash.h:1571
QHash(const QHash &other) noexcept
Constructs a copy of other.
Definition qhash.h:862
auto asKeyValueRange() const &&
Definition qhash.h:1265
TryEmplaceResult tryEmplace(K &&key, Args &&...args)
Definition qhash.h:1616
TryEmplaceResult tryInsert(const Key &key, const T &value)
Definition qhash.h:1413
iterator emplace(Key &&key, Args &&... args)
Inserts a new element into the container.
Definition qhash.h:1389
friend bool comparesEqual(const QHash &lhs, const QHash &rhs) noexcept
Definition qhash.h:933
TryEmplaceResult tryEmplace(const Key &key, Args &&...args)
\variable QHash::TryEmplaceResult::iterator
Definition qhash.h:1403
const_key_value_iterator constKeyValueEnd() const noexcept
Definition qhash.h:1261
bool empty() const noexcept
This function is provided for STL compatibility.
Definition qhash.h:1521
std::pair< key_value_iterator, bool > insert_or_assign(K &&key, Value &&value)
Definition qhash.h:1641
const_iterator cbegin() const noexcept
Definition qhash.h:1248
std::pair< key_value_iterator, bool > try_emplace(const Key &key, Args &&...args)
Definition qhash.h:1419
key_value_iterator insert_or_assign(const_iterator, K &&key, Value &&value)
Definition qhash.h:1646
iterator begin()
Returns an \l{STL-style iterators}{STL-style iterator} pointing to the first item in the hash.
Definition qhash.h:1246
void insert(const QHash &hash)
Definition qhash.h:1366
const_iterator find(const Key &key) const noexcept
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qhash.h:1353
std::pair< key_value_iterator, bool > try_emplace(Key &&key, Args &&...args)
Definition qhash.h:1424
static float max_load_factor() noexcept
Definition qhash.h:1516
auto asKeyValueRange() &
Definition qhash.h:1262
QKeyValueIterator< const Key &, const T &, const_iterator > const_key_value_iterator
\inmodule QtCore
Definition qhash.h:1242
const_key_value_iterator keyValueBegin() const noexcept
Definition qhash.h:1258
TryEmplaceResult insertOrAssign(K &&key, Value &&value)
Definition qhash.h:1636
key_value_iterator keyValueEnd()
Definition qhash.h:1257
const_iterator end() const noexcept
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qhash.h:1251
Key key_type
Typedef for Key.
Definition qhash.h:847
iterator find(const K &key)
Definition qhash.h:1601
const_key_value_iterator constKeyValueBegin() const noexcept
Definition qhash.h:1259
iterator insert(const Key &key, const T &value)
Inserts a new item with the key and a value of value.
Definition qhash.h:1361
qsizetype count(const K &key) const
Definition qhash.h:1558
std::pair< iterator, iterator > equal_range(const K &key)
Definition qhash.h:1590
key_iterator keyBegin() const noexcept
Definition qhash.h:1254
iterator Iterator
Qt-style synonym for QHash::iterator.
Definition qhash.h:1346
key_value_iterator insert_or_assign(const_iterator, const Key &key, Value &&value)
Definition qhash.h:1493
bool contains(const K &key) const
Definition qhash.h:1553
TryEmplaceResult tryInsert(K &&key, const T &value)
Definition qhash.h:1621
std::pair< const_iterator, const_iterator > equal_range(const K &key) const noexcept
Definition qhash.h:1596
size_t bucket_count() const noexcept
Definition qhash.h:1517
const_iterator ConstIterator
Qt-style synonym for QHash::const_iterator.
Definition qhash.h:1347
key_value_iterator try_emplace(const_iterator, Key &&key, Args &&...args)
Definition qhash.h:1434
auto asKeyValueRange() &&
Definition qhash.h:1264
auto asKeyValueRange() const &
Definition qhash.h:1263
const_iterator constBegin() const noexcept
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the first item in the hash.
Definition qhash.h:1249
qsizetype count() const noexcept
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qhash.h:1348
QHash(std::initializer_list< std::pair< Key, T > > list)
Definition qhash.h:856
T value(const K &key) const noexcept
Definition qhash.h:1563
const_iterator find(const K &key) const noexcept
Definition qhash.h:1606
iterator find(const Key &key)
Returns an iterator pointing to the item with the key in the hash.
Definition qhash.h:1349
iterator end() noexcept
Returns an \l{STL-style iterators}{STL-style iterator} pointing to the imaginary item after the last ...
Definition qhash.h:1250
QHash(QHash &&other) noexcept
Move-constructs a QHash instance, making it point at the same object that other was pointing to.
Definition qhash.h:890
std::pair< key_value_iterator, bool > insert_or_assign(const Key &key, Value &&value)
Definition qhash.h:1483
std::pair< iterator, iterator > equal_range(const Key &key)
Definition qhash.h:1305
const_iterator cend() const noexcept
Definition qhash.h:1252
key_value_iterator insert_or_assign(const_iterator, Key &&key, Value &&value)
Definition qhash.h:1498
static size_t max_bucket_count() noexcept
Definition qhash.h:1518
bool remove(const K &key)
Definition qhash.h:1543
QKeyValueIterator< const Key &, T &, iterator > key_value_iterator
\inmodule QtCore
Definition qhash.h:1243
TryEmplaceResult insertOrAssign(Key &&key, Value &&value)
Definition qhash.h:1478
QHash() noexcept=default
Constructs an empty hash.
const T & const_reference
Definition qhash.h:853
TryEmplaceResult tryEmplace(Key &&key, Args &&...args)
Definition qhash.h:1408
key_value_iterator try_emplace(const_iterator, const Key &key, Args &&...args)
Definition qhash.h:1429
T mapped_type
Typedef for T.
Definition qhash.h:848
const_key_value_iterator keyValueEnd() const noexcept
Definition qhash.h:1260
const_iterator begin() const noexcept
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qhash.h:1247
const_iterator constEnd() const noexcept
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the imaginary item after the ...
Definition qhash.h:1253
\inmodule QtCore
Definition qmutex.h:346
constexpr size_t bucketForHash(size_t nBuckets, size_t hash) noexcept
Definition qhash.h:439
constexpr size_t bucketsForCapacity(size_t requestedCapacity) noexcept
Definition qhash.h:419
constexpr bool isRelocatable()
Definition qhash.h:218
constexpr bool HasStdHashSpecializationWithoutSeed
Definition qhash.h:48
size_t calculateHash(const T &t, size_t seed=0)
Definition qhash.h:56
std::conditional_t< std::is_same_v< HashKey, q20::remove_cvref_t< KeyArgument > >, KeyArgument, HashKey > HeterogenousConstructProxy
Definition qhash.h:827
constexpr bool HasQHashOverload
Definition qhash.h:32
constexpr bool HasStdHashSpecializationWithSeed
Definition qhash.h:40
std::unique_ptr< QAbstractFileEngine > qt_custom_file_engine_handler_create(const QString &path)
static void appendIfMatchesNonDirListingFlags(const QDirListing::DirEntry &dirEntry, QDir::Filters filters, QFileInfoList &l)
Definition qdir.cpp:402
static qsizetype rootLength(QStringView name, QDirPrivate::PathNormalizations flags)
Definition qdir.cpp:56
static bool qt_cleanPath(QString *path)
Definition qdir.cpp:2485
bool comparesEqual(const QDir &lhs, const QDir &rhs)
Definition qdir.cpp:1936
static bool treatAsAbsolute(const QString &path)
Definition qdir.cpp:866
static bool checkPermissions(const QDirListing::DirEntry &dirEntry, QDir::Filters filters)
Definition qdir.cpp:364
bool qt_normalizePathSegments(QString *path, QDirPrivate::PathNormalizations flags)
Definition qdir.cpp:2346
static bool checkDotOrDotDot(const QDirListing::DirEntry &dirEntry, QDir::Filters filters)
Definition qdir.cpp:380
Q_AUTOTEST_EXPORT bool qt_normalizePathSegments(QString *path, QDirPrivate::PathNormalizations flags)
Definition qdir.cpp:2346
Q_CORE_EXPORT bool qt_isCaseSensitive(const QFileSystemEntry &entry, QFileSystemMetaData &data)
bool qIsFilenameBroken(const QFileSystemEntry &entry)
bool qIsFilenameBroken(const QString &name)
#define Q_RETURN_ON_INVALID_FILENAME(message, result)
bool qIsFilenameBroken(const QByteArray &name)
qsizetype erase_if(QMultiHash< Key, T > &hash, Predicate pred)
Definition qhash.h:2746
size_t qHash(const QMultiHash< Key, T > &key, size_t seed=0) noexcept(noexcept(qHash(std::declval< Key & >())) &&noexcept(qHash(std::declval< T & >())))
Definition qhash.h:2726
qsizetype erase_if(QHash< Key, T > &hash, Predicate pred)
Definition qhash.h:2740
QFileInfo item
Definition qdir.cpp:220
QString suffix_cache
Definition qdir.cpp:219
QDirSortItem(const QFileInfo &fi, QDir::SortFlags sort)
Definition qdir.cpp:208
QDirSortItem()=default
QString filename_cache
Definition qdir.cpp:218
friend bool operator==(Bucket lhs, Bucket rhs) noexcept
Definition qhash.h:517
size_t offset() const noexcept
Definition qhash.h:499
bool isUnused() const noexcept
Definition qhash.h:495
Bucket(const Data *d, size_t bucket) noexcept
Definition qhash.h:474
Bucket(Span *s, size_t i) noexcept
Definition qhash.h:471
Node * insert() const
Definition qhash.h:511
void advance(const Data *d) noexcept
Definition qhash.h:491
Node & nodeAtOffset(size_t offset)
Definition qhash.h:503
iterator toIterator(const Data *d) const noexcept
Definition qhash.h:486
friend bool operator!=(Bucket lhs, Bucket rhs) noexcept
Definition qhash.h:521
void advanceWrapped(const Data *d) noexcept
Definition qhash.h:487
Bucket(iterator it) noexcept
Definition qhash.h:478
size_t toBucketIndex(const Data *d) const noexcept
Definition qhash.h:482
Bucket findBucketWithHash(const K &key, size_t hash) const noexcept
Definition qhash.h:692
iterator begin() const noexcept
Definition qhash.h:628
QHashPrivate::Span< Node > Span
Definition qhash.h:453
size_t nextBucket(size_t bucket) const noexcept
Definition qhash.h:669
typename Node::ValueType T
Definition qhash.h:452
InsertionResult findOrInsert(const K &key) noexcept
Definition qhash.h:727
Node * findNode(const K &key) const noexcept
Definition qhash.h:713
QHashPrivate::iterator< Node > iterator
Definition qhash.h:454
static Data * detached(Data *d)
Definition qhash.h:596
iterator detachedIterator(iterator other) const noexcept
Definition qhash.h:623
constexpr iterator end() const noexcept
Definition qhash.h:636
bool shouldGrow() const noexcept
Definition qhash.h:681
typename Node::KeyType Key
Definition qhash.h:451
void rehash(size_t sizeHint=0)
Definition qhash.h:641
Q_ALWAYS_INLINE void reallocationHelper(const Data &other, size_t nSpans)
Definition qhash.h:566
void erase(Bucket bucket) noexcept(std::is_nothrow_destructible< Node >::value)
Definition qhash.h:747
QtPrivate::RefCount ref
Definition qhash.h:456
static Data * detached(Data *d, size_t size)
Definition qhash.h:605
float loadFactor() const noexcept
Definition qhash.h:677
Data(size_t reserve=0)
Definition qhash.h:555
static auto allocateSpans(size_t numBuckets)
Definition qhash.h:536
Data(const Data &other, size_t reserved)
Definition qhash.h:588
Data(const Data &other)
Definition qhash.h:582
static constexpr size_t maxNumBuckets() noexcept
Definition qhash.h:462
Bucket findBucket(const K &key) const noexcept
Definition qhash.h:686
size_t numBuckets
Definition qhash.h:458
qsizetype free() noexcept(std::is_nothrow_destructible_v< T >)
Definition qhash.h:125
bool contains(const T &val) const noexcept
Definition qhash.h:137
MultiNodeChain * next
Definition qhash.h:121
static qsizetype freeChain(MultiNode *n) noexcept(std::is_nothrow_destructible_v< T >)
Definition qhash.h:198
MultiNode(MultiNode &&other)
Definition qhash.h:175
void insertMulti(Args &&... args)
Definition qhash.h:205
MultiNode(const MultiNode &other)
Definition qhash.h:181
static void createInPlace(MultiNode *n, const Key &k, Args &&... args)
Definition qhash.h:163
MultiNode(const Key &k, Chain *c)
Definition qhash.h:166
static void createInPlace(MultiNode *n, Key &&k, Args &&... args)
Definition qhash.h:160
MultiNode(Key &&k, Chain *c) noexcept(std::is_nothrow_move_assignable_v< Key >)
Definition qhash.h:170
MultiNodeChain< T > Chain
Definition qhash.h:154
void emplaceValue(Args &&... args)
Definition qhash.h:211
static void createInPlace(Node *n, const Key &k, Args &&...)
Definition qhash.h:107
bool valuesEqual(const Node *) const
Definition qhash.h:114
static void createInPlace(Node *n, Key &&k, Args &&...)
Definition qhash.h:104
void emplaceValue(Args &&... args)
Definition qhash.h:86
bool valuesEqual(const Node *other) const
Definition qhash.h:94
static void createInPlace(Node *n, const Key &k, Args &&... args)
Definition qhash.h:83
static void createInPlace(Node *n, Key &&k, Args &&... args)
Definition qhash.h:80
T && takeValue() noexcept(std::is_nothrow_move_assignable_v< T >)
Definition qhash.h:90
static constexpr size_t SpanShift
Definition qhash.h:224
static constexpr size_t LocalBucketMask
Definition qhash.h:226
static constexpr size_t UnusedEntry
Definition qhash.h:227
static constexpr size_t NEntries
Definition qhash.h:225
unsigned char & nextFree()
Definition qhash.h:251
unsigned char data[sizeof(Node)]
Definition qhash.h:249
const Node & at(size_t i) const noexcept
Definition qhash.h:319
void moveLocal(size_t from, size_t to) noexcept
Definition qhash.h:338
void addStorage()
Definition qhash.h:372
void freeData() noexcept(std::is_nothrow_destructible< Node >::value)
Definition qhash.h:267
void erase(size_t bucket) noexcept(std::is_nothrow_destructible< Node >::value)
Definition qhash.h:292
unsigned char nextFree
Definition qhash.h:258
Span() noexcept
Definition qhash.h:259
unsigned char allocated
Definition qhash.h:257
unsigned char offsets[SpanConstants::NEntries]
Definition qhash.h:255
Entry * entries
Definition qhash.h:256
Node & atOffset(size_t o) noexcept
Definition qhash.h:326
size_t offset(size_t i) const noexcept
Definition qhash.h:304
Node * insert(size_t i)
Definition qhash.h:280
bool hasNode(size_t i) const noexcept
Definition qhash.h:308
void moveFromSpan(Span &fromSpan, size_t fromIndex, size_t to) noexcept(std::is_nothrow_move_constructible_v< Node >)
Definition qhash.h:345
const Node & atOffset(size_t o) const noexcept
Definition qhash.h:332
Node & at(size_t i) noexcept
Definition qhash.h:312
Node * node() const noexcept
Definition qhash.h:799
size_t span() const noexcept
Definition qhash.h:795
iterator operator++() noexcept
Definition qhash.h:806
size_t index() const noexcept
Definition qhash.h:796
const Data< Node > * d
Definition qhash.h:792
QHashPrivate::Span< Node > Span
Definition qhash.h:790
bool isUnused() const noexcept
Definition qhash.h:797
bool operator!=(iterator other) const noexcept
Definition qhash.h:822
bool atEnd() const noexcept
Definition qhash.h:804
bool operator==(iterator other) const noexcept
Definition qhash.h:820
\inmodule QtCore
Definition qhash.h:1268
QHash::iterator iterator
Definition qhash.h:1269
TryEmplaceResult(QHash::iterator it, bool b)
Definition qhash.h:1274