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