annotate include/qtd_core.h @ 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 /**
355
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
2 * Copyright: Copyright QtD Team, 2008-2010
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
3 * License: Boost Software License 1.0
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
4 */
1
e78566595089 initial import
mandel
parents:
diff changeset
5
e78566595089 initial import
mandel
parents:
diff changeset
6 #ifndef QTD_CORE_H
e78566595089 initial import
mandel
parents:
diff changeset
7 #define QTD_CORE_H
e78566595089 initial import
mandel
parents:
diff changeset
8
e78566595089 initial import
mandel
parents:
diff changeset
9 #include <QAbstractItemModel>
e78566595089 initial import
mandel
parents:
diff changeset
10
e78566595089 initial import
mandel
parents:
diff changeset
11 #if defined WIN32
e78566595089 initial import
mandel
parents:
diff changeset
12 #define DLL_PUBLIC __declspec(dllexport)
e78566595089 initial import
mandel
parents:
diff changeset
13 #else
e78566595089 initial import
mandel
parents:
diff changeset
14 #define DLL_PUBLIC
e78566595089 initial import
mandel
parents:
diff changeset
15 #endif
e78566595089 initial import
mandel
parents:
diff changeset
16
e78566595089 initial import
mandel
parents:
diff changeset
17 #ifdef CPP_SHARED
254
maxter
parents: 252
diff changeset
18 #define QTD_EXPORT(TYPE, NAME, ARGS) \
1
e78566595089 initial import
mandel
parents:
diff changeset
19 extern "C" typedef TYPE (*pf_##NAME)ARGS; \
e78566595089 initial import
mandel
parents:
diff changeset
20 extern "C" pf_##NAME qtd_get_##NAME();
e78566595089 initial import
mandel
parents:
diff changeset
21 #define QTD_EXPORT_VAR(NAME) \
e78566595089 initial import
mandel
parents:
diff changeset
22 pf_##NAME m_##NAME; \
e78566595089 initial import
mandel
parents:
diff changeset
23 extern "C" DLL_PUBLIC pf_##NAME qtd_get_##NAME() { return m_##NAME; }
254
maxter
parents: 252
diff changeset
24 #define QTD_EXPORT_VAR_SET(NAME, VALUE) \
1
e78566595089 initial import
mandel
parents:
diff changeset
25 m_##NAME = (pf_##NAME) VALUE
e78566595089 initial import
mandel
parents:
diff changeset
26 #else
254
maxter
parents: 252
diff changeset
27 #define QTD_EXPORT(TYPE, NAME, ARGS) \
1
e78566595089 initial import
mandel
parents:
diff changeset
28 extern "C" TYPE NAME ARGS;
e78566595089 initial import
mandel
parents:
diff changeset
29 #endif
e78566595089 initial import
mandel
parents:
diff changeset
30
355
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
31 extern uint userDataId;
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
32
1
e78566595089 initial import
mandel
parents:
diff changeset
33 struct QModelIndexAccessor {
e78566595089 initial import
mandel
parents:
diff changeset
34 int row;
e78566595089 initial import
mandel
parents:
diff changeset
35 int col;
e78566595089 initial import
mandel
parents:
diff changeset
36 void *ptr;
e78566595089 initial import
mandel
parents:
diff changeset
37 QAbstractItemModel *model;
e78566595089 initial import
mandel
parents:
diff changeset
38 };
e78566595089 initial import
mandel
parents:
diff changeset
39
e78566595089 initial import
mandel
parents:
diff changeset
40 struct DArray {
e78566595089 initial import
mandel
parents:
diff changeset
41 size_t length;
e78566595089 initial import
mandel
parents:
diff changeset
42 void* ptr;
e78566595089 initial import
mandel
parents:
diff changeset
43 };
e78566595089 initial import
mandel
parents:
diff changeset
44
254
maxter
parents: 252
diff changeset
45 enum QtdObjectFlags
maxter
parents: 252
diff changeset
46 {
maxter
parents: 252
diff changeset
47 qNone,
maxter
parents: 252
diff changeset
48 qNativeOwnership = 0x01,
maxter
parents: 252
diff changeset
49 qDOwnership = 0x02
maxter
parents: 252
diff changeset
50 //gcManaged = 0x04
maxter
parents: 252
diff changeset
51 };
maxter
parents: 252
diff changeset
52
355
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
53 class DLL_PUBLIC QtdObjectLink
254
maxter
parents: 252
diff changeset
54 {
maxter
parents: 252
diff changeset
55 public:
355
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
56 void* dId; // TODO: needs to be atomic
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
57
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
58 QtdObjectLink(void* id) : dId(id) {}
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
59
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
60 template<typename T>
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
61 static QtdObjectLink* getLink(const T* object)
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
62 {
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
63 return dynamic_cast<QtdObjectLink*>((T*)object);
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
64 }
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
65
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
66 template<typename T>
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
67 static void* getDId(const T* object)
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
68 {
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
69 QtdObjectLink *link = getLink((T*)object);
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
70 return link ? link->dId : NULL;
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
71 }
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
72 };
254
maxter
parents: 252
diff changeset
73
355
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
74 class DLL_PUBLIC QObjectLink : public QtdObjectLink, public QObjectUserData
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 public:
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
77 enum Flags
254
maxter
parents: 252
diff changeset
78 {
355
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
79 None,
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
80 CreatedByD = 0x1
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
81 };
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 Flags flags;
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 QObjectLink(QObject* qObject, void* dId);
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
86 bool createdByD();
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
87 virtual ~QObjectLink();
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
88 void destroyLink(QObject* qObject = NULL);
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
89 static QObjectLink* getLink(const QObject* qObject);
08c1ca7975ab obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
90 static void* getDId(const QObject* qObject);
254
maxter
parents: 252
diff changeset
91 };
105
3aa118a9ae71 each QObject now has associated child QObject for handling signals. fixes #15
eldar
parents: 35
diff changeset
92
33
cf8a415f3f32 gui package is fully wrapped now. lots of fixes in the generator
eldar
parents: 1
diff changeset
93 #define Array DArray
cf8a415f3f32 gui package is fully wrapped now. lots of fixes in the generator
eldar
parents: 1
diff changeset
94
1
e78566595089 initial import
mandel
parents:
diff changeset
95 #ifdef CPP_SHARED
e78566595089 initial import
mandel
parents:
diff changeset
96 typedef void (*pfunc_abstr)();
e78566595089 initial import
mandel
parents:
diff changeset
97 #endif
e78566595089 initial import
mandel
parents:
diff changeset
98
254
maxter
parents: 252
diff changeset
99 QTD_EXPORT(void, qtd_toUtf8, (const unsigned short* arr, uint size, void* str))
354
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 303
diff changeset
100 QTD_EXPORT(void, qtd_QtdObject_delete, (void* dId))
1
e78566595089 initial import
mandel
parents:
diff changeset
101
e78566595089 initial import
mandel
parents:
diff changeset
102 #ifdef CPP_SHARED
254
maxter
parents: 252
diff changeset
103 #define qtd_toUtf8 qtd_get_qtd_toUtf8()
354
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 303
diff changeset
104 #define qtd_QtdObject_delete qtd_get_qtd_QtdObject_delete()
1
e78566595089 initial import
mandel
parents:
diff changeset
105 #endif
e78566595089 initial import
mandel
parents:
diff changeset
106
e78566595089 initial import
mandel
parents:
diff changeset
107 extern "C" QModelIndex qtd_to_QModelIndex(QModelIndexAccessor mia);
e78566595089 initial import
mandel
parents:
diff changeset
108 extern "C" QModelIndexAccessor qtd_from_QModelIndex(const QModelIndex &index);
e78566595089 initial import
mandel
parents:
diff changeset
109
301
4d8481385c71 windows fix
eldar
parents: 298
diff changeset
110 extern "C" typedef void (*EmitCallback)(void*, void**);
4d8481385c71 windows fix
eldar
parents: 298
diff changeset
111 extern "C" typedef int (*QtMetacallCallback)(void *d_entity, QMetaObject::Call _c, int _id, void **_a);
303
98b211f3ee34 fix for #19
eldar_ins@eldar-laptop
parents: 301
diff changeset
112 extern "C" typedef const QMetaObject* (*MetaObjectCallback)(void *d_entity);
301
4d8481385c71 windows fix
eldar
parents: 298
diff changeset
113
298
adae77fdc1ea Native QList implementation is now used throughout QtD
eldar
parents: 254
diff changeset
114 template <class T>
adae77fdc1ea Native QList implementation is now used throughout QtD
eldar
parents: 254
diff changeset
115 void call_destructor(T *a)
adae77fdc1ea Native QList implementation is now used throughout QtD
eldar
parents: 254
diff changeset
116 {
adae77fdc1ea Native QList implementation is now used throughout QtD
eldar
parents: 254
diff changeset
117 a->~T();
adae77fdc1ea Native QList implementation is now used throughout QtD
eldar
parents: 254
diff changeset
118 }
354
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 303
diff changeset
119
1
e78566595089 initial import
mandel
parents:
diff changeset
120 #endif // QTD_CORE_H