annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
e78566595089 initial import
mandel
parents:
diff changeset
1 /**
e78566595089 initial import
mandel
parents:
diff changeset
2 *
e78566595089 initial import
mandel
parents:
diff changeset
3 * Copyright: Copyright QtD Team, 2008-2009
e78566595089 initial import
mandel
parents:
diff changeset
4 * License: <a href="http://www.boost.org/LICENSE_1_0.txt>Boost License 1.0</a>
e78566595089 initial import
mandel
parents:
diff changeset
5 *
e78566595089 initial import
mandel
parents:
diff changeset
6 * Copyright QtD Team, 2008-2009
e78566595089 initial import
mandel
parents:
diff changeset
7 * Distributed under the Boost Software License, Version 1.0.
e78566595089 initial import
mandel
parents:
diff changeset
8 * (See accompanying file boost-license-1.0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
e78566595089 initial import
mandel
parents:
diff changeset
9 *
e78566595089 initial import
mandel
parents:
diff changeset
10 */
e78566595089 initial import
mandel
parents:
diff changeset
11
e78566595089 initial import
mandel
parents:
diff changeset
12 #include "qtd_core.h"
e78566595089 initial import
mandel
parents:
diff changeset
13 #include <iostream>
e78566595089 initial import
mandel
parents:
diff changeset
14
355
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
15 uint userDataId;
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
16
1
e78566595089 initial import
mandel
parents:
diff changeset
17 extern "C" DLL_PUBLIC QModelIndex qtd_to_QModelIndex(QModelIndexAccessor mia)
e78566595089 initial import
mandel
parents:
diff changeset
18 {
e78566595089 initial import
mandel
parents:
diff changeset
19 return * (QModelIndex *) (&mia) ;
e78566595089 initial import
mandel
parents:
diff changeset
20 }
e78566595089 initial import
mandel
parents:
diff changeset
21
e78566595089 initial import
mandel
parents:
diff changeset
22 extern "C" DLL_PUBLIC QModelIndexAccessor qtd_from_QModelIndex(const QModelIndex &index)
e78566595089 initial import
mandel
parents:
diff changeset
23 {
e78566595089 initial import
mandel
parents:
diff changeset
24 QModelIndexAccessor mia = {
e78566595089 initial import
mandel
parents:
diff changeset
25 index.row(),
e78566595089 initial import
mandel
parents:
diff changeset
26 index.column(),
e78566595089 initial import
mandel
parents:
diff changeset
27 index.internalPointer(),
e78566595089 initial import
mandel
parents:
diff changeset
28 (QAbstractItemModel *) index.model()
e78566595089 initial import
mandel
parents:
diff changeset
29 };
e78566595089 initial import
mandel
parents:
diff changeset
30
e78566595089 initial import
mandel
parents:
diff changeset
31 return mia;
e78566595089 initial import
mandel
parents:
diff changeset
32 }
e78566595089 initial import
mandel
parents:
diff changeset
33
247
27497bbe62a1 Implemented qVersion, qSharedBuild. Fixes #31
maxter
parents: 57
diff changeset
34 extern "C" DLL_PUBLIC const char* qtd_qVersion()
27497bbe62a1 Implemented qVersion, qSharedBuild. Fixes #31
maxter
parents: 57
diff changeset
35 {
27497bbe62a1 Implemented qVersion, qSharedBuild. Fixes #31
maxter
parents: 57
diff changeset
36 return qVersion();
27497bbe62a1 Implemented qVersion, qSharedBuild. Fixes #31
maxter
parents: 57
diff changeset
37 }
27497bbe62a1 Implemented qVersion, qSharedBuild. Fixes #31
maxter
parents: 57
diff changeset
38
27497bbe62a1 Implemented qVersion, qSharedBuild. Fixes #31
maxter
parents: 57
diff changeset
39 extern "C" DLL_PUBLIC bool qtd_qSharedBuild()
27497bbe62a1 Implemented qVersion, qSharedBuild. Fixes #31
maxter
parents: 57
diff changeset
40 {
27497bbe62a1 Implemented qVersion, qSharedBuild. Fixes #31
maxter
parents: 57
diff changeset
41 return qSharedBuild();
27497bbe62a1 Implemented qVersion, qSharedBuild. Fixes #31
maxter
parents: 57
diff changeset
42 }
27497bbe62a1 Implemented qVersion, qSharedBuild. Fixes #31
maxter
parents: 57
diff changeset
43
354
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 253
diff changeset
44 //TODO: this has to be replaced with something that makes some sense
1
e78566595089 initial import
mandel
parents:
diff changeset
45 #ifdef CPP_SHARED
253
073b9153ed8a Rev. 264 done right.
maxter
parents: 252
diff changeset
46 QTD_EXPORT_VAR(qtd_toUtf8);
354
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 253
diff changeset
47 QTD_EXPORT_VAR(qtd_QtdObject_delete);
1
e78566595089 initial import
mandel
parents:
diff changeset
48
354
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 253
diff changeset
49 extern "C" DLL_PUBLIC void qtd_core_initCallBacks(pfunc_abstr d_func, pfunc_abstr del_d_qobj) {
253
073b9153ed8a Rev. 264 done right.
maxter
parents: 252
diff changeset
50 QTD_EXPORT_VAR_SET(qtd_toUtf8, d_func);
354
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 253
diff changeset
51 QTD_EXPORT_VAR_SET(qtd_QtdObject_delete, del_d_qobj);
355
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
52
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
53 userDataId = QObject::registerUserData();
1
e78566595089 initial import
mandel
parents:
diff changeset
54 }
e78566595089 initial import
mandel
parents:
diff changeset
55 #endif
57
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents: 1
diff changeset
56
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents: 1
diff changeset
57 extern bool qRegisterResourceData
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents: 1
diff changeset
58 (int, const unsigned char *, const unsigned char *, const unsigned char *);
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents: 1
diff changeset
59
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents: 1
diff changeset
60 extern bool qUnregisterResourceData
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents: 1
diff changeset
61 (int, const unsigned char *, const unsigned char *, const unsigned char *);
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents: 1
diff changeset
62
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents: 1
diff changeset
63 extern "C" DLL_PUBLIC bool qtd_register_resource_data(int version, const unsigned char *tree,
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents: 1
diff changeset
64 const unsigned char *name, const unsigned char *data)
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents: 1
diff changeset
65 {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents: 1
diff changeset
66 return qRegisterResourceData(version, tree, name, data);
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents: 1
diff changeset
67 }
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents: 1
diff changeset
68
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents: 1
diff changeset
69 extern "C" DLL_PUBLIC bool qtd_unregister_resource_data(int version, const unsigned char *tree,
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents: 1
diff changeset
70 const unsigned char *name, const unsigned char *data)
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents: 1
diff changeset
71 {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents: 1
diff changeset
72 return qUnregisterResourceData(version, tree, name, data);
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents: 1
diff changeset
73 }
355
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
74
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
75 //
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
76 // QObjectLink implementation
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
77 //
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
78
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
79 QObjectLink::QObjectLink(QObject *qObject, void* dId) :
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
80 QtdObjectLink(dId),
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
81 flags(None)
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
82 {
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
83 qObject->setUserData(userDataId, this);
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
84 }
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
85
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
86 QObjectLink* QObjectLink::getLink(const QObject *qObject)
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
87 {
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
88 return static_cast<QObjectLink*>(qObject->userData(userDataId));
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
89 }
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
90
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
91 void* QObjectLink::getDId(const QObject* qObject)
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
92 {
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
93 QObjectLink* link = getLink(qObject);
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
94 return link ? link->dId : NULL;
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
95 }
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
96
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
97 void QObjectLink::destroyLink(QObject* qObject)
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
98 {
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
99 Q_ASSERT(dId);
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
100 qtd_QtdObject_delete(dId);
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
101 if (qObject)
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
102 {
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
103 qObject->setUserData(userDataId, NULL);
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
104 dId = NULL;
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
105 }
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
106 }
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
107
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
108 bool QObjectLink::createdByD()
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
109 {
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
110 return CreatedByD & flags;
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
111 }
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
112
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
113 QObjectLink::~QObjectLink()
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
114 {
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
115 if (dId)
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
116 destroyLink();
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
117 }
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
118