# HG changeset patch # User maxter # Date 1273872167 -10800 # Node ID 970332a88b725d0a95b3d4dce3a287ae158ed45d # Parent 2691dd58d7e10c3afebce4dcfd57d85fa780d90e lowered the marshall in rank diff -r 2691dd58d7e1 -r 970332a88b72 build/core.txt --- a/build/core.txt Fri May 14 13:15:24 2010 +0300 +++ b/build/core.txt Sat May 15 00:22:47 2010 +0300 @@ -29,7 +29,7 @@ Signal Str Atomic - MetaMarshall + Marshal MOC Meta Array diff -r 2691dd58d7e1 -r 970332a88b72 d2/qt/core/QList.d --- a/d2/qt/core/QList.d Fri May 14 13:15:24 2010 +0300 +++ b/d2/qt/core/QList.d Sat May 15 00:22:47 2010 +0300 @@ -5,7 +5,7 @@ import qt.core.QString; import qtd.QtdObject; import qtd.Atomic; -import qtd.MetaMarshall; +import qtd.Marshal; import core.stdc.stdlib : qRealloc = realloc, qFree = free, qMalloc = malloc; import core.stdc.string : memcpy, memmove; diff -r 2691dd58d7e1 -r 970332a88b72 d2/qt/core/QTypeInfo.d --- a/d2/qt/core/QTypeInfo.d Fri May 14 13:15:24 2010 +0300 +++ b/d2/qt/core/QTypeInfo.d Sat May 15 00:22:47 2010 +0300 @@ -8,7 +8,7 @@ */ import std.traits; -import qtd.MetaMarshall; +import qtd.Marshal; import qt.core.QString; bool qIsDetached(T)(ref T) { return true; } diff -r 2691dd58d7e1 -r 970332a88b72 d2/qtd/Attribute.d --- a/d2/qtd/Attribute.d Fri May 14 13:15:24 2010 +0300 +++ b/d2/qtd/Attribute.d Sat May 15 00:22:47 2010 +0300 @@ -26,7 +26,66 @@ */ allowMultiple = 0x0000_0001, - /* internal */ inner = 0x0000_0002 + /* internal */ inner = 0x0000_0002, + + /** + Attribute data are in key-value form. + */ + named = 0x0000_0004 +} + +/** + When mixed in an aggregate, converts a compile-time tuple to + members of that aggregate. + */ +mixin template tupleToMembers!(string nameSpace, size_t index, A...) +{ + static if (index < A.length) + { + enum indexStr = to!string(index); + + static if (is(__traits(compiles, { struct { typeof(A[index]) x; } }() }))) + mixin("typeof(A[" ~ indexStr ~ "]) " ~ nameSpace ~ ~ " = A[" ~ indexStr ~"];\n" ~ next; + else + mixin("alias A[" ~ indexStr ~ "] " ~ nameSpace ~ indexStr ~ ";\n" ~ next; + + mixin tupleToFields!(nameSpace, index + 1, A); + } +} + +/** + When mixed in an aggregate, converts a compile-time tuple of name-value pairs to + members of that aggregate. + */ +struct NamedValueTupleToFields(A...) +{ + +} + +version (QtdUnittest) +{ + unittest + { + static int foo() + { + return 42; + } + + static struct S + { + mixin TupleToFields!("field", 0, + int, + "a", + 22, + foo); + } + + static assert(is(S.field0 == int)); + S s; + assert(s.field1 == "a"); + assert(s.field2 == "22"); + assert(S.foo() == 42); + } } private template attributeId(alias symbol, uint index = 0) @@ -158,6 +217,46 @@ mixin ("alias TypeTuple!(attrClass, A) " ~ attrId ~ ";"); } +/** + Base class for run time attributes + */ +abstract class MetaAttribute +{ +} + +/** + Default implementation of run time attributes + */ +final class MetaAttributeVariant : MetaAttribute +{ +private: + Variant[] values_; + +public: + Variant values() + { + return values_; + } + + static MetaAttributeVariant create(string category, AttributeOptions opts, A...)() + { + } +} + +class MetaAttributeTypedImpl(A...) +{ +} + + +abstract class MetaAtributeTyped : MetaAttribute +{ + void construct(A...)() + { + } +} + + + private string stringOfFunction(alias symbol)() { auto ptrType = typeof(&symbol).stringof; diff -r 2691dd58d7e1 -r 970332a88b72 d2/qtd/MOC.d --- a/d2/qtd/MOC.d Fri May 14 13:15:24 2010 +0300 +++ b/d2/qtd/MOC.d Sat May 15 00:22:47 2010 +0300 @@ -4,7 +4,7 @@ import qt.QGlobal; import qtd.Signal; -import qtd.MetaMarshall; +import qtd.Marshal; import qtd.Meta; import qtd.ctfe.Format; diff -r 2691dd58d7e1 -r 970332a88b72 d2/qtd/Signal.d --- a/d2/qtd/Signal.d Fri May 14 13:15:24 2010 +0300 +++ b/d2/qtd/Signal.d Sat May 15 00:22:47 2010 +0300 @@ -12,7 +12,7 @@ module qtd.Signal; public import qt.QGlobal; -import qtd.MetaMarshall; +import qtd.Marshal; import qtd.Meta; import core.stdc.stdlib : crealloc = realloc, cfree = free;