diff 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
line wrap: on
line diff
--- a/include/qtd_core.h	Mon May 24 23:43:30 2010 +0300
+++ b/include/qtd_core.h	Tue May 25 17:23:11 2010 +0300
@@ -1,13 +1,7 @@
 /**
-*
-*  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 Software License 1.0
+ */
 
 #ifndef QTD_CORE_H
 #define QTD_CORE_H
@@ -34,6 +28,8 @@
     extern "C" TYPE NAME ARGS;
 #endif
 
+extern uint userDataId;
+
 struct QModelIndexAccessor {
 	int row;
 	int col;
@@ -54,14 +50,44 @@
     //gcManaged                 = 0x04
 };
 
-class QtD_Entity
+class DLL_PUBLIC QtdObjectLink
 {
 public:
-    void* dId;
+    void* dId; // TODO: needs to be atomic
+
+    QtdObjectLink(void* id) : dId(id) {}
+
+    template<typename T>
+    static QtdObjectLink* getLink(const T* object)
+    {
+        return dynamic_cast<QtdObjectLink*>((T*)object);
+    }
+
+    template<typename T>
+    static void* getDId(const T* object)
+    {
+        QtdObjectLink *link = getLink((T*)object);
+        return link ? link->dId : NULL;
+    }
+};
 
-    QtD_Entity(void* id) : dId(id)
+class DLL_PUBLIC QObjectLink : public QtdObjectLink, public QObjectUserData
+{
+public:
+    enum Flags
     {
-    }
+        None,
+        CreatedByD = 0x1
+    };
+
+    Flags flags;
+
+    QObjectLink(QObject* qObject, void* dId);
+    bool createdByD();
+    virtual ~QObjectLink();
+    void destroyLink(QObject* qObject = NULL);
+    static QObjectLink* getLink(const QObject* qObject);
+    static void* getDId(const QObject* qObject);
 };
 
 #define Array DArray