comparison qt/qtd/Meta.d @ 339:4e31cbd9e20c

fix enumeration problems. requires patched dmd
author Eldar Insafutdinov
date Sun, 09 May 2010 00:52:49 +0100
parents 5c6455c4889b
children
comparison
equal deleted inserted replaced
338:e65f08f6262b 339:4e31cbd9e20c
1 module qt.qtd.Meta; 1 module qt.qtd.Meta;
2 2
3 import std.traits; 3 import std.traits;
4 import std.typetuple; 4 import std.typetuple;
5 import std.string;
5 6
6 // Various compile time utilities 7 // Various compile time utilities
7 8
8 public bool ctfeStartsWith(T)(T[] source, T[] pattern) 9 public bool ctfeStartsWith(T)(T[] source, T[] pattern)
9 { 10 {
79 80
80 template isFnOrDg(Dg) 81 template isFnOrDg(Dg)
81 { 82 {
82 enum isFnOrDg = isFn!(Dg) || isDg!(Dg); 83 enum isFnOrDg = isFn!(Dg) || isDg!(Dg);
83 } 84 }
85
86 uint isModule(string str)
87 {
88 return startsWith(str, "module ");
89 }
90
91 template qualifiedCppName(T)
92 {
93 static if(!isModule(__traits(parent, T).stringof))
94 enum qualifiedCppName = qualifiedCppName!(__traits(parent, T)) ~ "::" ~ T.stringof;
95 else
96 enum qualifiedCppName = T.stringof;
97 }
98
99 template qualifiedDName(T)
100 {
101 static if (!isModule(__traits(parent, T).stringof))
102 enum qualifiedDName = qualifiedDName!(__traits(parent, T)) ~ "." ~ T.stringof;
103 else
104 enum qualifiedDName = T.stringof;
105 }
106
107 template fullDName(T)
108 {
109 static if (is(T == enum))
110 enum fullDName = qualifiedDName!T;
111 else
112 enum fullDName = T.stringof;
113 }