Mercurial > projects > qtd
comparison include/qtd_core.h @ 357:9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Q_CLASSINFO implementation
Now Qtd can be built on Windows
author | Max Samukha <maxter@spambox.com> |
---|---|
date | Wed, 02 Jun 2010 19:38:05 +0300 |
parents | 08c1ca7975ab |
children | beaf4a2974d7 |
comparison
equal
deleted
inserted
replaced
356:12cec2d14e1c | 357:9784459f0750 |
---|---|
1 /** | 1 /** |
2 * Copyright: Copyright QtD Team, 2008-2010 | 2 Copyright: Copyright QtD Team, 2008-2010 |
3 * License: Boost Software License 1.0 | 3 License: Boost License 1.0 |
4 */ | 4 */ |
5 | 5 |
6 #ifndef QTD_CORE_H | 6 #ifndef QTD_CORE_H |
7 #define QTD_CORE_H | 7 #define QTD_CORE_H |
8 | 8 |
9 #include <QAbstractItemModel> | 9 #include <QAbstractItemModel> |
10 | 10 |
11 #if defined WIN32 | 11 #define QTD_EXTERN extern "C" |
12 #define DLL_PUBLIC __declspec(dllexport) | 12 |
13 #ifdef WIN32 | |
14 | |
15 #define QTD_DLL_EXPORT __declspec(dllexport) | |
16 #define QTD_DLL_IMPORT __declspec(dllimport) | |
17 | |
18 #ifdef CPP_SHARED | |
19 | |
20 QTD_EXTERN typedef void (*pfunc_abstr)(); | |
21 | |
22 #define QTD_EXPORT_DECL(MODULE, TYPE, NAME, ARGS) \ | |
23 QTD_EXTERN typedef TYPE (*qtd_##NAME##_t)ARGS; \ | |
24 QTD_EXTERN { extern QTD_##MODULE##_DLL_PUBLIC qtd_##NAME##_t qtd_##NAME; } | |
25 | |
26 #define QTD_EXPORT(MODULE, NAME) \ | |
27 QTD_EXTERN { QTD_##MODULE##_DLL_PUBLIC qtd_##NAME##_t qtd_##NAME; } \ | |
28 QTD_EXTERN QTD_DLL_EXPORT void qtd_set_##NAME(pfunc_abstr func) { qtd_##NAME = (qtd_##NAME##_t)func; } | |
29 | |
30 #endif | |
31 | |
13 #else | 32 #else |
14 #define DLL_PUBLIC | 33 |
34 #define QTD_DLL_EXPORT | |
35 #define QTD_DLL_IMPORT | |
36 | |
37 #define QTD_EXPORT_DECL(MODULE, TYPE, NAME, ARGS) \ | |
38 QTD_EXTERN TYPE qtd_##NAME ARGS; | |
39 | |
40 #define QTD_EXPORT(MODULE, NAME) | |
41 | |
15 #endif | 42 #endif |
16 | 43 |
17 #ifdef CPP_SHARED | 44 #define QTD_DLL_PUBLIC QTD_DLL_EXPORT |
18 #define QTD_EXPORT(TYPE, NAME, ARGS) \ | 45 |
19 extern "C" typedef TYPE (*pf_##NAME)ARGS; \ | 46 #ifdef QTD_CORE |
20 extern "C" pf_##NAME qtd_get_##NAME(); | 47 #define QTD_CORE_DLL_PUBLIC QTD_DLL_EXPORT |
21 #define QTD_EXPORT_VAR(NAME) \ | |
22 pf_##NAME m_##NAME; \ | |
23 extern "C" DLL_PUBLIC pf_##NAME qtd_get_##NAME() { return m_##NAME; } | |
24 #define QTD_EXPORT_VAR_SET(NAME, VALUE) \ | |
25 m_##NAME = (pf_##NAME) VALUE | |
26 #else | 48 #else |
27 #define QTD_EXPORT(TYPE, NAME, ARGS) \ | 49 #define QTD_CORE_DLL_PUBLIC QTD_DLL_IMPORT |
28 extern "C" TYPE NAME ARGS; | |
29 #endif | 50 #endif |
30 | 51 |
31 extern uint userDataId; | 52 #ifdef QTD_GUI |
53 #define QTD_GUI_DLL_PUBLIC QTD_DLL_EXPORT | |
54 #else | |
55 #define QTD_GUI_DLL_PUBLIC QTD_DLL_IMPORT | |
56 #endif | |
32 | 57 |
58 #ifdef QTD_OPENGL | |
59 #define QTD_OPENGL_DLL_PUBLIC QTD_DLL_EXPORT | |
60 #else | |
61 #define QTD_OPENGL_DLL_PUBLIC QTD_DLL_IMPORT | |
62 #endif | |
63 | |
64 #ifdef QTD_NETWORK | |
65 #define QTD_NETWORK_DLL_PUBLIC QTD_DLL_EXPORT | |
66 #else | |
67 #define QTD_NETWORK_DLL_PUBLIC QTD_DLL_IMPORT | |
68 #endif | |
69 | |
70 #ifdef QTD_SVG | |
71 #define QTD_SVG_DLL_PUBLIC QTD_DLL_EXPORT | |
72 #else | |
73 #define QTD_SVG_DLL_PUBLIC QTD_DLL_IMPORT | |
74 #endif | |
75 | |
76 #ifdef QTD_XML | |
77 #define QTD_XML_DLL_PUBLIC QTD_DLL_EXPORT | |
78 #else | |
79 #define QTD_XML_DLL_PUBLIC QTD_DLL_IMPORT | |
80 #endif | |
81 | |
82 #ifdef QTD_WEBKIT | |
83 #define QTD_WEBKIT_DLL_PUBLIC QTD_DLL_EXPORT | |
84 #else | |
85 #define QTD_WEBKIT_DLL_PUBLIC QTD_DLL_IMPORT | |
86 #endif | |
87 | |
88 //TODO: ditch | |
33 struct QModelIndexAccessor { | 89 struct QModelIndexAccessor { |
34 int row; | 90 int row; |
35 int col; | 91 int col; |
36 void *ptr; | 92 void *ptr; |
37 QAbstractItemModel *model; | 93 QAbstractItemModel *model; |
48 qNativeOwnership = 0x01, | 104 qNativeOwnership = 0x01, |
49 qDOwnership = 0x02 | 105 qDOwnership = 0x02 |
50 //gcManaged = 0x04 | 106 //gcManaged = 0x04 |
51 }; | 107 }; |
52 | 108 |
53 class DLL_PUBLIC QtdObjectLink | 109 class QTD_CORE_DLL_PUBLIC QtdObjectLink |
54 { | 110 { |
55 public: | 111 public: |
56 void* dId; // TODO: needs to be atomic | 112 void* dId; |
57 | 113 |
58 QtdObjectLink(void* id) : dId(id) {} | 114 QtdObjectLink(void* id) : dId(id) {} |
59 | 115 |
60 template<typename T> | 116 template<typename T> |
61 static QtdObjectLink* getLink(const T* object) | 117 static QtdObjectLink* getLink(const T* object) |
69 QtdObjectLink *link = getLink((T*)object); | 125 QtdObjectLink *link = getLink((T*)object); |
70 return link ? link->dId : NULL; | 126 return link ? link->dId : NULL; |
71 } | 127 } |
72 }; | 128 }; |
73 | 129 |
74 class DLL_PUBLIC QObjectLink : public QtdObjectLink, public QObjectUserData | 130 class QTD_CORE_DLL_PUBLIC QObjectLink : public QtdObjectLink, public QObjectUserData |
75 { | 131 { |
76 public: | 132 public: |
77 enum Flags | 133 enum Flags |
78 { | 134 { |
79 None, | 135 None, |
80 CreatedByD = 0x1 | 136 CreatedByD = 0x1 |
81 }; | 137 }; |
82 | 138 |
83 Flags flags; | 139 Flags flags; |
140 static uint userDataId; | |
84 | 141 |
85 QObjectLink(QObject* qObject, void* dId); | 142 QObjectLink(QObject* qObject, void* dId); |
86 bool createdByD(); | 143 bool createdByD(); |
87 virtual ~QObjectLink(); | 144 virtual ~QObjectLink(); |
88 void destroyLink(QObject* qObject = NULL); | 145 void destroyLink(QObject* qObject = NULL); |
90 static void* getDId(const QObject* qObject); | 147 static void* getDId(const QObject* qObject); |
91 }; | 148 }; |
92 | 149 |
93 #define Array DArray | 150 #define Array DArray |
94 | 151 |
95 #ifdef CPP_SHARED | 152 QTD_EXPORT_DECL(CORE, void, toUtf8, (const unsigned short* arr, uint size, void* str)) |
96 typedef void (*pfunc_abstr)(); | 153 QTD_EXPORT_DECL(CORE, void, QtdObject_delete, (void* dId)) |
97 #endif | |
98 | 154 |
99 QTD_EXPORT(void, qtd_toUtf8, (const unsigned short* arr, uint size, void* str)) | 155 QTD_EXTERN QModelIndex qtd_to_QModelIndex(QModelIndexAccessor mia); |
100 QTD_EXPORT(void, qtd_QtdObject_delete, (void* dId)) | 156 QTD_EXTERN QModelIndexAccessor qtd_from_QModelIndex(const QModelIndex &index); |
101 | 157 |
102 #ifdef CPP_SHARED | 158 QTD_EXTERN typedef void (*EmitCallback)(void*, void**); |
103 #define qtd_toUtf8 qtd_get_qtd_toUtf8() | 159 QTD_EXTERN typedef int (*QtMetacallCallback)(void *d_entity, QMetaObject::Call _c, int _id, void **_a); |
104 #define qtd_QtdObject_delete qtd_get_qtd_QtdObject_delete() | 160 QTD_EXTERN typedef const QMetaObject* (*MetaObjectCallback)(void *d_entity); |
105 #endif | |
106 | |
107 extern "C" QModelIndex qtd_to_QModelIndex(QModelIndexAccessor mia); | |
108 extern "C" QModelIndexAccessor qtd_from_QModelIndex(const QModelIndex &index); | |
109 | |
110 extern "C" typedef void (*EmitCallback)(void*, void**); | |
111 extern "C" typedef int (*QtMetacallCallback)(void *d_entity, QMetaObject::Call _c, int _id, void **_a); | |
112 extern "C" typedef const QMetaObject* (*MetaObjectCallback)(void *d_entity); | |
113 | 161 |
114 template <class T> | 162 template <class T> |
115 void call_destructor(T *a) | 163 void call_destructor(T *a) |
116 { | 164 { |
117 a->~T(); | 165 a->~T(); |