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
qqmlmetatypedata_p.h
Go to the documentation of this file.
1// Copyright (C) 2019 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 QQMLMETATYPEDATA_P_H
5#define QQMLMETATYPEDATA_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 <private/qqmltype_p.h>
19#include <private/qqmlmetatype_p.h>
20#include <private/qhashedstring_p.h>
21#include <private/qqmlvaluetype_p.h>
22
23#include <QtCore/qset.h>
24#include <QtCore/qvector.h>
25
27
28class QQmlTypePrivate;
30{
34 QList<QQmlType> types;
35 QSet<QQmlType> undeletableTypes;
36 typedef QHash<int, QQmlTypePrivate *> Ids;
38
39 using Names = QMultiHash<QHashedString, const QQmlTypePrivate *>;
41
42 typedef QHash<QUrl, const QQmlTypePrivate *> Files; //For file imported composite types only
44 Files urlToNonFileImportType; // For non-file imported composite and composite
45 // singleton types. This way we can locate any
46 // of them by url, even if it was registered as
47 // a module via QQmlPrivate::RegisterCompositeType
48 typedef QMultiHash<const QMetaObject *, QQmlTypePrivate *> MetaObjects;
50 QVector<QHash<QTypeRevision, QQmlPropertyCache::ConstPtr>> typePropertyCaches;
51 QHash<int, QQmlValueType *> metaTypeToValueType;
52
54 QQmlRefPointer<QV4::CompiledData::CompilationUnit>>;
56 QHash<QUrl, QQmlType> inlineComponentTypes;
57
58 struct VersionedUri {
59 VersionedUri() = default;
61 : uri(uri), majorVersion(version.majorVersion()) {}
62 VersionedUri(const std::unique_ptr<QQmlTypeModule> &module);
63
64 friend bool operator==(const VersionedUri &a, const VersionedUri &b)
65 {
66 return a.majorVersion == b.majorVersion && a.uri == b.uri;
67 }
68
69 friend size_t qHash(const VersionedUri &v, size_t seed = 0)
70 {
71 return qHashMulti(seed, v.uri, v.majorVersion);
72 }
73
76 {
77 const int diff = a.uri.compare(b.uri);
78 return diff < 0 || (diff == 0 && a.majorVersion < b.majorVersion);
79 }
80
83 };
84
85 typedef std::vector<std::unique_ptr<QQmlTypeModule>> TypeModules;
87 QQmlTypeModule *findTypeModule(const QString &module, QTypeRevision version);
88 QQmlTypeModule *addTypeModule(std::unique_ptr<QQmlTypeModule> module);
89
90 using ModuleImports = QMultiMap<VersionedUri, QQmlDirParser::Import>;
92
94 bool registerModuleTypes(const QString &uri);
95
96 QSet<int> interfaces;
97
98 QList<QQmlPrivate::AutoParentFunction> parentFunctions;
99 QVector<QQmlPrivate::QmlUnitCacheLookupFunction> lookupCachedQmlUnit;
100
101 QHash<const QMetaObject *, QQmlPropertyCache::ConstPtr> propertyCaches;
102
107
111
113 {
114 m_typeRegistrationFailures = failures;
115 }
116
118 {
119 if (m_typeRegistrationFailures)
120 m_typeRegistrationFailures->append(message);
121 else
122 qWarning("%s", message.toUtf8().constData());
123 }
124
125private:
126 QStringList *m_typeRegistrationFailures = nullptr;
127};
128
130
131#endif // QQMLMETATYPEDATA_P_H
\inmodule QtCore
Definition qmetatype.h:341
\inmodule QtCore
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
\inmodule QtCore
QCache< int, Employee > cache
[0]
Combined button and popup list for selecting options.
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
constexpr QtPrivate::QHashMultiReturnType< T... > qHashMulti(size_t seed, const T &... args) noexcept(std::conjunction_v< QtPrivate::QNothrowHashable< T >... >)
#define qWarning
Definition qlogging.h:166
static const QMetaObjectPrivate * priv(const uint *data)
GLboolean GLboolean GLboolean b
GLsizei const GLfloat * v
[13]
GLboolean GLboolean GLboolean GLboolean a
[7]
GLuint index
[2]
GLenum type
GLuint GLsizei const GLchar * message
GLdouble GLdouble t
Definition qopenglext.h:243
static Q_CONSTINIT QBasicAtomicInteger< unsigned > seed
Definition qrandom.cpp:196
unsigned char quint8
Definition qtypes.h:46
obj metaObject() -> className()
\inmodule QtCore
friend size_t qHash(const VersionedUri &v, size_t seed=0)
friend bool operator<(const QQmlMetaTypeData::VersionedUri &a, const QQmlMetaTypeData::VersionedUri &b)
friend bool operator==(const VersionedUri &a, const VersionedUri &b)
VersionedUri(const QString &uri, QTypeRevision version)
QQmlTypeModule * addTypeModule(std::unique_ptr< QQmlTypeModule > module)
bool registerModuleTypes(const QString &uri)
QHash< int, QQmlTypePrivate * > Ids
MetaObjects metaObjectToType
QHash< QUrl, QQmlType > inlineComponentTypes
QQmlTypeModule * findTypeModule(const QString &module, QTypeRevision version)
QHash< int, QQmlValueType * > metaTypeToValueType
QQmlPropertyCache::ConstPtr propertyCache(const QMetaObject *metaObject, QTypeRevision version)
QHash< const QMetaObject *, QQmlPropertyCache::ConstPtr > propertyCaches
QMultiHash< const QMetaObject *, QQmlTypePrivate * > MetaObjects
QVector< QQmlPrivate::QmlUnitCacheLookupFunction > lookupCachedQmlUnit
void registerType(QQmlTypePrivate *priv)
QVector< QHash< QTypeRevision, QQmlPropertyCache::ConstPtr > > typePropertyCaches
QHash< QString, void(*)()> moduleTypeRegistrationFunctions
QList< QQmlPrivate::AutoParentFunction > parentFunctions
CompositeTypes compositeTypes
ModuleImports moduleImports
QList< QQmlType > types
void setTypeRegistrationFailures(QStringList *failures)
std::vector< std::unique_ptr< QQmlTypeModule > > TypeModules
QHash< QUrl, const QQmlTypePrivate * > Files
QSet< QQmlType > undeletableTypes
QQmlPropertyCache::ConstPtr findPropertyCacheInCompositeTypes(QMetaType t) const
QQmlPropertyCache::ConstPtr propertyCacheForVersion(int index, QTypeRevision version) const
void clearPropertyCachesForVersion(int index)
void setPropertyCacheForVersion(int index, QTypeRevision version, const QQmlPropertyCache::ConstPtr &cache)
void recordTypeRegFailure(const QString &message)