diff qt/qtd/MetaMarshall.d @ 309:8a0cf14e3419 signals

wrong merge
author eldar_ins@eldar-laptop
date Wed, 23 Dec 2009 04:48:11 +0500
parents 2485419c5c63
children ce07227f00c1
line wrap: on
line diff
--- a/qt/qtd/MetaMarshall.d	Wed Dec 23 04:45:55 2009 +0500
+++ b/qt/qtd/MetaMarshall.d	Wed Dec 23 04:48:11 2009 +0500
@@ -2,8 +2,14 @@
 
 import std.traits;
 
+// utilities
 // shouldn't be here
 
+public bool startsWith(T)(T[] source, T[] pattern)
+{
+    return source.length >= pattern.length && source[0 .. pattern.length] == pattern[];
+}
+
 string __toString(long v)
 {
     if (v == 0)
@@ -30,6 +36,16 @@
     return ret;
 }
 
+template templateParam(U : V!(U), alias V)
+{
+    alias U templateParam;
+}
+
+
+/*
+ * actual stuff
+ */
+
 template isQObjectType(T) // is a QObject type that belongs to the library
 {
     enum isQObjectType = is(T.__isQObjectType);
@@ -55,6 +71,11 @@
     enum isStringType = is(T == string);
 }
 
+template isQList(T)
+{
+    enum isQList = startsWith(Unqual!(T).stringof, "QList!");
+}
+
 // converts an argumnent from C++ to D in qt_metacall
 string metaCallArgument(T)(string ptr)
 {
@@ -76,6 +97,8 @@
         return T.stringof ~ "*";
     else static if (isStringType!T)
         return "QString";
+    else static if (isQList!T)
+        return "QList<" ~ qtDeclArg!(templateParam!T)() ~ ">";
     else static if (isNativeType!T)
         return Unqual!T.stringof;
     else