annotate d2/qtd/Core.d @ 365:958e8b9a89bd

Changeset a084e2df3776 is broken. Backing out.
author Max Samukha <maxter@spambox.com>
date Fri, 11 Jun 2010 20:09:25 +0300
parents 49d0a43433e7
children a032df77b6ab
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
359
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
1 module qtd.Core;
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
2
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
3 import
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
4 qtd.ctfe.Format,
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
5 std.stdio;
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
6
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
7 T static_cast(T, U)(U obj)
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
8 {
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
9 return cast(T)cast(void*)obj;
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
10 }
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
11
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
12 enum qtdExtern = "extern (C)";
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
13
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
14 extern(C) alias void function() VoidFunc;
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
15 extern(C) void qtd_initCore();
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
16
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
17 immutable Object qtdMoLock;
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
18
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
19 static this()
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
20 {
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
21 qtdMoLock = cast(immutable)new Object;
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
22 qtd_initCore();
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
23 }
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
24
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
25 /**
360
49d0a43433e7 typo in comments
maxter <spambox@d-coding.com>
parents: 359
diff changeset
26 Defines a function that can be called from QtD C++ libraries.
49d0a43433e7 typo in comments
maxter <spambox@d-coding.com>
parents: 359
diff changeset
27 The function will be automatically
49d0a43433e7 typo in comments
maxter <spambox@d-coding.com>
parents: 359
diff changeset
28 registered with the DLL at program startup.
359
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
29 */
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
30 string qtdExport(string retType, string name, string args, string funcBody)
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
31 {
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
32 string ret;
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
33 version (cpp_shared) // TODO: cpp_shared implies Windows, which is not correct
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
34 {
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
35 // TODO: hackery to workaround a dmd/optlink bug corrupting symbol names
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
36 // when a direct function pointer export is used
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
37 ret ~= format_ctfe(
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
38 " ${4} ${0} qtd_export_${1}(${2}) { ${3} }\n"
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
39 " ${4} export void qtd_set_${1}(VoidFunc func);\n"
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
40 " static this() { qtd_set_${1}(cast(VoidFunc)&qtd_export_${1}); }\n",
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
41 retType, name, args, funcBody, qtdExtern);
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
42 }
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
43 else
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
44 {
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
45 ret = format_ctfe(
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
46 "${4} ${0} qtd_${1}(${2}) { ${3} }\n",
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
47 retType, name, args, funcBody, qtdExtern);
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
48 }
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
49
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
50 return ret;
2013af5d0627 Aded Core.d
Max Samukha <maxter@spambox.com>
parents:
diff changeset
51 }