changeset 383:bd7f485e3573

More debug fixes
author Max Samukha <maxter@spambox.com>
date Mon, 12 Jul 2010 22:50:58 +0300
parents 1d56b2a2e10c
children d2f48c4cb3e3
files d2/qt/core/QMetaType.d d2/qt/core/test/Objects.d d2/qtd/Debug.d d2/qtd/QtdObject.d examples/qwt/simpleplot/build.sh examples/qwt/simpleplot/simple.d
diffstat 6 files changed, 22 insertions(+), 126 deletions(-) [+]
line wrap: on
line diff
--- a/d2/qt/core/QMetaType.d	Mon Jul 12 20:36:07 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,103 +0,0 @@
-module qt.core.QMetaType;
-public import qt.core.Qt;
-private import qt.core.QDataStream;
-
-alias extern(C) void *function(void *copy) Ctor;
-alias extern(C) void function(void *obj) Dtor;
-alias extern(C) void function(void *stream, void * object) StreamOp;
-
-struct DArrayToC
-{
-    void[] array;
-}
-
-public template MetaTypeOps(T)
-{
-   // TODO:
-   // static assert(typeof(new T), "Type " ~ T.stringof ~ " has no default constructor");
-   // static assert(typeof(new T(T.init))), "Type " ~ T.stringof ~ " has no default copy constructor");
-
-    extern(C) void* ctor(void* copy)
-    {
-	static if (is(T == class) || is(T == interface))
-	{
-	    return cast(void*)(copy ? new T(cast(T)copy) : new T);
-	}
-	else static if (isDynamicArrayType!(T) || isStaticArrayType!(T) )
-	{
-	    auto darray = new DArrayToC;
-	    if(copy)
-		darray.array = (cast(DArrayToC*)copy).array.dup;
-	    return cast(void*)darray;
-	}
-	else
-	{
-	    auto data = new T;
-	    if(copy)
-		*data = *cast(T*)copy;
-	    return cast(void*)data;
-	}
-    }
-
-
-    extern(C) void dtor(void* obj)
-    {
-        static if (is(T == class) || is(T == interface))
-	{
-	    auto tmp = cast(T)obj;
-            delete tmp;
-	}
-	else
-	{
-	    auto tmp = cast(T*)obj;
-            delete tmp;
-	}
-    }
-}
-
-public int qRegisterMetaType(T)(string name = null)
-{
-    if (!name.length)
-	name = typeid(T).toString;
-
-    return qtd_qRegisterMetaType(toStringz(name), &MetaTypeOps!(T).ctor, &MetaTypeOps!(T).dtor);
-}
-
-/* Not work....
-private class DataStreamPriv: QDataStream
-{
-    this(void * cobj)
-    {
-	super(cobj);
-    }
-}
-*/
-/*
-public void qRegisterMetaTypeStreamOperators(T)(void function(ref QDataStream, T ) saveOp, void function (ref QDataStream, ref T) loadOp, string name = null)
-{
-    static void function(ref QDataStream, T ) SaveOp;
-    static void function (ref QDataStream, ref T)  LoadOp;
-    SaveOp = saveOp;
-    LoadOp = loadOp;
-
-    if (!name.length)
-	name = typeid(T).toString;
-
-    extern(C) void saveOpC(void *stream, void *object)
-    {
-	QDataStream dstream = new DataStreamPriv(stream);
-	Stdout(object).newline;
-	static if (is(T == class) || is(T == interface))
-	    SaveOp(dstream, cast(T)object);
-	else
-	    SaveOp(dstream, *cast(T*)object);
-    }
-
-    extern(C) void loadOpC(void *stream, void *object)
-    {
-	//return stream;
-    }
-
-    qtd_registerStreamOperators(toStringz(name), cast(StreamOp)&saveOpC, cast(StreamOp)&loadOpC);
-}
-*/
--- a/d2/qt/core/test/Objects.d	Mon Jul 12 20:36:07 2010 +0300
+++ b/d2/qt/core/test/Objects.d	Mon Jul 12 22:50:58 2010 +0300
@@ -1,4 +1,6 @@
-module qt.core.test.QObject;
+module qt.core.test.Objects;
+
+import std.stdio;
 
 // make sure QtdUnittest is defined
 version (QtdUnittest) {} else { static assert(false); }
@@ -9,7 +11,7 @@
     qtd.meta.Runtime,
     qt.core.QObject,
     qt.core.QMetaObject;
-    
+
 import std.stdio;
 
 extern (C) void* qtd_test_QObject_create(void* parent);
