comparison cpp/qt_qtd/qtd_core.cpp @ 355:08c1ca7975ab

obviated redundant virtual dispatch callbacks
author Max Samukha <maxter@spambox.com>
date Tue, 25 May 2010 17:23:11 +0300
parents 18bd68f586c6
children 9784459f0750
comparison
equal deleted inserted replaced
354:18bd68f586c6 355:08c1ca7975ab
9 * 9 *
10 */ 10 */
11 11
12 #include "qtd_core.h" 12 #include "qtd_core.h"
13 #include <iostream> 13 #include <iostream>
14
15 uint userDataId;
14 16
15 extern "C" DLL_PUBLIC QModelIndex qtd_to_QModelIndex(QModelIndexAccessor mia) 17 extern "C" DLL_PUBLIC QModelIndex qtd_to_QModelIndex(QModelIndexAccessor mia)
16 { 18 {
17 return * (QModelIndex *) (&mia) ; 19 return * (QModelIndex *) (&mia) ;
18 } 20 }
45 QTD_EXPORT_VAR(qtd_QtdObject_delete); 47 QTD_EXPORT_VAR(qtd_QtdObject_delete);
46 48
47 extern "C" DLL_PUBLIC void qtd_core_initCallBacks(pfunc_abstr d_func, pfunc_abstr del_d_qobj) { 49 extern "C" DLL_PUBLIC void qtd_core_initCallBacks(pfunc_abstr d_func, pfunc_abstr del_d_qobj) {
48 QTD_EXPORT_VAR_SET(qtd_toUtf8, d_func); 50 QTD_EXPORT_VAR_SET(qtd_toUtf8, d_func);
49 QTD_EXPORT_VAR_SET(qtd_QtdObject_delete, del_d_qobj); 51 QTD_EXPORT_VAR_SET(qtd_QtdObject_delete, del_d_qobj);
52
53 userDataId = QObject::registerUserData();
50 } 54 }
51 #endif 55 #endif
52 56
53 extern bool qRegisterResourceData 57 extern bool qRegisterResourceData
54 (int, const unsigned char *, const unsigned char *, const unsigned char *); 58 (int, const unsigned char *, const unsigned char *, const unsigned char *);
65 extern "C" DLL_PUBLIC bool qtd_unregister_resource_data(int version, const unsigned char *tree, 69 extern "C" DLL_PUBLIC bool qtd_unregister_resource_data(int version, const unsigned char *tree,
66 const unsigned char *name, const unsigned char *data) 70 const unsigned char *name, const unsigned char *data)
67 { 71 {
68 return qUnregisterResourceData(version, tree, name, data); 72 return qUnregisterResourceData(version, tree, name, data);
69 } 73 }
74
75 //
76 // QObjectLink implementation
77 //
78
79 QObjectLink::QObjectLink(QObject *qObject, void* dId) :
80 QtdObjectLink(dId),
81 flags(None)
82 {
83 qObject->setUserData(userDataId, this);
84 }
85
86 QObjectLink* QObjectLink::getLink(const QObject *qObject)
87 {
88 return static_cast<QObjectLink*>(qObject->userData(userDataId));
89 }
90
91 void* QObjectLink::getDId(const QObject* qObject)
92 {
93 QObjectLink* link = getLink(qObject);
94 return link ? link->dId : NULL;
95 }
96
97 void QObjectLink::destroyLink(QObject* qObject)
98 {
99 Q_ASSERT(dId);
100 qtd_QtdObject_delete(dId);
101 if (qObject)
102 {
103 qObject->setUserData(userDataId, NULL);
104 dId = NULL;
105 }
106 }
107
108 bool QObjectLink::createdByD()
109 {
110 return CreatedByD & flags;
111 }
112
113 QObjectLink::~QObjectLink()
114 {
115 if (dId)
116 destroyLink();
117 }
118