Mercurial > projects > qtd
annotate d2/qtd/Core.d @ 398:aa08a72d480a
Fixed construction of the ?--include-paths? generation argument in the build system.
Interestingly enough, it doesn't seem to have caused any problems so far.
author | David Nadlinger <code@klickverbot.at> |
---|---|
date | Sat, 15 Jan 2011 22:52:06 +0100 |
parents | 7dddafad5a20 |
children |
rev | line source |
---|---|
359 | 1 module qtd.Core; |
2 | |
3 import | |
4 qtd.ctfe.Format, | |
372
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
360
diff
changeset
|
5 std.traits; |
359 | 6 |
372
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
360
diff
changeset
|
7 /** |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
360
diff
changeset
|
8 Casts T to U, bypassing dynamic cast checks |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
360
diff
changeset
|
9 */ |
359 | 10 T static_cast(T, U)(U obj) |
11 { | |
12 return cast(T)cast(void*)obj; | |
13 } | |
14 | |
372
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
360
diff
changeset
|
15 /** |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
360
diff
changeset
|
16 Strips qualifiers off the argument. |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
360
diff
changeset
|
17 */ |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
360
diff
changeset
|
18 auto ref unqual(T)(auto ref T v) |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
360
diff
changeset
|
19 { |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
360
diff
changeset
|
20 static if (__traits(isRef, v)) |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
360
diff
changeset
|
21 { |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
360
diff
changeset
|
22 auto p = cast(Unqual!(T)*)&v; |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
360
diff
changeset
|
23 return *p; |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
360
diff
changeset
|
24 } |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
360
diff
changeset
|
25 else |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
360
diff
changeset
|
26 return cast(Unqual!T)v; |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
360
diff
changeset
|
27 } |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
360
diff
changeset
|
28 |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
360
diff
changeset
|
29 /** |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
360
diff
changeset
|
30 Just an alias to the type T. Useful for declarations |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
360
diff
changeset
|
31 with anonymous types. |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
360
diff
changeset
|
32 */ |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
360
diff
changeset
|
33 template Type(T) |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
360
diff
changeset
|
34 { |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
360
diff
changeset
|
35 alias T Type; |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
360
diff
changeset
|
36 } |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
360
diff
changeset
|
37 |
359 | 38 extern(C) alias void function() VoidFunc; |
372
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
360
diff
changeset
|
39 extern(C) void qtdInitCore(); |
359 | 40 |
386 | 41 shared static this() |
359 | 42 { |
372
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
360
diff
changeset
|
43 qtdInitCore(); |
359 | 44 } |
45 | |
46 /** | |
360 | 47 Defines a function that can be called from QtD C++ libraries. |
48 The function will be automatically | |
49 registered with the DLL at program startup. | |
359 | 50 */ |
51 string qtdExport(string retType, string name, string args, string funcBody) | |
52 { | |
53 string ret; | |
384
d2f48c4cb3e3
Same behavior of shared libs on linux and windows. Minor build script fixes.
Max Samukha <maxter@spambox.com>
parents:
372
diff
changeset
|
54 enum ext = "extern (C)"; |
d2f48c4cb3e3
Same behavior of shared libs on linux and windows. Minor build script fixes.
Max Samukha <maxter@spambox.com>
parents:
372
diff
changeset
|
55 version (QtdCppShared) |
359 | 56 { |
384
d2f48c4cb3e3
Same behavior of shared libs on linux and windows. Minor build script fixes.
Max Samukha <maxter@spambox.com>
parents:
372
diff
changeset
|
57 version(Windows) |
d2f48c4cb3e3
Same behavior of shared libs on linux and windows. Minor build script fixes.
Max Samukha <maxter@spambox.com>
parents:
372
diff
changeset
|
58 enum exp = "export"; |
d2f48c4cb3e3
Same behavior of shared libs on linux and windows. Minor build script fixes.
Max Samukha <maxter@spambox.com>
parents:
372
diff
changeset
|
59 else |
d2f48c4cb3e3
Same behavior of shared libs on linux and windows. Minor build script fixes.
Max Samukha <maxter@spambox.com>
parents:
372
diff
changeset
|
60 enum exp = ""; |
d2f48c4cb3e3
Same behavior of shared libs on linux and windows. Minor build script fixes.
Max Samukha <maxter@spambox.com>
parents:
372
diff
changeset
|
61 |
359 | 62 // TODO: hackery to workaround a dmd/optlink bug corrupting symbol names |
63 // when a direct function pointer export is used | |
64 ret ~= format_ctfe( | |
65 " ${4} ${0} qtd_export_${1}(${2}) { ${3} }\n" | |
384
d2f48c4cb3e3
Same behavior of shared libs on linux and windows. Minor build script fixes.
Max Samukha <maxter@spambox.com>
parents:
372
diff
changeset
|
66 " ${4} ${5} void qtd_set_${1}(VoidFunc func);\n" |
359 | 67 " static this() { qtd_set_${1}(cast(VoidFunc)&qtd_export_${1}); }\n", |
384
d2f48c4cb3e3
Same behavior of shared libs on linux and windows. Minor build script fixes.
Max Samukha <maxter@spambox.com>
parents:
372
diff
changeset
|
68 retType, name, args, funcBody, ext, exp); |
359 | 69 } |
70 else | |
71 { | |
72 ret = format_ctfe( | |
73 "${4} ${0} qtd_${1}(${2}) { ${3} }\n", | |
384
d2f48c4cb3e3
Same behavior of shared libs on linux and windows. Minor build script fixes.
Max Samukha <maxter@spambox.com>
parents:
372
diff
changeset
|
74 retType, name, args, funcBody, ext); |
359 | 75 } |
76 | |
77 return ret; | |
78 } |