annotate qt/core/QTypeInfo.d @ 294:bb37b0ed94c9 signals

some more QList
author eldar
date Fri, 13 Nov 2009 20:42:51 +0000
parents 19498f420252
children 463563fc9e17
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
291
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
1 module qt.core.QTypeInfo;
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
2
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
3 //import qt.QGlobal;
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
4 //import qt.qtd.Atomic;
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
5
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
6 /*
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
7 The catch-all template.
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
8 */
292
19498f420252 more QList goodness
eldar
parents: 291
diff changeset
9 import std.traits;
19498f420252 more QList goodness
eldar
parents: 291
diff changeset
10
19498f420252 more QList goodness
eldar
parents: 291
diff changeset
11 import qt.qtd.MetaMarshall;
291
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
12
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
13 bool qIsDetached(T)(ref T) { return true; }
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
14
292
19498f420252 more QList goodness
eldar
parents: 291
diff changeset
15 template QTypeInfo(T)
291
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
16 {
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
17 public:
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
18 enum {
292
19498f420252 more QList goodness
eldar
parents: 291
diff changeset
19 isPointer = isPointer!T,
19498f420252 more QList goodness
eldar
parents: 291
diff changeset
20 isComplex = !isPointer,
19498f420252 more QList goodness
eldar
parents: 291
diff changeset
21 isStatic = !isPointer,
19498f420252 more QList goodness
eldar
parents: 291
diff changeset
22 isLarge = (T.sizeof > (void*).sizeof),
291
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
23 isDummy = false
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
24 }
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
25 }
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
26
292
19498f420252 more QList goodness
eldar
parents: 291
diff changeset
27 template QTypeInfo(T)
19498f420252 more QList goodness
eldar
parents: 291
diff changeset
28 if ( isQObjectType!T || isObjectType!T )
291
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
29 {
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
30 public:
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
31 enum {
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
32 isPointer = true,
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
33 isComplex = false,
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
34 isStatic = false,
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
35 isLarge = false,
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
36 isDummy = false
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
37 }
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
38 }
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
39
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
40
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
41 /*
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
42 Specialize a specific type with:
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
43
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
44 Q_DECLARE_TYPEINFO(type, flags);
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
45
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
46 where 'type' is the name of the type to specialize and 'flags' is
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
47 logically-OR'ed combination of the flags below.
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
48 */
292
19498f420252 more QList goodness
eldar
parents: 291
diff changeset
49
19498f420252 more QList goodness
eldar
parents: 291
diff changeset
50 /* presents in QGlobal
19498f420252 more QList goodness
eldar
parents: 291
diff changeset
51 enum { /* TYPEINFO flags
291
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
52 Q_COMPLEX_TYPE = 0,
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
53 Q_PRIMITIVE_TYPE = 0x1,
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
54 Q_STATIC_TYPE = 0,
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
55 Q_MOVABLE_TYPE = 0x2,
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
56 Q_DUMMY_TYPE = 0x4
292
19498f420252 more QList goodness
eldar
parents: 291
diff changeset
57 }
19498f420252 more QList goodness
eldar
parents: 291
diff changeset
58 */
291
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
59
292
19498f420252 more QList goodness
eldar
parents: 291
diff changeset
60 /*
19498f420252 more QList goodness
eldar
parents: 291
diff changeset
61 template QTypeInfo(alias FLAGS)
19498f420252 more QList goodness
eldar
parents: 291
diff changeset
62 {
19498f420252 more QList goodness
eldar
parents: 291
diff changeset
63 template QTypeInfo(TYPE)
19498f420252 more QList goodness
eldar
parents: 291
diff changeset
64 {
19498f420252 more QList goodness
eldar
parents: 291
diff changeset
65 public:
19498f420252 more QList goodness
eldar
parents: 291
diff changeset
66 enum {
19498f420252 more QList goodness
eldar
parents: 291
diff changeset
67 isComplex = (((FLAGS) & Q_PRIMITIVE_TYPE) == 0),
19498f420252 more QList goodness
eldar
parents: 291
diff changeset
68 isStatic = (((FLAGS) & (Q_MOVABLE_TYPE | Q_PRIMITIVE_TYPE)) == 0),
19498f420252 more QList goodness
eldar
parents: 291
diff changeset
69 isLarge = (TYPE.sizeof > (void*).sizeof),
19498f420252 more QList goodness
eldar
parents: 291
diff changeset
70 isPointer = false,
19498f420252 more QList goodness
eldar
parents: 291
diff changeset
71 isDummy = (((FLAGS) & Q_DUMMY_TYPE) != 0)
19498f420252 more QList goodness
eldar
parents: 291
diff changeset
72 }
19498f420252 more QList goodness
eldar
parents: 291
diff changeset
73 }
291
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
74 }
292
19498f420252 more QList goodness
eldar
parents: 291
diff changeset
75 */
291
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
76 /*
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
77 Specialize a shared type with:
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
78
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
79 Q_DECLARE_SHARED(type);
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
80
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
81 where 'type' is the name of the type to specialize. NOTE: shared
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
82 types must declare a 'bool isDetached(void) const;' member for this
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
83 to work.
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
84 */
292
19498f420252 more QList goodness
eldar
parents: 291
diff changeset
85 /*
291
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
86 #if defined Q_CC_MSVC && _MSC_VER < 1300
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
87 template <typename T>
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
88 inline void qSwap_helper(T &value1, T &value2, T*)
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
89 {
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
90 T t = value1;
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
91 value1 = value2;
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
92 value2 = t;
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
93 }
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
94 #define Q_DECLARE_SHARED(TYPE) \
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
95 template <> inline bool qIsDetached<TYPE>(TYPE &t) { return t.isDetached(); } \
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
96 template <> inline void qSwap_helper<TYPE>(TYPE &value1, TYPE &value2, TYPE*) \
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
97 { \
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
98 const TYPE::DataPtr t = value1.data_ptr(); \
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
99 value1.data_ptr() = value2.data_ptr(); \
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
100 value2.data_ptr() = t; \
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
101 }
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
102 #else
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
103 #define Q_DECLARE_SHARED(TYPE) \
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
104 template <> inline bool qIsDetached<TYPE>(TYPE &t) { return t.isDetached(); } \
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
105 template <typename T> inline void qSwap(T &, T &); \
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
106 template <> inline void qSwap<TYPE>(TYPE &value1, TYPE &value2) \
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
107 { \
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
108 const TYPE::DataPtr t = value1.data_ptr(); \
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
109 value1.data_ptr() = value2.data_ptr(); \
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
110 value2.data_ptr() = t; \
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
111 }
0d2094800bdb QList native implementation
eldar
parents:
diff changeset
112 #endif
292
19498f420252 more QList goodness
eldar
parents: 291
diff changeset
113 */