4#ifndef QQMLPROPERTYCACHE_P_H
5#define QQMLPROPERTYCACHE_P_H
18#include <private/qlinkedstringhash_p.h>
19#include <private/qqmlenumdata_p.h>
20#include <private/qqmlenumvalue_p.h>
21#include <private/qqmlpropertydata_p.h>
22#include <private/qqmlrefcount_p.h>
24#include <QtCore/qvarlengtharray.h>
25#include <QtCore/qvector.h>
26#include <QtCore/qversionnumber.h>
55 reinterpret_cast<SharedHolder *
>(dd ^ Shared)->
release();
64 const auto od =
other.d.loadRelaxed();
66 reinterpret_cast<SharedHolder *
>(od ^ Shared)->addref();
76 SharedHolder *holder =
new SharedHolder(shared);
77 if (!
d.testAndSetRelease(0,
quintptr(holder) | Shared))
83 const auto dd =
d.loadAcquire();
85 return reinterpret_cast<SharedHolder *
>(dd ^ Shared)->
metaObject;
93 const auto dd =
d.loadRelaxed();
94 return !dd || (dd & Shared);
99 return d.loadRelaxed() == 0;
110 Q_DISABLE_COPY_MOVE(SharedHolder)
112 ~SharedHolder() { free(metaObject); }
135 static Ptr createStandalone(
153 int propertyCount,
int methodCount,
int signalCount,
int enumCount)
const;
172 return findProperty(stringCache.find(
key),
object,
context);
182 QString defaultPropertyName()
const;
203 int originalClone(
int index)
const;
211 inline int propertyCount()
const;
212 inline int propertyOffset()
const;
213 inline int methodCount()
const;
214 inline int methodOffset()
const;
215 inline int signalCount()
const;
216 inline int signalOffset()
const;
217 inline int qmlEnumCount()
const;
221 inline bool callJSFactoryMethod(
QObject *
object,
void **
args)
const;
223 static bool determineMetaObjectSizes(
const QMetaObject &
mo,
int *fieldCount,
int *stringCount);
233 friend class QQmlCompiler;
262 StringCache::mapped_type *
it = stringCache.value(
key);
263 return it ?
it->second : 0;
273 enum OverrideResult { NoOverride, InvalidOverride, ValidOverride };
275 template<
typename String>
281 if (
data->markAsOverrideOf(old))
282 return ValidOverride;
284 qWarning(
"Final member %s is overridden in class %s. The override won't be used.",
286 return InvalidOverride;
289 template<
typename String>
292 return handleOverride(
name,
data, findNamedProperty(
name));
295 int propertyIndexCacheStart = 0;
298 IndexCache propertyIndexCache;
299 IndexCache methodIndexCache;
300 IndexCache signalHandlerIndexCache;
301 StringCache stringCache;
302 AllowedRevisionCache allowedRevisionCache;
311 int methodIndexCacheStart = 0;
312 int signalHandlerIndexCacheStart = 0;
313 int _jsFactoryMethodIndex = -1;
327 while (
p->_metaObject.isShared())
337 if (
index < propertyIndexCacheStart)
338 return _parent->property(
index);
340 return &propertyIndexCache.
at(
index - propertyIndexCacheStart);
345 if (index < 0 || index >= (methodIndexCacheStart + methodIndexCache.
size()))
348 if (
index < methodIndexCacheStart)
349 return _parent->method(
index);
360 if (index < 0 || index >= (signalHandlerIndexCacheStart + signalHandlerIndexCache.
size()))
363 if (
index < signalHandlerIndexCacheStart)
364 return _parent->signal(
index);
373 if (index < 0 || index >= enumCache.size())
381 if (index < 0 || index >= (methodIndexCacheStart + methodIndexCache.
size()))
384 if (
index < methodIndexCacheStart)
385 return _parent->methodIndexToSignalIndex(
index);
387 return index - methodIndexCacheStart + signalHandlerIndexCacheStart;
393 return _defaultPropertyName;
404 if (!
data->hasOverride())
407 if (
data->overrideIndexIsProperty())
436 return propertyIndexCacheStart + int(propertyIndexCache.
size());
441 return propertyIndexCacheStart;
446 return methodIndexCacheStart + int(methodIndexCache.
size());
451 return methodIndexCacheStart;
456 return signalHandlerIndexCacheStart + int(signalHandlerIndexCache.
size());
461 return signalHandlerIndexCacheStart;
466 return int(enumCache.size());
471 if (_jsFactoryMethodIndex != -1) {
474 _jsFactoryMethodIndex,
args);
480 return _parent->callJSFactoryMethod(
object,
args);
T loadAcquire() const noexcept
T loadRelaxed() const noexcept
The QJSEngine class provides an environment for evaluating JavaScript code.
qsizetype size() const noexcept
const_reference at(qsizetype i) const noexcept
const QQmlPropertyData * method(int) const
const QQmlPropertyData * signal(int index) const
QQmlPropertyCache()=default
QTypeRevision allowedRevision(int index) const
const QQmlPropertyData * property(const K &key, QObject *object, const QQmlRefPointer< QQmlContextData > &context) const
QQmlEnumData * qmlEnum(int) const
const QQmlPropertyData * overrideData(const QQmlPropertyData *) const
bool callJSFactoryMethod(QObject *object, void **args) const
const QMetaObject * metaObject() const
int propertyOffset() const
bool isAllowedInRevision(const QQmlPropertyData *) const
int propertyCount() const
const QQmlPropertyCache::ConstPtr & parent() const
const QMetaObject * firstCppMetaObject() const
void setAllowedRevision(int index, QTypeRevision allowed)
QString defaultPropertyName() const
int methodIndexToSignalIndex(int) const
iterator insert(const T &value)
\macro QT_RESTRICTED_CAST_FROM_ASCII
constexpr bool hasMinorVersion() const
Returns true if the minor version is known, otherwise false.
static constexpr QTypeRevision zero()
Produces a QTypeRevision with major and minor version {0}.
constexpr bool hasMajorVersion() const
Returns true if the major version is known, otherwise false.
constexpr quint8 minorVersion() const
Returns the minor version encoded in the revision.
constexpr quint8 majorVersion() const
Returns the major version encoded in the revision.
QHash< int, QWidget * > hash
[35multi]
list append(new Employee("Blackpool", "Stephen"))
QSet< QString >::iterator it
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 * method
static quint32 checksum(const QByteArray &table)
static ControlElement< T > * ptr(QWidget *widget)
static int methodIndexToSignalIndex(const QMetaObject **base, int signal_index)
GLsizei GLenum GLenum * types
GLenum GLenum GLsizei count
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLenum GLuint GLintptr offset
constexpr decltype(auto) qMakePair(T1 &&value1, T2 &&value2) noexcept(noexcept(std::make_pair(std::forward< T1 >(value1), std::forward< T2 >(value2))))
#define qPrintable(string)
const char className[16]
[1]
obj metaObject() -> className()
file setParent(multiPart)
ConstPtr & operator=(const Ptr &ptr)
ConstPtr & operator=(Ptr &&ptr)
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent