annotate d2/qtd/QtdObject.d @ 414:b2a803c73b89 default tip

Declare tabArray const.
author David Nadlinger <code@klickverbot.at>
date Fri, 06 May 2011 13:39:49 +0200
parents 7dddafad5a20
children
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 *
372
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
3 * Copyright: Copyright QtD Team, 2008-2010
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
4 * License: Boost License 1.0
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
5 * Authors: Max Samukha, Eldar Insafutdinov
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
6 *
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
7 */
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
8
344
96a75b1e5b26 project structure changes
Max Samukha <maxter@spambox.com>
parents: 288
diff changeset
9 module qtd.QtdObject;
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
10
372
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
11 import
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
12 core.memory,
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
13 std.bitmanip,
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
14 qtd.Core,
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
15 qtd.Debug,
382
1d56b2a2e10c Fixes to debugging stuff. Added size_t as primitive type to workaround Qwt build failure in debug
Max Samukha <maxter@spambox.com>
parents: 372
diff changeset
16 qtd.meta.Runtime;
372
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
17
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
18 /**
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
19 QtdObject initialization options.
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
20 */
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
21 enum QtdObjectInitFlags
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
22 {
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
23 none,
372
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
24 /// The wrapper is being created by user code.
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
25 createdByD = 0x1,
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
26 /// The wrapper is being created with native ownership.
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
27 nativeOwnership = 0x2,
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
28 /// The wrapper is allocated on stack.
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
29 onStack = 0x4
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
30 }
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
31
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
32 /**
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
33 */
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
34 enum QtdObjectOwnership
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
35 {
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
36 ///
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
37 native,
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
38 ///
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
39 d
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
40 }
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
41
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
42 /**
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
43 */
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
44 struct QtdObjectFlags
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
45 {
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
46 mixin (bitfields!(
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
47 bool, "nativeDeleteDisabled" , 1,
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
48 bool, "wrapperDeleteDisabled" , 1,
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
49 bool, "createdByD" , 1,
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
50 bool, "pinned" , 1,
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
51 bool, "isQObject" , 1,
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
52 bool, "polymorphic" , 1,
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
53 bool, "onStack" , 1,
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
54 int , "reserved" , 1
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
55 ));
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
56 }
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
57
372
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
58
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
59 /* package */ abstract class QtdObject
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
60 {
372
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
61 alias typeof(this) This;
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
62
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
63 private
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
64 {
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
65 void* _nativeId;
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
66 This _next;
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
67 This _prev;
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
68 __gshared static This _root;
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
69 }
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
70
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
71 protected QtdObjectFlags _flags;
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
72
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
73 /**
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
74 */
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
75 @property QtdObjectFlags qtdFlags()
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
76 {
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
77 return _flags;
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
78 }
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
79
372
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
80 /**
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
81 */
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
82 @property final const
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
83 {
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
84 void* qtdNativeId()
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
85 {
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
86 return cast(void*)_nativeId;
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
87 }
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
88
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
89 void qtdNativeId(void* v)
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
90 {
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
91 unqual(_nativeId) = v;
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
92 }
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
93 }
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
94
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
95 this(void* nativeId, QtdObjectInitFlags initFlags = QtdObjectInitFlags.none)
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
96 {
372
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
97 _nativeId = nativeId;
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
98
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
99 if (initFlags & QtdObjectInitFlags.createdByD)
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
100 _flags.createdByD = true;
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
101
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
102 if (initFlags & QtdObjectInitFlags.nativeOwnership)
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
103 qtdSetOwnership(QtdObjectOwnership.native);
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
104
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
105 if (initFlags & QtdObjectInitFlags.onStack)
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
106 {
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
107 //assert(!_flags.isQObject);
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
108 assert(!(initFlags & QtdObjectInitFlags.nativeOwnership));
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
109
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
110 _flags.nativeDeleteDisabled = true;
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
111 _flags.wrapperDeleteDisabled = true;
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
112 }
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
113
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
114 mixin(debugHandler("onWrapperConstructed", "this"));
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
115 }
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
116
372
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
117 /**
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
118 Disables GC for this object;
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
119 */
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
120 final void qtdPin() const
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
121 {
372
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
122 assert(!_flags.pinned);
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
123 //GC.addRoot(cast(void*)this);
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
124
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
125 auto obj = unqual(this);
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
126
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
127 obj._next = _root;
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
128 _root = obj;
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
129 if (_next)
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
130 obj._next._prev = obj;
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
131
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
132 obj._flags.pinned = true;
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
133 }
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
134
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
135 /**
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
136 Multiple wrappers for a single native object may exist.
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
137 This function is used to test that this and the other wrapper point
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
138 to the same native object (identity test).
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
139
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
140 Note that wrappers for QObject instances and instances of classes
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
141 derived from QObject are always unique, therefore
382
1d56b2a2e10c Fixes to debugging stuff. Added size_t as primitive type to workaround Qwt build failure in debug
Max Samukha <maxter@spambox.com>
parents: 372
diff changeset
142 the 'is' operator can be used instead of this function.
372
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
143 */
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
144 final bool isSame(const(QtdObject) other) const
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
145 {
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
146 return other !is null && (other is this || other.qtdNativeId == qtdNativeId);
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
147 }
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
148
372
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
149 /**
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
150 Enables GC for this object.
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
151 */
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
152 final void qtdUnpin() const
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
153 {
372
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
154 assert(_flags.pinned);
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
155 //GC.removeRoot(cast(void*)this);
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
156
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
157 auto obj = unqual(this);
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
158 if (_prev)
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
159 obj._prev._next = obj._next;
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
160 else
372
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
161 _root = obj._next;
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
162
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
163 if (_next)
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
164 obj._next._prev = obj._prev;
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
165
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
166 obj._flags.pinned = false;
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
167 }
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
168
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
169 /**
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
170 Sets the ownership of this object.
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
171 Setting the same ownership twice results in undefined behavior.
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
172 */
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
173 void qtdSetOwnership(QtdObjectOwnership own) const
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
174 {
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
175 if (_flags.isQObject)
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
176 return;
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
177
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
178 assert(!_flags.onStack);
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
179 auto obj = unqual(this);
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
180
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
181 if (own == QtdObjectOwnership.native)
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
182 {
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
183 if (_flags.polymorphic && _flags.createdByD)
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
184 qtdPin();
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
185 else
386
7dddafad5a20 shared stor fix
Max Samukha <maxter@spambox.com>
parents: 383
diff changeset
186 {
7dddafad5a20 shared stor fix
Max Samukha <maxter@spambox.com>
parents: 383
diff changeset
187 assert (!obj._flags.nativeDeleteDisabled);
372
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
188 obj._flags.nativeDeleteDisabled = true;
386
7dddafad5a20 shared stor fix
Max Samukha <maxter@spambox.com>
parents: 383
diff changeset
189 }
372
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
190 }
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
191 else if (own == QtdObjectOwnership.d)
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
192 {
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
193 if (_flags.polymorphic && _flags.createdByD)
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
194 qtdUnpin();
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
195 else
386
7dddafad5a20 shared stor fix
Max Samukha <maxter@spambox.com>
parents: 383
diff changeset
196 {
7dddafad5a20 shared stor fix
Max Samukha <maxter@spambox.com>
parents: 383
diff changeset
197 assert(obj._flags.nativeDeleteDisabled);
372
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
198 obj._flags.nativeDeleteDisabled = false;
386
7dddafad5a20 shared stor fix
Max Samukha <maxter@spambox.com>
parents: 383
diff changeset
199 }
372
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
200 }
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
201 else
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
202 assert(false);
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
203
382
1d56b2a2e10c Fixes to debugging stuff. Added size_t as primitive type to workaround Qwt build failure in debug
Max Samukha <maxter@spambox.com>
parents: 372
diff changeset
204 mixin(debugHandler("onObjectOwnershipChanged", "obj"));
386
7dddafad5a20 shared stor fix
Max Samukha <maxter@spambox.com>
parents: 383
diff changeset
205 }
7dddafad5a20 shared stor fix
Max Samukha <maxter@spambox.com>
parents: 383
diff changeset
206
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
207 // COMPILER BUG: 3206
372
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
208 protected void qtdDeleteNative()
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
209 {
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
210 assert(false);
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
211 }
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
212
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
213 ~this()
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
214 {
372
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
215 mixin(debugHandler("onWrapperDestruction", "this"));
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
216
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
217 if (!_flags.nativeDeleteDisabled)
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
218 {
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
219 // avoid deleting D object twice.
372
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
220 _flags.wrapperDeleteDisabled = true;
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
221 qtdDeleteNative;
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
222
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
223 mixin(debugHandler("onNativeDeleted", "this"));
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
224 }
372
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
225
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
226 if (_flags.pinned)
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
227 qtdUnpin();
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
228
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
229 mixin(debugHandler("onWrapperDestroyed", "this"));
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
230 }
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
231 }
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
232
386
7dddafad5a20 shared stor fix
Max Samukha <maxter@spambox.com>
parents: 383
diff changeset
233 /* package */ abstract class PolymorphicObject : QtdObject
7dddafad5a20 shared stor fix
Max Samukha <maxter@spambox.com>
parents: 383
diff changeset
234 {
7dddafad5a20 shared stor fix
Max Samukha <maxter@spambox.com>
parents: 383
diff changeset
235 this(void* nativeId, QtdObjectInitFlags initFlags = QtdObjectInitFlags.none)
7dddafad5a20 shared stor fix
Max Samukha <maxter@spambox.com>
parents: 383
diff changeset
236 {
7dddafad5a20 shared stor fix
Max Samukha <maxter@spambox.com>
parents: 383
diff changeset
237 _flags.polymorphic = true;
7dddafad5a20 shared stor fix
Max Samukha <maxter@spambox.com>
parents: 383
diff changeset
238 super(nativeId, initFlags);
7dddafad5a20 shared stor fix
Max Samukha <maxter@spambox.com>
parents: 383
diff changeset
239 }
7dddafad5a20 shared stor fix
Max Samukha <maxter@spambox.com>
parents: 383
diff changeset
240
7dddafad5a20 shared stor fix
Max Samukha <maxter@spambox.com>
parents: 383
diff changeset
241 abstract QtdMetaClass metaObject();
7dddafad5a20 shared stor fix
Max Samukha <maxter@spambox.com>
parents: 383
diff changeset
242 }
7dddafad5a20 shared stor fix
Max Samukha <maxter@spambox.com>
parents: 383
diff changeset
243
372
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
244 /**
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
245 Base class for polymorphic non-QObjects (TBD).
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
246 */
386
7dddafad5a20 shared stor fix
Max Samukha <maxter@spambox.com>
parents: 383
diff changeset
247 /* package */ abstract class NonQObject : PolymorphicObject
372
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
248 {
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
249 alias NonQObjectMetaClass Meta;
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
250
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
251 this(void* nativeId, QtdObjectInitFlags initFlags)
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
252 {
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
253 super(nativeId, initFlags);
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
254 }
386
7dddafad5a20 shared stor fix
Max Samukha <maxter@spambox.com>
parents: 383
diff changeset
255
7dddafad5a20 shared stor fix
Max Samukha <maxter@spambox.com>
parents: 383
diff changeset
256 override abstract Meta metaObject();
253
073b9153ed8a Rev. 264 done right.
maxter
parents:
diff changeset
257 }
354
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
258
372
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
259 /**
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
260 Base class for QtD meta-object classes.
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
261 */
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
262 abstract class QtdMetaClass : MetaClass
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
263 {
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
264 alias QtdObject function(void* nativeId, QtdObjectInitFlags initFlags) CreateWrapper;
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
265
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
266 private void* _nativeId;
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
267 protected CreateWrapper _createWrapper;
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
268
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
269 this() {}
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
270
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
271 /**
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
272 */
386
7dddafad5a20 shared stor fix
Max Samukha <maxter@spambox.com>
parents: 383
diff changeset
273 @property void* nativeId()
372
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
274 {
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
275 return _nativeId;
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
276 }
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
277
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
278 void construct(T)()
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
279 {
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
280 super.construct!T();
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
281 _nativeId = T.qtdNativeStaticMetaObject();
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
282 _createWrapper = &T.qtdCreateWrapper;
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
283 }
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
284
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
285 abstract QtdObject getWrapper(void* nativeId, QtdObjectInitFlags initFlags = QtdObjectInitFlags.none);
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
286 }
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
287
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
288 /**
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
289 Meta-object class for non-QObject polymorphic classes.
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
290 */
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
291 final class NonQObjectMetaClass : QtdMetaClass
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
292 {
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
293 alias typeof(this) This;
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
294 alias createImpl!This create;
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
295
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
296 @property override This next()
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
297 {
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
298 return static_cast!This(super.next);
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
299 }
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
300
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
301 @property override This firstDerived()
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
302 {
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
303 return static_cast!This(super.firstDerived);
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
304 }
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
305
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
306 override QtdObject getWrapper(void* nativeId, QtdObjectInitFlags initFlags)
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
307 {
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
308 // traverse the inheritance tree to find a matching meta-object.
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
309 // if the exact match is not found, return the closest base.
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
310 This lookUp(This mo)
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
311 {
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
312 if (!qtdTypeInfosEqual(mo.nativeId, nativeId))
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
313 {
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
314 for (auto mo2 = mo.firstDerived; mo2 !is null; mo2 = mo2.next)
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
315 {
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
316 mo2 = lookUp(mo2);
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
317 if (mo != mo2)
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
318 break;
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
319 }
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
320 }
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
321 return mo;
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
322 }
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
323
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
324 auto mo = lookUp(this);
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
325 return static_cast!NonQObject(mo._createWrapper(nativeId, initFlags));
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
326 }
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
327 }
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
328
386
7dddafad5a20 shared stor fix
Max Samukha <maxter@spambox.com>
parents: 383
diff changeset
329 extern(C) bool qtdTypeInfosEqual(void* info1, void* info2);
372
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
330
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
331 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
332 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
333 auto obj = cast(QtdObject)dId;
354
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 344
diff changeset
334
383
bd7f485e3573 More debug fixes
Max Samukha <maxter@spambox.com>
parents: 382
diff changeset
335 mixin(debugHandler("onDeletingWrapperFromNative", "obj"));
372
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
336
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
337 if (!obj._flags.wrapperDeleteDisabled)
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
338 {
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
339 // Avoid deleting native object twice
372
a032df77b6ab Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents: 357
diff changeset
340 obj._flags.nativeDeleteDisabled = true;
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
341 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
342 }
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
343 }));