@@ -95,6 +97,7 @@
 
 unittest
 {
+    writeln("Here");
     static void reset()
     {
         qtdDebug.reset();
@@ -103,16 +106,13 @@
 
     qtdDebug.info("Running unittests (" ~ __FILE__ ~")");
 
-
     //test1
     reset();
     test1();
     GC.collect();
-    
-    writeln("Collected");
     assert(qtdDebug.wrapperCount == 1);
-    
-    
+
+
     //test2
     reset();
     test2();
@@ -124,7 +124,7 @@
     test3();
     assert(qtdDebug.wrapperCount == 0);
     assert(qtdDebug.nativeDeletedCount == 1);
-    
+
     //test4
     reset();
     test4();
--- a/d2/qtd/Debug.d	Mon Jul 12 20:36:07 2010 +0300
+++ b/d2/qtd/Debug.d	Mon Jul 12 22:50:58 2010 +0300
@@ -60,8 +60,9 @@
         {
             static assert (QtdObjectFlags.sizeof == ubyte.sizeof);
             auto flags = wrapper.qtdFlags;
-            return format("%s (nativeId: %s, this ptr: %s, flags: %b)", this, wrapper.qtdNativeId
-                , cast(void*)this, *cast(ubyte*)&flags);
+            return format("%s (nativeId: %s, this ptr: %s, flags: %b)"
+                , wrapper, wrapper.qtdNativeId
+                , cast(void*)wrapper, *cast(ubyte*)&flags);
         }
 
         void onWrapperConstructed(QtdObject wrapper)
@@ -77,13 +78,13 @@
 
         void onWrapperDestroyed(QtdObject wrapper)
         {
-            info("Leaving QtdObject destructor: " ~ wrapperToString(wrapper));
+            info(format("Leaving QtdObject destructor (dId: %s)",  cast(void*)wrapper));
             wrapperCount_--;
         }
 
         void onNativeDeleted(QtdObject wrapper)
         {
-            info("Native object deleted: " ~ wrapperToString(wrapper));
+            info(format("Native object deleted (dId: %s)", cast(void*)wrapper));
             nativeDeletedCount_++;
         }
 
@@ -92,9 +93,9 @@
             info("Object ownership changed: " ~ wrapperToString(wrapper));
         }
 
-        void onDeletingWrapperFromNative(void* dId)
+        void onDeletingWrapperFromNative(QtdObject wrapper)
         {
-            info(format("Wrapper deletion initiated from C++ (wrapper id: %s)", dId));
+            info(format("Wrapper deletion initiated from C++ (wrapper id: %s)", cast(void*)wrapper));
         }
 
         @property int wrapperCount()
--- a/d2/qtd/QtdObject.d	Mon Jul 12 20:36:07 2010 +0300
+++ b/d2/qtd/QtdObject.d	Mon Jul 12 22:50:58 2010 +0300
@@ -214,7 +214,6 @@
         if (!_flags.nativeDeleteDisabled)
         {
             // avoid deleting D object twice.
-
             _flags.wrapperDeleteDisabled = true;
             qtdDeleteNative;
 
@@ -319,7 +318,7 @@
     q{
         auto obj = cast(QtdObject)dId;
 
-        mixin(debugHandler("onDeletingWrapperFromNative", "dId"));
+        mixin(debugHandler("onDeletingWrapperFromNative", "obj"));
 
         if (!obj._flags.wrapperDeleteDisabled)
         {
--- a/examples/qwt/simpleplot/build.sh	Mon Jul 12 20:36:07 2010 +0300
+++ b/examples/qwt/simpleplot/build.sh	Mon Jul 12 22:50:58 2010 +0300
@@ -1,3 +1,2 @@
 #! /bin/bash
-
-dmd -I../../../d2 -I../../../output/build simple.d -L-lqtdqwt -L-lqtdgui -L-lqtdcore -L-lcpp_qwt -L-lcpp_core -L-lcpp_gui -L-lqwt-qt4 -L-lQtGui -L-lQtCore -ofsimple
+dmd -L-L../../../output/build/lib -I../../../d2 -I../../../output/build simple.d -L-lqtdqwt -L-lqtdgui -L-lqtdcore -L-lcpp_qwt -L-lcpp_core -L-lcpp_gui -L-lqwt-qt4 -L-lQtGui -L-lQtCore -ofsimple
--- a/examples/qwt/simpleplot/simple.d	Mon Jul 12 20:36:07 2010 +0300
+++ b/examples/qwt/simpleplot/simple.d	Mon Jul 12 22:50:58 2010 +0300
@@ -32,9 +32,9 @@
 class SimpleData: QwtData
 {
     // The x values depend on its index and the y values
-    // can be calculated from the corresponding x value. 
+    // can be calculated from the corresponding x value.
     // So we don't need to store the values.
-    // Such an implementation is slower because every point 
+    // Such an implementation is slower because every point
     // has to be recalculated for every replot, but it demonstrates how
     // QwtData can be used.
 
@@ -80,7 +80,7 @@
         // Set axis titles
         setAxisTitle(xBottom, "x -->");
         setAxisTitle(yLeft, "y -->");
-        
+
         // Insert new curves
         auto cSin = new QwtPlotCurve("y = sin(x)");
         cSin.setRenderHint(QwtPlotItem.RenderAntialiased);
@@ -98,7 +98,7 @@
         cCos.setData(new SimpleData(&mycos, nPoints));
 
         // Insert markers
-        
+
         //  ...a horizontal line at y = 0...
         auto mY = new QwtPlotMarker();
         mY.setLabel(new QwtText("y = 0"));
@@ -127,5 +127,5 @@
     scope plot = new Plot;
     plot.resize(600,400);
     plot.show();
-    return a.exec(); 
+    return a.exec();
 }