annotate qt/core/QTypeInfo.d @ 292:19498f420252 signals

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