aboutsummaryrefslogtreecommitdiffstats
path: root/src/declarative/qml/qdeclarativepropertycache_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/declarative/qml/qdeclarativepropertycache_p.h')
-rw-r--r--src/declarative/qml/qdeclarativepropertycache_p.h383
1 files changed, 0 insertions, 383 deletions
diff --git a/src/declarative/qml/qdeclarativepropertycache_p.h b/src/declarative/qml/qdeclarativepropertycache_p.h
deleted file mode 100644
index d5d7095667..0000000000
--- a/src/declarative/qml/qdeclarativepropertycache_p.h
+++ /dev/null
@@ -1,383 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEPROPERTYCACHE_P_H
-#define QDECLARATIVEPROPERTYCACHE_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <private/qdeclarativerefcount_p.h>
-#include "qdeclarativecleanup_p.h"
-#include "qdeclarativenotifier_p.h"
-
-#include <private/qhashedstring_p.h>
-#include <QtCore/qvarlengtharray.h>
-#include <QtCore/qvector.h>
-
-QT_BEGIN_NAMESPACE
-
-class QV8Engine;
-class QMetaProperty;
-class QV8QObjectWrapper;
-class QDeclarativeEngine;
-class QDeclarativePropertyData;
-class QDeclarativeAccessors;
-class QDeclarativePropertyCacheMethodArguments;
-
-// We have this somewhat awful split between RawData and Data so that RawData can be
-// used in unions. In normal code, you should always use Data which initializes RawData
-// to an invalid state on construction.
-class QDeclarativePropertyRawData
-{
-public:
- enum Flag {
- NoFlags = 0x00000000,
- ValueTypeFlagMask = 0x0000FFFF, // Flags in valueTypeFlags must fit in this mask
-
- // Can apply to all properties, except IsFunction
- IsConstant = 0x00000001, // Has CONST flag
- IsWritable = 0x00000002, // Has WRITE function
- IsResettable = 0x00000004, // Has RESET function
- IsAlias = 0x00000008, // Is a QML alias to another property
- IsFinal = 0x00000010, // Has FINAL flag
- IsDirect = 0x00000020, // Exists on a C++ QMetaObject
- HasAccessors = 0x00000040, // Has property accessors
-
- // These are mutualy exclusive
- IsFunction = 0x00000080, // Is an invokable
- IsQObjectDerived = 0x00000100, // Property type is a QObject* derived type
- IsEnumType = 0x00000200, // Property type is an enum
- IsQList = 0x00000400, // Property type is a QML list
- IsQmlBinding = 0x00000800, // Property type is a QDeclarativeBinding*
- IsQJSValue = 0x00001000, // Property type is a QScriptValue
- IsV8Handle = 0x00002000, // Property type is a QDeclarativeV8Handle
- IsVMEProperty = 0x00004000, // Property type is a "var" property of VMEMO
- IsValueTypeVirtual = 0x00008000, // Property is a value type "virtual" property
- IsQVariant = 0x00010000, // Property is a QVariant
-
- // Apply only to IsFunctions
- IsVMEFunction = 0x00020000, // Function was added by QML
- HasArguments = 0x00040000, // Function takes arguments
- IsSignal = 0x00080000, // Function is a signal
- IsVMESignal = 0x00100000, // Signal was added by QML
- IsV8Function = 0x00200000, // Function takes QDeclarativeV8Function* args
- IsSignalHandler = 0x00400000, // Function is a signal handler
- IsOverload = 0x00800000, // Function is an overload of another function
-
- // Internal QDeclarativePropertyCache flags
- NotFullyResolved = 0x01000000 // True if the type data is to be lazily resolved
- };
- Q_DECLARE_FLAGS(Flags, Flag)
-
- Flags getFlags() const { return Flag(flags); }
- void setFlags(Flags f) { flags = f; }
-
- bool isValid() const { return coreIndex != -1; }
-
- bool isConstant() const { return flags & IsConstant; }
- bool isWritable() const { return flags & IsWritable; }
- bool isResettable() const { return flags & IsResettable; }
- bool isAlias() const { return flags & IsAlias; }
- bool isFinal() const { return flags & IsFinal; }
- bool isDirect() const { return flags & IsDirect; }
- bool hasAccessors() const { return flags & HasAccessors; }
- bool isFunction() const { return flags & IsFunction; }
- bool isQObject() const { return flags & IsQObjectDerived; }
- bool isEnum() const { return flags & IsEnumType; }
- bool isQList() const { return flags & IsQList; }
- bool isQmlBinding() const { return flags & IsQmlBinding; }
- bool isQJSValue() const { return flags & IsQJSValue; }
- bool isV8Handle() const { return flags & IsV8Handle; }
- bool isVMEProperty() const { return flags & IsVMEProperty; }
- bool isValueTypeVirtual() const { return flags & IsValueTypeVirtual; }
- bool isQVariant() const { return flags & IsQVariant; }
- bool isVMEFunction() const { return flags & IsVMEFunction; }
- bool hasArguments() const { return flags & HasArguments; }
- bool isSignal() const { return flags & IsSignal; }
- bool isVMESignal() const { return flags & IsVMESignal; }
- bool isV8Function() const { return flags & IsV8Function; }
- bool isSignalHandler() const { return flags & IsSignalHandler; }
- bool isOverload() const { return flags & IsOverload; }
-
- bool hasOverride() const { return !(flags & IsValueTypeVirtual) &&
- !(flags & HasAccessors) &&
- overrideIndex >= 0; }
-
- // Returns -1 if not a value type virtual property
- inline int getValueTypeCoreIndex() const;
-
- // Returns the "encoded" index for use with bindings. Encoding is:
- // coreIndex | (valueTypeCoreIndex << 24)
- inline int encodedIndex() const;
-
- union {
- int propType; // When !NotFullyResolved
- const char *propTypeName; // When NotFullyResolved
- };
- int coreIndex;
- union {
- int notifyIndex; // When !IsFunction
- void *arguments; // When IsFunction && HasArguments
- };
-
- union {
- struct { // When !HasAccessors
- qint16 revision;
- qint16 metaObjectOffset;
-
- union {
- struct { // When IsValueTypeVirtual
- quint16 valueTypeFlags; // flags of the access property on the value type proxy
- // object
- quint8 valueTypePropType; // The QVariant::Type of access property on the value
- // type proxy object
- quint8 valueTypeCoreIndex; // The prop index of the access property on the value
- // type proxy object
- };
-
- struct { // When !IsValueTypeVirtual
- uint overrideIndexIsProperty : 1;
- signed int overrideIndex : 31;
- };
- };
- };
- struct { // When HasAccessors
- QDeclarativeAccessors *accessors;
- intptr_t accessorData;
- };
- };
-
-private:
- friend class QDeclarativePropertyData;
- friend class QDeclarativePropertyCache;
- quint32 flags;
-};
-Q_DECLARE_OPERATORS_FOR_FLAGS(QDeclarativePropertyRawData::Flags);
-
-class QDeclarativePropertyData : public QDeclarativePropertyRawData
-{
-public:
- inline QDeclarativePropertyData();
- inline QDeclarativePropertyData(const QDeclarativePropertyRawData &);
-
- inline bool operator==(const QDeclarativePropertyRawData &);
-
- static Flags flagsForProperty(const QMetaProperty &, QDeclarativeEngine *engine = 0);
- void load(const QMetaProperty &, QDeclarativeEngine *engine = 0);
- void load(const QMetaMethod &);
- QString name(QObject *);
- QString name(const QMetaObject *);
-
-private:
- friend class QDeclarativePropertyCache;
- void lazyLoad(const QMetaProperty &, QDeclarativeEngine *engine = 0);
- void lazyLoad(const QMetaMethod &);
- bool notFullyResolved() const { return flags & NotFullyResolved; }
-};
-
-class Q_DECLARATIVE_EXPORT QDeclarativePropertyCache : public QDeclarativeRefCount, public QDeclarativeCleanup
-{
-public:
- QDeclarativePropertyCache(QDeclarativeEngine *);
- QDeclarativePropertyCache(QDeclarativeEngine *, const QMetaObject *);
- virtual ~QDeclarativePropertyCache();
-
- void update(QDeclarativeEngine *, const QMetaObject *);
-
- QDeclarativePropertyCache *copy();
-
- QDeclarativePropertyCache *copyAndAppend(QDeclarativeEngine *, const QMetaObject *,
- QDeclarativePropertyData::Flag propertyFlags = QDeclarativePropertyData::NoFlags,
- QDeclarativePropertyData::Flag methodFlags = QDeclarativePropertyData::NoFlags,
- QDeclarativePropertyData::Flag signalFlags = QDeclarativePropertyData::NoFlags);
- QDeclarativePropertyCache *copyAndAppend(QDeclarativeEngine *, const QMetaObject *, int revision,
- QDeclarativePropertyData::Flag propertyFlags = QDeclarativePropertyData::NoFlags,
- QDeclarativePropertyData::Flag methodFlags = QDeclarativePropertyData::NoFlags,
- QDeclarativePropertyData::Flag signalFlags = QDeclarativePropertyData::NoFlags);
-
- void append(QDeclarativeEngine *, const QMetaObject *,
- QDeclarativePropertyData::Flag propertyFlags = QDeclarativePropertyData::NoFlags,
- QDeclarativePropertyData::Flag methodFlags = QDeclarativePropertyData::NoFlags,
- QDeclarativePropertyData::Flag signalFlags = QDeclarativePropertyData::NoFlags);
- void append(QDeclarativeEngine *, const QMetaObject *, int revision,
- QDeclarativePropertyData::Flag propertyFlags = QDeclarativePropertyData::NoFlags,
- QDeclarativePropertyData::Flag methodFlags = QDeclarativePropertyData::NoFlags,
- QDeclarativePropertyData::Flag signalFlags = QDeclarativePropertyData::NoFlags);
-
- inline QDeclarativePropertyData *property(const QHashedV8String &) const;
- QDeclarativePropertyData *property(const QHashedStringRef &) const;
- QDeclarativePropertyData *property(const QHashedCStringRef &) const;
- QDeclarativePropertyData *property(const QString &) const;
- QDeclarativePropertyData *property(int) const;
- QDeclarativePropertyData *method(int) const;
- QStringList propertyNames() const;
-
- inline QDeclarativePropertyData *overrideData(QDeclarativePropertyData *) const;
- inline bool isAllowedInRevision(QDeclarativePropertyData *) const;
-
- inline QDeclarativeEngine *qmlEngine() const;
- static QDeclarativePropertyData *property(QDeclarativeEngine *, QObject *, const QString &,
- QDeclarativePropertyData &);
- static QDeclarativePropertyData *property(QDeclarativeEngine *, QObject *, const QHashedV8String &,
- QDeclarativePropertyData &);
- static int *methodParameterTypes(QObject *, int index, QVarLengthArray<int, 9> &dummy,
- QByteArray *unknownTypeError);
-
- static bool isDynamicMetaObject(const QMetaObject *);
-protected:
- virtual void destroy();
- virtual void clear();
-
-private:
- friend class QDeclarativeEnginePrivate;
- friend class QV8QObjectWrapper;
-
- inline QDeclarativePropertyCache *copy(int reserve);
-
- // Implemented in v8/qv8qobjectwrapper.cpp
- v8::Local<v8::Object> newQObject(QObject *, QV8Engine *);
-
- typedef QVector<QDeclarativePropertyData> IndexCache;
- typedef QStringHash<QDeclarativePropertyData *> StringCache;
- typedef QVector<int> AllowedRevisionCache;
-
- void resolve(QDeclarativePropertyData *) const;
- void updateRecur(QDeclarativeEngine *, const QMetaObject *);
-
- QDeclarativeEngine *engine;
-
- QDeclarativePropertyCache *parent;
- int propertyIndexCacheStart;
- int methodIndexCacheStart;
- int signalHanderIndexCacheStart;
-
- IndexCache propertyIndexCache;
- IndexCache methodIndexCache;
- IndexCache signalHandlerIndexCache;
- StringCache stringCache;
- AllowedRevisionCache allowedRevisionCache;
- v8::Persistent<v8::Function> constructor;
-
- const QMetaObject *metaObject;
- QDeclarativePropertyCacheMethodArguments *argumentsCache;
-};
-
-QDeclarativePropertyData::QDeclarativePropertyData()
-{
- propType = 0;
- coreIndex = -1;
- notifyIndex = -1;
- overrideIndexIsProperty = false;
- overrideIndex = -1;
- revision = 0;
- metaObjectOffset = -1;
- flags = 0;
-}
-
-QDeclarativePropertyData::QDeclarativePropertyData(const QDeclarativePropertyRawData &d)
-{
- *(static_cast<QDeclarativePropertyRawData *>(this)) = d;
-}
-
-bool QDeclarativePropertyData::operator==(const QDeclarativePropertyRawData &other)
-{
- return flags == other.flags &&
- propType == other.propType &&
- coreIndex == other.coreIndex &&
- notifyIndex == other.notifyIndex &&
- revision == other.revision &&
- (!isValueTypeVirtual() ||
- (valueTypeCoreIndex == other.valueTypeCoreIndex &&
- valueTypePropType == other.valueTypePropType));
-}
-
-int QDeclarativePropertyRawData::getValueTypeCoreIndex() const
-{
- return isValueTypeVirtual()?valueTypeCoreIndex:-1;
-}
-
-int QDeclarativePropertyRawData::encodedIndex() const
-{
- return isValueTypeVirtual()?(coreIndex | (valueTypeCoreIndex << 24)):coreIndex;
-}
-
-QDeclarativePropertyData *
-QDeclarativePropertyCache::overrideData(QDeclarativePropertyData *data) const
-{
- if (!data->hasOverride())
- return 0;
-
- if (data->overrideIndexIsProperty)
- return property(data->overrideIndex);
- else
- return method(data->overrideIndex);
-}
-
-bool QDeclarativePropertyCache::isAllowedInRevision(QDeclarativePropertyData *data) const
-{
- return (data->hasAccessors() || (data->metaObjectOffset == -1 && data->revision == 0)) ||
- (allowedRevisionCache[data->metaObjectOffset] >= data->revision);
-}
-
-QDeclarativeEngine *QDeclarativePropertyCache::qmlEngine() const
-{
- return engine;
-}
-
-QDeclarativePropertyData *QDeclarativePropertyCache::property(const QHashedV8String &str) const
-{
- QDeclarativePropertyData **rv = stringCache.value(str);
- if (rv && (*rv)->notFullyResolved()) resolve(*rv);
- return rv?*rv:0;
-}
-
-QT_END_NAMESPACE
-
-#endif // QDECLARATIVEPROPERTYCACHE_P_H