annotate d2/qtd/QtdObject.d @ 362:bcbfffef4f9e

Undecorated D types can be registered with Qt
author Max Samukha <maxter@maxter.com>
date Wed, 09 Jun 2010 16:37:24 +0300
parents 9784459f0750
children a032df77b6ab
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
1 /**
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
2 *
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
3 * Copyright: Copyright QtD Team, 2008-2009
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
4 * License: <a href="http://www.boost.org/LICENSE_1_0.txt>Boost License 1.0</a>
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
5 *
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
6 * Copyright QtD Team, 2008-2009
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
7 * Distributed under the Boost Software License, Version 1.0.
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
8 * (See accompanying file boost-license-1.0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
9 *
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
10 */
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
11
344
96a75b1e5b26 project structure changes
Max Samukha <maxter@spambox.com>
parents: 288
diff changeset
12 module qtd.QtdObject;
357
9784459f0750 An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
13 import qtd.Core;
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
14
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
15 enum QtdObjectFlags : ubyte
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
16 {
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
17 none,
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
18 nativeOwnership = 0x1,
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
19 dOwnership = 0x2,
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
20 dynamicEntity = 0x4
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
21 //gcManaged = 0x4
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
22 }
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
23
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
24 package abstract class QtdObject
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
25 {
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
26 protected QtdObjectFlags __flags_;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
27 void* __nativeId;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
28
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
29 this(void* nativeId, QtdObjectFlags flags = QtdObjectFlags.none)
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
30 {
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
31 __nativeId = nativeId;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
32 __flags_ = flags;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
33 }
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
34
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
35 final QtdObjectFlags __flags()
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
36 {
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
37 return __flags_;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
38 }
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
39
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
40 /+ final +/ void __setFlags(QtdObjectFlags flags, bool value)
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
41 {
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
42 if (value)
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
43 __flags_ |= flags;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
44 else
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
45 __flags_ &= ~flags;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
46 }
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
47
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
48 // COMPILER BUG: 3206
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
49 protected void __deleteNative()
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
50 {
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
51 assert(false);
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
52 }
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
53
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
54 ~this()
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
55 {
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
56 if (!(__flags_ & QtdObjectFlags.nativeOwnership))
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
57 {
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
58 // avoid deleting D object twice.
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
59 __flags_ |= QtdObjectFlags.dOwnership;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
60 __deleteNative;
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
61 }
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
62 }
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
63 }
354
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
64
357
9784459f0750 An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
65 mixin(qtdExport("void", "QtdObject_delete", "void* dId",
9784459f0750 An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
66 q{
9784459f0750 An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
67 auto obj = cast(QtdObject)dId;
354
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
68
357
9784459f0750 An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
69 if (!(obj.__flags & QtdObjectFlags.dOwnership))
9784459f0750 An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
70 {
9784459f0750 An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
71 // Avoid deleting native object twice
9784459f0750 An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
72 obj.__setFlags(QtdObjectFlags.nativeOwnership, true);
9784459f0750 An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
73 delete obj;
9784459f0750 An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
74 }
9784459f0750 An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
75 }));