Mercurial > projects > qtd
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 |
rev | line source |
---|---|
1 | 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 | 5 |
6 #ifndef QTD_CORE_H | |
7 #define QTD_CORE_H | |
8 | |
9 #include <QAbstractItemModel> | |
10 | |
11 #if defined WIN32 | |
12 #define DLL_PUBLIC __declspec(dllexport) | |
13 #else | |
14 #define DLL_PUBLIC | |
15 #endif | |
16 | |
17 #ifdef CPP_SHARED | |
254 | 18 #define QTD_EXPORT(TYPE, NAME, ARGS) \ |
1 | 19 extern "C" typedef TYPE (*pf_##NAME)ARGS; \ |
20 extern "C" pf_##NAME qtd_get_##NAME(); | |
21 #define QTD_EXPORT_VAR(NAME) \ | |
22 pf_##NAME m_##NAME; \ | |
23 extern "C" DLL_PUBLIC pf_##NAME qtd_get_##NAME() { return m_##NAME; } | |
254 | 24 #define QTD_EXPORT_VAR_SET(NAME, VALUE) \ |
1 | 25 m_##NAME = (pf_##NAME) VALUE |
26 #else | |
254 | 27 #define QTD_EXPORT(TYPE, NAME, ARGS) \ |
1 | 28 extern "C" TYPE NAME ARGS; |
29 #endif | |
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 | 33 struct QModelIndexAccessor { |
34 int row; | |
35 int col; | |
36 void *ptr; | |
37 QAbstractItemModel *model; | |
38 }; | |
39 | |
40 struct DArray { | |
41 size_t length; | |
42 void* ptr; | |
43 }; | |
44 | |
254 | 45 enum QtdObjectFlags |
46 { | |
47 qNone, | |
48 qNativeOwnership = 0x01, | |
49 qDOwnership = 0x02 | |
50 //gcManaged = 0x04 | |
51 }; | |
52 | |
355
08c1ca7975ab
obviated redundant virtual dispatch callbacks
Max Samukha <maxter@spambox.com>
parents:
354
diff
changeset
|
53 class DLL_PUBLIC QtdObjectLink |
254 | 54 { |
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 | 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 | 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 | 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 | 95 #ifdef CPP_SHARED |
96 typedef void (*pfunc_abstr)(); | |
97 #endif | |
98 | |
254 | 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 | 101 |
102 #ifdef CPP_SHARED | |
254 | 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 | 105 #endif |
106 | |
107 extern "C" QModelIndex qtd_to_QModelIndex(QModelIndexAccessor mia); | |
108 extern "C" QModelIndexAccessor qtd_from_QModelIndex(const QModelIndex &index); | |
109 | |
301 | 110 extern "C" typedef void (*EmitCallback)(void*, void**); |
111 extern "C" typedef int (*QtMetacallCallback)(void *d_entity, QMetaObject::Call _c, int _id, void **_a); | |
303 | 112 extern "C" typedef const QMetaObject* (*MetaObjectCallback)(void *d_entity); |
301 | 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 | 120 #endif // QTD_CORE_H |