Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
qqmljsregistercontent_p.h
Go to the documentation of this file.
1// Copyright (C) 2021 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3
4#ifndef QQMLJSREGISTERCONTENT_P_H
5#define QQMLJSREGISTERCONTENT_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#include "qqmljsscope_p.h"
18#include <QtCore/qhash.h>
19#include <QtCore/qstring.h>
20
21#include <variant>
22
24
25class Q_QMLCOMPILER_PRIVATE_EXPORT QQmlJSRegisterContent
26{
27public:
33
37 GenericObjectProperty, // Can be JSObject property or QVariantMap
38
45
54
57
61 };
62
64 bool isValid() const { return !m_storedType.isNull(); }
65
66 QString descriptiveName() const;
67
69 {
70 return a.m_storedType == b.m_storedType && a.m_variant == b.m_variant
71 && a.m_scope == b.m_scope && a.m_content == b.m_content;
72 }
73
75 {
76 return !(a == b);
77 }
78
79 bool isType() const { return m_content.index() == Type; }
80 bool isProperty() const { return m_content.index() == Property; }
81 bool isEnumeration() const { return m_content.index() == Enum; }
82 bool isMethod() const { return m_content.index() == Method; }
83 bool isImportNamespace() const { return m_content.index() == ImportNamespace; }
84 bool isConversion() const { return m_content.index() == Conversion; }
85 bool isList() const;
86
87 bool isWritable() const;
88
89 QQmlJSScope::ConstPtr storedType() const { return m_storedType; }
90 QQmlJSScope::ConstPtr scopeType() const { return m_scope; }
91
92 QQmlJSScope::ConstPtr type() const { return std::get<QQmlJSScope::ConstPtr>(m_content); }
93 QQmlJSMetaProperty property() const { return std::get<QQmlJSMetaProperty>(m_content); }
95 {
96 return std::get<std::pair<QQmlJSMetaEnum, QString>>(m_content).first;
97 }
99 {
100 return std::get<std::pair<QQmlJSMetaEnum, QString>>(m_content).second;
101 }
102 QList<QQmlJSMetaMethod> method() const { return std::get<QList<QQmlJSMetaMethod>>(m_content); }
103 uint importNamespace() const { return std::get<uint>(m_content); }
104
106 {
107 return std::get<ConvertedTypes>(m_content).result;
108 }
109
111 {
112 return std::get<ConvertedTypes>(m_content).origins;
113 }
114
115 ContentVariant variant() const { return m_variant; }
116
117 friend size_t qHash(const QQmlJSRegisterContent &registerContent, size_t seed = 0)
118 {
119 seed = qHashMulti(seed, registerContent.m_storedType, registerContent.m_content.index(),
120 registerContent.m_scope, registerContent.m_variant);
121 switch (registerContent.m_content.index()) {
122 case Type:
123 return qHash(std::get<QQmlJSScope::ConstPtr>(registerContent.m_content), seed);
124 case Property:
125 return qHash(std::get<QQmlJSMetaProperty>(registerContent.m_content), seed);
126 case Enum:
127 return qHash(std::get<std::pair<QQmlJSMetaEnum, QString>>(registerContent.m_content),
128 seed);
129 case Method:
130 return qHash(std::get<QList<QQmlJSMetaMethod>>(registerContent.m_content), seed);
131 case ImportNamespace:
132 return qHash(std::get<uint>(registerContent.m_content), seed);
133 case Conversion:
134 return qHash(std::get<ConvertedTypes>(registerContent.m_content), seed);
135 }
136
137 Q_UNREACHABLE_RETURN(seed);
138 }
139
140 static QQmlJSRegisterContent create(const QQmlJSScope::ConstPtr &storedType,
141 const QQmlJSScope::ConstPtr &type, ContentVariant variant,
142 const QQmlJSScope::ConstPtr &scope = {});
143
144 static QQmlJSRegisterContent create(const QQmlJSScope::ConstPtr &storedType,
145 const QQmlJSMetaProperty &property, ContentVariant variant,
146 const QQmlJSScope::ConstPtr &scope);
147
148 static QQmlJSRegisterContent create(const QQmlJSScope::ConstPtr &storedType,
149 const QQmlJSMetaEnum &enumeration,
150 const QString &enumMember, ContentVariant variant,
151 const QQmlJSScope::ConstPtr &scope);
152
153 static QQmlJSRegisterContent create(const QQmlJSScope::ConstPtr &storedType,
155 ContentVariant variant,
156 const QQmlJSScope::ConstPtr &scope);
157
158 static QQmlJSRegisterContent create(const QQmlJSScope::ConstPtr &storedType,
159 uint importNamespaceStringId, ContentVariant variant,
160 const QQmlJSScope::ConstPtr &scope = {});
161
162 static QQmlJSRegisterContent create(const QQmlJSScope::ConstPtr &storedType,
164 const QQmlJSScope::ConstPtr &conversion,
165 ContentVariant variant,
166 const QQmlJSScope::ConstPtr &scope = {});
167
169 {
171 result.m_storedType = newStoredType;
172 return result;
173 }
174
175private:
176 enum ContentKind { Type, Property, Enum, Method, ImportNamespace, Conversion };
177
178 struct ConvertedTypes
179 {
182
183 friend size_t qHash(const ConvertedTypes &types, size_t seed = 0)
184 {
185 return qHashMulti(seed, types.origins, types.result);
186 }
187
188 friend bool operator==(const ConvertedTypes &a, const ConvertedTypes &b)
189 {
190 return a.origins == b.origins && a.result == b.result;
191 }
192
193 friend bool operator!=(const ConvertedTypes &a, const ConvertedTypes &b)
194 {
195 return !(a == b);
196 }
197 };
198
199 using Content = std::variant<
202 std::pair<QQmlJSMetaEnum, QString>,
204 uint,
205 ConvertedTypes
206 >;
207
209 const QQmlJSScope::ConstPtr &scope, ContentVariant variant)
210 : m_storedType(storedType), m_scope(scope), m_variant(variant)
211 {
212 }
213
214 QQmlJSScope::ConstPtr m_storedType;
215 QQmlJSScope::ConstPtr m_scope;
216 Content m_content;
217 ContentVariant m_variant = Unknown;
218
219 // TODO: Constant string/number/bool/enumval
220};
221
223
224#endif // REGISTERCONTENT_H
static JNINativeMethod methods[]
Definition qlist.h:74
QQmlJSRegisterContent storedIn(const QQmlJSScope::ConstPtr &newStoredType) const
QQmlJSRegisterContent()=default
QQmlJSScope::ConstPtr conversionResult() const
QQmlJSMetaProperty property() const
QQmlJSScope::ConstPtr scopeType() const
QList< QQmlJSScope::ConstPtr > conversionOrigins() const
ContentVariant variant() const
friend size_t qHash(const QQmlJSRegisterContent &registerContent, size_t seed=0)
QQmlJSScope::ConstPtr type() const
QQmlJSScope::ConstPtr storedType() const
friend bool operator!=(const QQmlJSRegisterContent &a, const QQmlJSRegisterContent &b)
QQmlJSMetaEnum enumeration() const
friend bool operator==(const QQmlJSRegisterContent &a, const QQmlJSRegisterContent &b)
QList< QQmlJSMetaMethod > method() const
QDeferredSharedPointer< const QQmlJSScope > ConstPtr
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:127
Combined button and popup list for selecting options.
constexpr bool operator!=(const timespec &t1, const timespec &t2)
static const QCssKnownValue origins[NumKnownOrigins - 1]
size_t qHash(const QFileSystemWatcherPathKey &key, size_t seed=0)
constexpr QtPrivate::QHashMultiReturnType< T... > qHashMulti(size_t seed, const T &... args) noexcept(std::conjunction_v< QtPrivate::QNothrowHashable< T >... >)
GLboolean GLboolean GLboolean b
GLboolean GLboolean GLboolean GLboolean a
[7]
GLsizei GLenum GLenum * types
GLenum type
GLint first
GLuint64EXT * result
[6]
static Q_CONSTINIT QBasicAtomicInteger< unsigned > seed
Definition qrandom.cpp:196
bool operator==(const QRandomGenerator &rng1, const QRandomGenerator &rng2)
Definition qrandom.cpp:1219
unsigned int uint
Definition qtypes.h:29
const char property[13]
Definition qwizard.cpp:101
QVariant variant
[1]
view create()
Definition moc.h:24