Mercurial > projects > qtd
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 |