Mercurial > projects > qtd
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 |
rev | line source |
---|---|
253 | 1 /** |
2 * | |
3 * Copyright: Copyright QtD Team, 2008-2009 | |
4 * License: <a href="http://www.boost.org/LICENSE_1_0.txt>Boost License 1.0</a> | |
5 * | |
6 * Copyright QtD Team, 2008-2009 | |
7 * Distributed under the Boost Software License, Version 1.0. | |
8 * (See accompanying file boost-license-1.0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | |
9 * | |
10 */ | |
11 | |
344 | 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 | 14 |
15 enum QtdObjectFlags : ubyte | |
16 { | |
17 none, | |
18 nativeOwnership = 0x1, | |
19 dOwnership = 0x2, | |
20 dynamicEntity = 0x4 | |
21 //gcManaged = 0x4 | |
22 } | |
23 | |
24 package abstract class QtdObject | |
25 { | |
26 protected QtdObjectFlags __flags_; | |
27 void* __nativeId; | |
28 | |
29 this(void* nativeId, QtdObjectFlags flags = QtdObjectFlags.none) | |
30 { | |
31 __nativeId = nativeId; | |
32 __flags_ = flags; | |
33 } | |
34 | |
35 final QtdObjectFlags __flags() | |
36 { | |
37 return __flags_; | |
38 } | |
39 | |
40 /+ final +/ void __setFlags(QtdObjectFlags flags, bool value) | |
41 { | |
42 if (value) | |
43 __flags_ |= flags; | |
44 else | |
45 __flags_ &= ~flags; | |
46 } | |
47 | |
48 // COMPILER BUG: 3206 | |
49 protected void __deleteNative() | |
50 { | |
51 assert(false); | |
52 } | |
53 | |
54 ~this() | |
55 { | |
56 if (!(__flags_ & QtdObjectFlags.nativeOwnership)) | |
57 { | |
58 // avoid deleting D object twice. | |
59 __flags_ |= QtdObjectFlags.dOwnership; | |
60 __deleteNative; | |
61 } | |
62 } | |
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 })); |