diff cpp/qt_qtd/qtd_core.cpp @ 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 12f60887ed15 a032df77b6ab
line wrap: on
line diff
--- a/cpp/qt_qtd/qtd_core.cpp	Tue May 25 20:14:04 2010 +0300
+++ b/cpp/qt_qtd/qtd_core.cpp	Wed Jun 02 19:38:05 2010 +0300
@@ -1,25 +1,25 @@
 /**
-*
-*  Copyright: Copyright QtD Team, 2008-2009
-*  License: <a href="http://www.boost.org/LICENSE_1_0.txt>Boost License 1.0</a>
-*
-*  Copyright QtD Team, 2008-2009
-*  Distributed under the Boost Software License, Version 1.0.
-*  (See accompanying file boost-license-1.0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-*
-*/
+    Copyright: Copyright QtD Team, 2008-2010
+    License: Boost License 1.0
+ */
 
 #include "qtd_core.h"
 #include <iostream>
 
-uint userDataId;
+QTD_EXPORT(CORE, toUtf8);
+QTD_EXPORT(CORE, QtdObject_delete);
 
-extern "C" DLL_PUBLIC QModelIndex qtd_to_QModelIndex(QModelIndexAccessor mia)
+QTD_EXTERN QTD_DLL_EXPORT void qtd_initCore()
+{
+    QObjectLink::userDataId = QObject::registerUserData();
+}
+
+QTD_EXTERN QTD_DLL_PUBLIC QModelIndex qtd_to_QModelIndex(QModelIndexAccessor mia)
 {
     return * (QModelIndex *) (&mia) ;
 }
 
-extern "C" DLL_PUBLIC QModelIndexAccessor qtd_from_QModelIndex(const QModelIndex &index)
+QTD_EXTERN QTD_DLL_PUBLIC QModelIndexAccessor qtd_from_QModelIndex(const QModelIndex &index)
 {
     QModelIndexAccessor mia = {
         index.row(),
@@ -31,42 +31,29 @@
     return mia;
 }
 
-extern "C" DLL_PUBLIC const char* qtd_qVersion()
+QTD_EXTERN QTD_DLL_PUBLIC const char* qtd_qVersion()
 {
     return qVersion();
 }
 
-extern "C" DLL_PUBLIC bool qtd_qSharedBuild()
+QTD_EXTERN QTD_DLL_PUBLIC bool qtd_qSharedBuild()
 {
     return qSharedBuild();
 }
 
-//TODO: this has to be replaced with something that makes some sense
-#ifdef CPP_SHARED
-QTD_EXPORT_VAR(qtd_toUtf8);
-QTD_EXPORT_VAR(qtd_QtdObject_delete);
-
-extern "C" DLL_PUBLIC void qtd_core_initCallBacks(pfunc_abstr d_func, pfunc_abstr del_d_qobj) {
-    QTD_EXPORT_VAR_SET(qtd_toUtf8, d_func);
-    QTD_EXPORT_VAR_SET(qtd_QtdObject_delete, del_d_qobj);
-
-    userDataId = QObject::registerUserData();
-}
-#endif
-
 extern bool qRegisterResourceData
     (int, const unsigned char *, const unsigned char *, const unsigned char *);
 
 extern bool qUnregisterResourceData
     (int, const unsigned char *, const unsigned char *, const unsigned char *);
 
-extern "C" DLL_PUBLIC bool qtd_register_resource_data(int version, const unsigned char *tree,
+QTD_EXTERN QTD_DLL_PUBLIC bool qtd_register_resource_data(int version, const unsigned char *tree,
                                          const unsigned char *name, const unsigned char *data)
 {
     return qRegisterResourceData(version, tree, name, data);
 }
 
-extern "C" DLL_PUBLIC bool qtd_unregister_resource_data(int version, const unsigned char *tree,
+QTD_EXTERN QTD_DLL_PUBLIC bool qtd_unregister_resource_data(int version, const unsigned char *tree,
                                            const unsigned char *name, const unsigned char *data)
 {
     return qUnregisterResourceData(version, tree, name, data);
@@ -83,6 +70,8 @@
     qObject->setUserData(userDataId, this);
 }
 
+uint QObjectLink::userDataId;
+
 QObjectLink* QObjectLink::getLink(const QObject *qObject)
 {
     return static_cast<QObjectLink*>(qObject->userData(userDataId));