• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • tdecore
 

tdecore

  • tdecore
ktypelist.h
1/*
2 This work is derived from:
3 ----
4 The Loki Library
5 Copyright (c) 2001 by Andrei Alexandrescu
6 This code accompanies the book:
7 Alexandrescu, Andrei. "Modern C++ Design: Generic Programming and Design
8 Patterns Applied". Copyright (c) 2001. Addison-Wesley.
9 Permission to use, copy, modify, distribute and sell this software for any
10 purpose is hereby granted without fee, provided that the above copyright
11 notice appear in all copies and that both that copyright notice and this
12 permission notice appear in supporting documentation.
13 The author or Addison-Welsey Longman make no representations about the
14 suitability of this software for any purpose. It is provided "as is"
15 without express or implied warranty.
16 ----
17
18 Simon: Actually we could put a lot more of typelist stuff in here, like
19 real list management (append, erase, ...) or other things, but
20 for now I just added the basic typelist and a length template,
21 to keep compile time at a minimum. If we really need more we can
22 still add it :)
23 Holger: Now we add a Template to create the TypeList
24*/
25#ifndef __ktypelist_h__
26#define __ktypelist_h__
27
28// Convenience macros for transforming flat type enumerations into the
29// recursive typelist structure
30
31#define K_TYPELIST_1(T1) KTypeList<T1, ::KDE::NullType>
32
33#define K_TYPELIST_2(T1, T2) KTypeList<T1, K_TYPELIST_1(T2) >
34
35#define K_TYPELIST_3(T1, T2, T3) KTypeList<T1, K_TYPELIST_2(T2, T3) >
36
37#define K_TYPELIST_4(T1, T2, T3, T4) \
38 KTypeList<T1, K_TYPELIST_3(T2, T3, T4) >
39
40#define K_TYPELIST_5(T1, T2, T3, T4, T5) \
41 KTypeList<T1, K_TYPELIST_4(T2, T3, T4, T5) >
42
43#define K_TYPELIST_6(T1, T2, T3, T4, T5, T6) \
44 KTypeList<T1, K_TYPELIST_5(T2, T3, T4, T5, T6) >
45
46#define K_TYPELIST_7(T1, T2, T3, T4, T5, T6, T7) \
47 KTypeList<T1, K_TYPELIST_6(T2, T3, T4, T5, T6, T7) >
48
49#define K_TYPELIST_8(T1, T2, T3, T4, T5, T6, T7, T8) \
50 KTypeList<T1, K_TYPELIST_7(T2, T3, T4, T5, T6, T7, T8) >
51
52#define K_TYPELIST_9(T1, T2, T3, T4, T5, T6, T7, T8, T9) \
53 KTypeList<T1, K_TYPELIST_8(T2, T3, T4, T5, T6, T7, T8, T9) >
54
55#define K_TYPELIST_10(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) \
56 KTypeList<T1, K_TYPELIST_9(T2, T3, T4, T5, T6, T7, T8, T9, T10) >
57
58#define K_TYPELIST_11(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) \
59 KTypeList<T1, K_TYPELIST_10(T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) >
60
61#define K_TYPELIST_12(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) \
62 KTypeList<T1, K_TYPELIST_11(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
63 T11, T12) >
64
65#define K_TYPELIST_13(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) \
66 KTypeList<T1, K_TYPELIST_12(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
67 T11, T12, T13) >
68
69#define K_TYPELIST_14(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
70 T11, T12, T13, T14) \
71 KTypeList<T1, K_TYPELIST_13(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
72 T11, T12, T13, T14) >
73
74#define K_TYPELIST_15(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
75 T11, T12, T13, T14, T15) \
76 KTypeList<T1, K_TYPELIST_14(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
77 T11, T12, T13, T14, T15) >
78
79#define K_TYPELIST_16(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
80 T11, T12, T13, T14, T15, T16) \
81 KTypeList<T1, K_TYPELIST_15(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
82 T11, T12, T13, T14, T15, T16) >
83
84#define K_TYPELIST_17(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
85 T11, T12, T13, T14, T15, T16, T17) \
86 KTypeList<T1, K_TYPELIST_16(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
87 T11, T12, T13, T14, T15, T16, T17) >
88
89#define K_TYPELIST_18(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
90 T11, T12, T13, T14, T15, T16, T17, T18) \
91 KTypeList<T1, K_TYPELIST_17(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
92 T11, T12, T13, T14, T15, T16, T17, T18) >
93
94#define K_TYPELIST_19(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
95 T11, T12, T13, T14, T15, T16, T17, T18, T19) \
96 KTypeList<T1, K_TYPELIST_18(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
97 T11, T12, T13, T14, T15, T16, T17, T18, T19) >
98
99#define K_TYPELIST_20(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
100 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) \
101 KTypeList<T1, K_TYPELIST_19(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
102 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) >
103
104#define K_TYPELIST_21(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
105 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21) \
106 KTypeList<T1, K_TYPELIST_20(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
107 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21) >
108
109#define K_TYPELIST_22(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
110 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22) \
111 KTypeList<T1, K_TYPELIST_21(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
112 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22) >
113
114#define K_TYPELIST_23(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
115 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23) \
116 KTypeList<T1, K_TYPELIST_22(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
117 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23) >
118
119#define K_TYPELIST_24(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
120 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24) \
121 KTypeList<T1, K_TYPELIST_23(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
122 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24) >
123
124#define K_TYPELIST_25(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
125 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25) \
126 KTypeList<T1, K_TYPELIST_24(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
127 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
128 T21, T22, T23, T24, T25) >
129
130#define K_TYPELIST_26(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
131 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
132 T21, T22, T23, T24, T25, T26) \
133 KTypeList<T1, K_TYPELIST_25(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
134 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
135 T21, T22, T23, T24, T25, T26) >
136
137#define K_TYPELIST_27(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
138 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
139 T21, T22, T23, T24, T25, T26, T27) \
140 KTypeList<T1, K_TYPELIST_26(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
141 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
142 T21, T22, T23, T24, T25, T26, T27) >
143
144#define K_TYPELIST_28(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
145 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
146 T21, T22, T23, T24, T25, T26, T27, T28) \
147 KTypeList<T1, K_TYPELIST_27(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
148 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
149 T21, T22, T23, T24, T25, T26, T27, T28) >
150
151#define K_TYPELIST_29(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
152 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
153 T21, T22, T23, T24, T25, T26, T27, T28, T29) \
154 KTypeList<T1, K_TYPELIST_28(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
155 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
156 T21, T22, T23, T24, T25, T26, T27, T28, T29) >
157
158#define K_TYPELIST_30(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
159 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
160 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30) \
161 KTypeList<T1, K_TYPELIST_29(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
162 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
163 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30) >
164
165#define K_TYPELIST_31(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
166 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
167 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31) \
168 KTypeList<T1, K_TYPELIST_30(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
169 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
170 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31) >
171
172#define K_TYPELIST_32(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
173 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
174 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32) \
175 KTypeList<T1, K_TYPELIST_31(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
176 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
177 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32) >
178
179#define K_TYPELIST_33(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
180 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
181 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33) \
182 KTypeList<T1, K_TYPELIST_32(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
183 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
184 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33) >
185
186#define K_TYPELIST_34(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
187 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
188 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34) \
189 KTypeList<T1, K_TYPELIST_33(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
190 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
191 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34) >
192
193#define K_TYPELIST_35(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
194 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
195 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \
196 T31, T32, T33, T34, T35) \
197 KTypeList<T1, K_TYPELIST_34(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
198 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
199 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \
200 T31, T32, T33, T34, T35) >
201
202#define K_TYPELIST_36(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
203 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
204 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \
205 T31, T32, T33, T34, T35, T36) \
206 KTypeList<T1, K_TYPELIST_35(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
207 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
208 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \
209 T31, T32, T33, T34, T35, T36) >
210
211#define K_TYPELIST_37(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
212 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
213 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \
214 T31, T32, T33, T34, T35, T36, T37) \
215 KTypeList<T1, K_TYPELIST_36(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
216 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
217 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \
218 T31, T32, T33, T34, T35, T36, T37) >
219
220#define K_TYPELIST_38(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
221 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
222 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \
223 T31, T32, T33, T34, T35, T36, T37, T38) \
224 KTypeList<T1, K_TYPELIST_37(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
225 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
226 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \
227 T31, T32, T33, T34, T35, T36, T37, T38) >
228
229#define K_TYPELIST_39(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
230 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
231 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \
232 T31, T32, T33, T34, T35, T36, T37, T38, T39) \
233 KTypeList<T1, K_TYPELIST_38(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
234 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
235 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \
236 T31, T32, T33, T34, T35, T36, T37, T38, T39) >
237
238#define K_TYPELIST_40(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
239 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
240 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \
241 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40) \
242 KTypeList<T1, K_TYPELIST_39(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
243 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
244 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \
245 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40) >
246
247#define K_TYPELIST_41(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
248 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
249 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \
250 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41) \
251 KTypeList<T1, K_TYPELIST_40(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
252 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
253 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \
254 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41) >
255
256#define K_TYPELIST_42(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
257 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
258 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \
259 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42) \
260 KTypeList<T1, K_TYPELIST_41(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
261 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
262 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \
263 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42) >
264
265#define K_TYPELIST_43(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
266 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
267 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \
268 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43) \
269 KTypeList<T1, K_TYPELIST_42(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
270 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
271 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \
272 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43) >
273
274#define K_TYPELIST_44(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
275 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
276 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \
277 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44) \
278 KTypeList<T1, K_TYPELIST_43(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
279 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
280 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \
281 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44) >
282
283#define K_TYPELIST_45(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
284 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
285 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \
286 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, \
287 T41, T42, T43, T44, T45) \
288 KTypeList<T1, K_TYPELIST_44(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
289 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
290 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \
291 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, \
292 T41, T42, T43, T44, T45) >
293
294#define K_TYPELIST_46(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
295 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
296 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \
297 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, \
298 T41, T42, T43, T44, T45, T46) \
299 KTypeList<T1, K_TYPELIST_45(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
300 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
301 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \
302 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, \
303 T41, T42, T43, T44, T45, T46) >
304
305#define K_TYPELIST_47(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
306 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
307 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \
308 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, \
309 T41, T42, T43, T44, T45, T46, T47) \
310 KTypeList<T1, K_TYPELIST_46(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
311 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
312 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \
313 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, \
314 T41, T42, T43, T44, T45, T46, T47) >
315
316#define K_TYPELIST_48(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
317 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
318 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \
319 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, \
320 T41, T42, T43, T44, T45, T46, T47, T48) \
321 KTypeList<T1, K_TYPELIST_47(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
322 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
323 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \
324 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, \
325 T41, T42, T43, T44, T45, T46, T47, T48) >
326
327#define K_TYPELIST_49(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
328 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
329 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \
330 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, \
331 T41, T42, T43, T44, T45, T46, T47, T48, T49) \
332 KTypeList<T1, K_TYPELIST_48(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
333 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
334 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \
335 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, \
336 T41, T42, T43, T44, T45, T46, T47, T48, T49) >
337
338#define K_TYPELIST_50(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \
339 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
340 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \
341 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, \
342 T41, T42, T43, T44, T45, T46, T47, T48, T49, T50) \
343 KTypeList<T1, K_TYPELIST_49(T2, T3, T4, T5, T6, T7, T8, T9, T10, \
344 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \
345 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \
346 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, \
347 T41, T42, T43, T44, T45, T46, T47, T48, T49, T50) >
348
349namespace KDE
350{
351 class NullType;
352}
353
361template <class T, class U>
362struct KTypeList
363{
365 typedef T Head;
367 typedef U Tail;
368};
369
370// forward decl.
371template <class TList> struct KTypeListLength;
372
373template <>
374struct KTypeListLength<KDE::NullType>
375{
379 enum { Value = 0 };
380};
381
386template <class T, class U>
387struct KTypeListLength< KTypeList<T, U> >
388{
392 enum { Value = 1 + KTypeListLength<U>::Value };
393};
394
396// class template IndexOf
397// Finds the index of a type in a typelist
398// Invocation (TList is a typelist and T is a type):
399// IndexOf<TList, T>::value
400// returns the position of T in TList, or NullType if T is not found in TList
402
403template <class TList, class T> struct KTypeListIndexOf;
404
405template <class T>
406struct KTypeListIndexOf<KDE::NullType, T>
407{
408 enum { value = -1 };
409};
410
411template <class T, class Tail>
412struct KTypeListIndexOf< KTypeList<T, Tail>, T >
413{
414 enum { value = 0 };
415};
416
417template <class Head, class Tail, class T>
418struct KTypeListIndexOf< KTypeList<Head, Tail>, T >
419{
420private:
421 enum { temp = KTypeListIndexOf<Tail, T>::value };
422public:
423 enum { value = (temp == -1 ? -1 : 1 + temp) };
424};
425
426
427
441template<
442 typename T1 = KDE::NullType, typename T2 = KDE::NullType, typename T3 = KDE::NullType,
443 typename T4 = KDE::NullType, typename T5 = KDE::NullType, typename T6 = KDE::NullType,
444 typename T7 = KDE::NullType, typename T8 = KDE::NullType, typename T9 = KDE::NullType,
445 typename T10 = KDE::NullType, typename T11 = KDE::NullType, typename T12 = KDE::NullType,
446 typename T13 = KDE::NullType, typename T14 = KDE::NullType, typename T15 = KDE::NullType,
447 typename T16 = KDE::NullType, typename T17 = KDE::NullType, typename T18 = KDE::NullType
448 >
449struct KMakeTypeList{
450private:
451typedef typename KMakeTypeList
452<
453 T2 , T3 , T4 ,
454 T5 , T6 , T7 ,
455 T8 , T9 , T10,
456 T11, T12, T13,
457 T14, T15, T16,
458 T17, T18
459>::Result TailResult;
460
461public:
462 typedef KTypeList<T1, TailResult> Result;
463};
464
465template<>
466struct KMakeTypeList<>
467{
468 typedef KDE::NullType Result;
469};
470
471
472#endif
473
KDE
Namespace for general KDE functions.
Definition: ktypelist.h:350
KMakeTypeList
KMakeTypeList the prefered way to create a typelist for you.
Definition: ktypelist.h:449
KTypeList
The building block of typelists of any length.
Definition: ktypelist.h:363
KTypeList::Head
T Head
first element, a non-typelist type by convention
Definition: ktypelist.h:365
KTypeList::Tail
U Tail
second element, can be another typelist
Definition: ktypelist.h:367

tdecore

Skip menu "tdecore"
  • Main Page
  • Modules
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

tdecore

Skip menu "tdecore"
  • arts
  • dcop
  • dnssd
  • interfaces
  •   kspeech
  •     interface
  •     library
  •   tdetexteditor
  • kate
  • kded
  • kdoctools
  • kimgio
  • kjs
  • libtdemid
  • libtdescreensaver
  • tdeabc
  • tdecmshell
  • tdecore
  • tdefx
  • tdehtml
  • tdeinit
  • tdeio
  •   bookmarks
  •   httpfilter
  •   kpasswdserver
  •   kssl
  •   tdefile
  •   tdeio
  •   tdeioexec
  • tdeioslave
  •   http
  • tdemdi
  •   tdemdi
  • tdenewstuff
  • tdeparts
  • tdeprint
  • tderandr
  • tderesources
  • tdespell2
  • tdesu
  • tdeui
  • tdeunittest
  • tdeutils
  • tdewallet
Generated for tdecore by doxygen 1.9.4
This website is maintained by Timothy Pearson.