diff options
author | Aaron Kennedy <aaron.kennedy@nokia.com> | 2009-12-23 04:17:55 (GMT) |
---|---|---|
committer | Aaron Kennedy <aaron.kennedy@nokia.com> | 2009-12-23 04:17:55 (GMT) |
commit | 4fe8f2ab89ace6e617a81c5e8568c3830135da20 (patch) | |
tree | 900e99845dee1d8717d2a816133971ed3c5653c8 /src/declarative | |
parent | b95cf9eccc4a84036c7b5d1443e598d3db2f2d70 (diff) | |
download | Qt-4fe8f2ab89ace6e617a81c5e8568c3830135da20.zip Qt-4fe8f2ab89ace6e617a81c5e8568c3830135da20.tar.gz Qt-4fe8f2ab89ace6e617a81c5e8568c3830135da20.tar.bz2 |
Stop using QGuard
This should allow QGuard to be removed from Qt and QObjectPrivate::ExtraData.
Having QmlGuard inside QmlDeclarativeData reduces the number of new's, and
creating QmlDeclarativeData is faster than QObjectPrivate::ExtraData anyway.
Diffstat (limited to 'src/declarative')
-rw-r--r-- | src/declarative/graphicsitems/qmlgraphicsvisualitemmodel.cpp | 10 | ||||
-rw-r--r-- | src/declarative/qml/qmlbindingvme_p.h | 3 | ||||
-rw-r--r-- | src/declarative/qml/qmlcontext_p.h | 6 | ||||
-rw-r--r-- | src/declarative/qml/qmlcontextscriptclass.cpp | 5 | ||||
-rw-r--r-- | src/declarative/qml/qmldeclarativedata_p.h | 36 | ||||
-rw-r--r-- | src/declarative/qml/qmlengine.cpp | 20 | ||||
-rw-r--r-- | src/declarative/qml/qmlexpression_p.h | 9 | ||||
-rw-r--r-- | src/declarative/qml/qmllistscriptclass.cpp | 3 | ||||
-rw-r--r-- | src/declarative/qml/qmlmetaproperty_p.h | 3 | ||||
-rw-r--r-- | src/declarative/qml/qmlobjectscriptclass.cpp | 5 | ||||
-rw-r--r-- | src/declarative/qml/qmlvaluetypescriptclass.cpp | 3 | ||||
-rw-r--r-- | src/declarative/qml/qmlvmemetaobject_p.h | 4 | ||||
-rw-r--r-- | src/declarative/util/qmlpropertychanges.cpp | 3 | ||||
-rw-r--r-- | src/declarative/util/qmlstate_p_p.h | 6 | ||||
-rw-r--r-- | src/declarative/util/qmlstateoperations.cpp | 5 |
15 files changed, 78 insertions, 43 deletions
diff --git a/src/declarative/graphicsitems/qmlgraphicsvisualitemmodel.cpp b/src/declarative/graphicsitems/qmlgraphicsvisualitemmodel.cpp index 017a60c..b482db7 100644 --- a/src/declarative/graphicsitems/qmlgraphicsvisualitemmodel.cpp +++ b/src/declarative/graphicsitems/qmlgraphicsvisualitemmodel.cpp @@ -52,6 +52,7 @@ #include <qmlinfo.h> #include <qmldeclarativedata_p.h> #include <qmlpropertycache_p.h> +#include <qmlguard_p.h> #include <qlistmodelinterface_p.h> #include <qhash.h> @@ -60,7 +61,6 @@ #include <QtCore/qdebug.h> #include <private/qobject_p.h> -#include <private/qguard_p.h> QML_DECLARE_TYPE(QListModelInterface) @@ -277,9 +277,9 @@ public: return static_cast<QmlGraphicsVisualDataModelPrivate *>(QObjectPrivate::get(m)); } - QGuard<QListModelInterface> m_listModelInterface; - QGuard<QAbstractItemModel> m_abstractItemModel; - QGuard<QmlGraphicsVisualDataModel> m_visualItemModel; + QmlGuard<QListModelInterface> m_listModelInterface; + QmlGuard<QAbstractItemModel> m_abstractItemModel; + QmlGuard<QmlGraphicsVisualDataModel> m_visualItemModel; QString m_part; QmlComponent *m_delegate; @@ -434,7 +434,7 @@ Q_SIGNALS: private: friend class QmlGraphicsVisualDataModelDataMetaObject; int m_index; - QGuard<QmlGraphicsVisualDataModel> m_model; + QmlGuard<QmlGraphicsVisualDataModel> m_model; QmlGraphicsVisualDataModelDataMetaObject *m_meta; }; diff --git a/src/declarative/qml/qmlbindingvme_p.h b/src/declarative/qml/qmlbindingvme_p.h index ceaf2b3..4ef7d04 100644 --- a/src/declarative/qml/qmlbindingvme_p.h +++ b/src/declarative/qml/qmlbindingvme_p.h @@ -56,6 +56,7 @@ #include <QtCore/qglobal.h> #include <private/qmlbasicscript_p.h> #include <private/qscriptdeclarativeclass_p.h> +#include "qmlguard_p.h" QT_BEGIN_HEADER @@ -73,7 +74,7 @@ public: int targetSlot; struct Subscription { - QGuard<QObject> source; + QmlGuard<QObject> source; int notifyIndex; }; Subscription *subscriptions; diff --git a/src/declarative/qml/qmlcontext_p.h b/src/declarative/qml/qmlcontext_p.h index 25f5600..bc8c357 100644 --- a/src/declarative/qml/qmlcontext_p.h +++ b/src/declarative/qml/qmlcontext_p.h @@ -65,7 +65,7 @@ #include <QtCore/qset.h> #include <private/qobject_p.h> -#include <private/qguard_p.h> +#include "qmlguard_p.h" QT_BEGIN_NAMESPACE @@ -112,13 +112,13 @@ public: QmlDeclarativeData *contextObjects; - struct ContextGuard : public QGuard<QObject> + struct ContextGuard : public QmlGuard<QObject> { ContextGuard() : priv(0), bindings(0) {} QmlContextPrivate *priv; QmlBinding_Id *bindings; ContextGuard &operator=(QObject *obj) { - (QGuard<QObject>&)*this = obj; return *this; + (QmlGuard<QObject>&)*this = obj; return *this; } void objectDestroyed(QObject *) { priv->destroyed(this); } }; diff --git a/src/declarative/qml/qmlcontextscriptclass.cpp b/src/declarative/qml/qmlcontextscriptclass.cpp index 54a5ca3..588a397 100644 --- a/src/declarative/qml/qmlcontextscriptclass.cpp +++ b/src/declarative/qml/qmlcontextscriptclass.cpp @@ -44,14 +44,15 @@ #include "qmlengine_p.h" #include "qmlcontext_p.h" #include "qmltypenamescriptclass_p.h" +#include "qmlguard_p.h" QT_BEGIN_NAMESPACE struct ContextData : public QScriptDeclarativeClass::Object { ContextData() : isSharedContext(true) {} ContextData(QmlContext *c, QObject *o) : context(c), scopeObject(o), isSharedContext(false) {} - QGuard<QmlContext> context; - QGuard<QObject> scopeObject; + QmlGuard<QmlContext> context; + QmlGuard<QObject> scopeObject; bool isSharedContext; QmlContext *getContext(QmlEngine *engine) { diff --git a/src/declarative/qml/qmldeclarativedata_p.h b/src/declarative/qml/qmldeclarativedata_p.h index bdbb5c8..21111dd 100644 --- a/src/declarative/qml/qmldeclarativedata_p.h +++ b/src/declarative/qml/qmldeclarativedata_p.h @@ -54,8 +54,8 @@ // #include <QtScript/qscriptvalue.h> - #include <private/qobject_p.h> +#include "qmlguard_p.h" QT_BEGIN_NAMESPACE @@ -66,7 +66,11 @@ class QmlPropertyCache; class QmlDeclarativeData : public QDeclarativeData { public: - QmlDeclarativeData(QmlContext *context = 0); + QmlDeclarativeData(QmlContext *ctxt = 0) + : context(ctxt), bindings(0), nextContextObject(0), prevContextObject(0), + bindingBitsSize(0), bindingBits(0), outerContext(0), lineNumber(0), + columnNumber(0), deferredComponent(0), deferredIdx(0), attachedProperties(0), + propertyCache(0), guards(0) {} virtual void destroyed(QObject *); @@ -95,12 +99,13 @@ public: QScriptValue scriptValue; QmlPropertyCache *propertyCache; + QmlGuard<QObject> *guards; + static QmlDeclarativeData *get(const QObject *object, bool create = false) { - QObjectPrivate *priv = - QObjectPrivate::get(const_cast<QObject *>(object)); - if (priv && priv->declarativeData) { + QObjectPrivate *priv = QObjectPrivate::get(const_cast<QObject *>(object)); + if (priv->declarativeData) { return static_cast<QmlDeclarativeData *>(priv->declarativeData); - } else if (create && priv) { + } else if (create) { priv->declarativeData = new QmlDeclarativeData; return static_cast<QmlDeclarativeData *>(priv->declarativeData); } else { @@ -109,6 +114,25 @@ public: } }; +template<class T> +void QmlGuard<T>::addGuard() +{ + QmlDeclarativeData *data = QmlDeclarativeData::get(o, true); + next = data->guards; + if (next) reinterpret_cast<QmlGuard<T> *>(next)->prev = &next; + data->guards = reinterpret_cast<QmlGuard<QObject> *>(this); + prev = &data->guards; +} + +template<class T> +void QmlGuard<T>::remGuard() +{ + if (next) reinterpret_cast<QmlGuard<T> *>(next)->prev = prev; + *prev = next; + next = 0; + prev = 0; +} + QT_END_NAMESPACE #endif // QMLDECLARATIVEDATA_P_H diff --git a/src/declarative/qml/qmlengine.cpp b/src/declarative/qml/qmlengine.cpp index 988962b..0e9b7c4 100644 --- a/src/declarative/qml/qmlengine.cpp +++ b/src/declarative/qml/qmlengine.cpp @@ -549,15 +549,7 @@ QObject *qmlAttachedPropertiesObjectById(int id, const QObject *object, bool cre return rv; } -QmlDeclarativeData::QmlDeclarativeData(QmlContext *ctxt) -: context(ctxt), bindings(0), nextContextObject(0), prevContextObject(0), - bindingBitsSize(0), bindingBits(0), outerContext(0), lineNumber(0), - columnNumber(0), deferredComponent(0), deferredIdx(0), attachedProperties(0), - propertyCache(0) -{ -} - -void QmlDeclarativeData::destroyed(QObject * /*object*/) +void QmlDeclarativeData::destroyed(QObject *object) { if (deferredComponent) deferredComponent->release(); @@ -584,6 +576,16 @@ void QmlDeclarativeData::destroyed(QObject * /*object*/) if (propertyCache) propertyCache->release(); + QmlGuard<QObject> *guard = guards; + while (guard) { + QmlGuard<QObject> *g = guard; + guard = guard->next; + g->o = 0; + g->prev = 0; + g->next = 0; + g->objectDestroyed(object); + } + delete this; } diff --git a/src/declarative/qml/qmlexpression_p.h b/src/declarative/qml/qmlexpression_p.h index 57a3ce2..3f87b2f 100644 --- a/src/declarative/qml/qmlexpression_p.h +++ b/src/declarative/qml/qmlexpression_p.h @@ -57,11 +57,10 @@ #include "qmlbasicscript_p.h" #include "qmlengine_p.h" +#include "qmlguard_p.h" #include <QtScript/qscriptvalue.h> -#include <private/qguard_p.h> - QT_BEGIN_NAMESPACE class QmlAbstractExpression @@ -109,15 +108,15 @@ public: QString url; // This is a QString for a reason. QUrls are slooooooow... int line; - struct SignalGuard : public QGuard<QObject> { + struct SignalGuard : public QmlGuard<QObject> { SignalGuard() : isDuplicate(false), notifyIndex(-1) {} SignalGuard &operator=(QObject *obj) { - QGuard<QObject>::operator=(obj); + QmlGuard<QObject>::operator=(obj); return *this; } SignalGuard &operator=(const SignalGuard &o) { - QGuard<QObject>::operator=(o); + QmlGuard<QObject>::operator=(o); isDuplicate = o.isDuplicate; notifyIndex = o.notifyIndex; return *this; diff --git a/src/declarative/qml/qmllistscriptclass.cpp b/src/declarative/qml/qmllistscriptclass.cpp index d93498d..f5ff2c0 100644 --- a/src/declarative/qml/qmllistscriptclass.cpp +++ b/src/declarative/qml/qmllistscriptclass.cpp @@ -42,11 +42,12 @@ #include "qmllistscriptclass_p.h" #include "qmlengine_p.h" +#include "qmlguard_p.h" QT_BEGIN_NAMESPACE struct ListData : public QScriptDeclarativeClass::Object { - QGuard<QObject> object; + QmlGuard<QObject> object; int propertyIdx; QmlListScriptClass::ListType type; }; diff --git a/src/declarative/qml/qmlmetaproperty_p.h b/src/declarative/qml/qmlmetaproperty_p.h index b4d72bb..97b5208 100644 --- a/src/declarative/qml/qmlmetaproperty_p.h +++ b/src/declarative/qml/qmlmetaproperty_p.h @@ -56,6 +56,7 @@ #include "qmlmetaproperty.h" #include "qmlpropertycache_p.h" +#include "qmlguard_p.h" #include <private/qobject_p.h> @@ -77,7 +78,7 @@ public: QmlMetaProperty *q; QmlContext *context; - QGuard<QObject> object; + QmlGuard<QObject> object; bool isDefaultProperty:1; bool isNameCached:1; diff --git a/src/declarative/qml/qmlobjectscriptclass.cpp b/src/declarative/qml/qmlobjectscriptclass.cpp index 4488ba1..7f95b8f 100644 --- a/src/declarative/qml/qmlobjectscriptclass.cpp +++ b/src/declarative/qml/qmlobjectscriptclass.cpp @@ -47,16 +47,15 @@ #include "qmltypenamescriptclass_p.h" #include "qmllistscriptclass_p.h" #include "qmlbinding.h" +#include "qmlguard_p.h" #include <QtCore/qtimer.h> -#include <private/qguard_p.h> - QT_BEGIN_NAMESPACE struct ObjectData : public QScriptDeclarativeClass::Object { ObjectData(QObject *o, int t) : object(o), type(t) {} - QGuard<QObject> object; + QmlGuard<QObject> object; int type; }; diff --git a/src/declarative/qml/qmlvaluetypescriptclass.cpp b/src/declarative/qml/qmlvaluetypescriptclass.cpp index 57f999f..78580e3 100644 --- a/src/declarative/qml/qmlvaluetypescriptclass.cpp +++ b/src/declarative/qml/qmlvaluetypescriptclass.cpp @@ -42,12 +42,13 @@ #include "qmlvaluetypescriptclass_p.h" #include "qmlengine_p.h" +#include "qmlguard_p.h" QT_BEGIN_NAMESPACE struct QmlValueTypeReference : public QScriptDeclarativeClass::Object { QmlValueType *type; - QGuard<QObject> object; + QmlGuard<QObject> object; int property; }; diff --git a/src/declarative/qml/qmlvmemetaobject_p.h b/src/declarative/qml/qmlvmemetaobject_p.h index e737721..462f652 100644 --- a/src/declarative/qml/qmlvmemetaobject_p.h +++ b/src/declarative/qml/qmlvmemetaobject_p.h @@ -61,6 +61,8 @@ #include <private/qobject_p.h> +#include "qmlguard_p.h" + QT_BEGIN_NAMESPACE #define QML_ALIAS_FLAG_PTR 0x00000001 @@ -118,7 +120,7 @@ protected: private: QObject *object; QmlRefCount *ref; - QGuard<QmlContext> ctxt; + QmlGuard<QmlContext> ctxt; const QmlVMEMetaData *metaData; int propOffset; diff --git a/src/declarative/util/qmlpropertychanges.cpp b/src/declarative/util/qmlpropertychanges.cpp index 48e026e..18f32ff 100644 --- a/src/declarative/util/qmlpropertychanges.cpp +++ b/src/declarative/util/qmlpropertychanges.cpp @@ -49,6 +49,7 @@ #include <qmlexpression.h> #include <qmlbinding.h> #include <qmlcontext.h> +#include <qmlguard_p.h> #include <QtCore/qdebug.h> @@ -127,7 +128,7 @@ public: QmlExpression *expression; QmlExpression *reverseExpression; QmlExpression *rewindExpression; - QGuard<QmlExpression> ownedExpression; + QmlGuard<QmlExpression> ownedExpression; virtual void execute() { ownedExpression = property.setSignalExpression(expression); diff --git a/src/declarative/util/qmlstate_p_p.h b/src/declarative/util/qmlstate_p_p.h index 04c5264..0ae72cd 100644 --- a/src/declarative/util/qmlstate_p_p.h +++ b/src/declarative/util/qmlstate_p_p.h @@ -58,6 +58,8 @@ #include "qmlanimation_p_p.h" #include "qmltransitionmanager_p_p.h" +#include <qmlguard_p.h> + #include <private/qobject_p.h> QT_BEGIN_NAMESPACE @@ -106,9 +108,9 @@ public: QmlBinding *when; class OperationList; - struct OperationGuard : public QGuard<QmlStateOperation> + struct OperationGuard : public QmlGuard<QmlStateOperation> { - OperationGuard(QObject *obj, OperationList *l) : list(l) { (QGuard<QObject>&)*this = obj; } + OperationGuard(QObject *obj, OperationList *l) : list(l) { (QmlGuard<QObject>&)*this = obj; } OperationList *list; void objectDestroyed(QmlStateOperation *) { // we assume priv will always be destroyed after objectDestroyed calls diff --git a/src/declarative/util/qmlstateoperations.cpp b/src/declarative/util/qmlstateoperations.cpp index ebbb5ee..df25e5b 100644 --- a/src/declarative/util/qmlstateoperations.cpp +++ b/src/declarative/util/qmlstateoperations.cpp @@ -47,6 +47,7 @@ #include <qmlinfo.h> #include <qmlgraphicsanchors_p_p.h> #include <qmlgraphicsitem_p.h> +#include <qmlguard_p.h> #include <QtCore/qdebug.h> #include <QtGui/qgraphicsitem.h> @@ -65,8 +66,8 @@ public: QmlGraphicsItem *target; QmlGraphicsItem *parent; - QGuard<QmlGraphicsItem> origParent; - QGuard<QmlGraphicsItem> origStackBefore; + QmlGuard<QmlGraphicsItem> origParent; + QmlGuard<QmlGraphicsItem> origStackBefore; QmlGraphicsItem *rewindParent; QmlGraphicsItem *rewindStackBefore; |