Mercurial > projects > qtd
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