• 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 
349 namespace KDE
350 {
351  class NullType;
352 }
353 
361 template <class T, class U>
362 struct KTypeList
363 {
365  typedef T Head;
367  typedef U Tail;
368 };
369 
370 // forward decl.
371 template <class TList> struct KTypeListLength;
372 
373 template <>
374 struct KTypeListLength<KDE::NullType>
375 {
379  enum { Value = 0 };
380 };
381 
386 template <class T, class U>
387 struct 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 
403 template <class TList, class T> struct KTypeListIndexOf;
404 
405 template <class T>
406 struct KTypeListIndexOf<KDE::NullType, T>
407 {
408  enum { value = -1 };
409 };
410 
411 template <class T, class Tail>
412 struct KTypeListIndexOf< KTypeList<T, Tail>, T >
413 {
414  enum { value = 0 };
415 };
416 
417 template <class Head, class Tail, class T>
418 struct KTypeListIndexOf< KTypeList<Head, Tail>, T >
419 {
420 private:
421  enum { temp = KTypeListIndexOf<Tail, T>::value };
422 public:
423  enum { value = (temp == -1 ? -1 : 1 + temp) };
424 };
425 
426 
427 
441 template<
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  >
449 struct KMakeTypeList{
450 private:
451 typedef 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 
461 public:
462  typedef KTypeList<T1, TailResult> Result;
463 };
464 
465 template<>
466 struct KMakeTypeList<>
467 {
468  typedef KDE::NullType Result;
469 };
470 
471 
472 #endif
473 
KTypeList
The building block of typelists of any length.
Definition: ktypelist.h:362
KMakeTypeList
KMakeTypeList the prefered way to create a typelist for you.
Definition: ktypelist.h:449
KTypeList::Head
T Head
first element, a non-typelist type by convention
Definition: ktypelist.h:365
KDE
Namespace for general KDE functions.
Definition: ktypelist.h:349
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
  •     tdecore
  • tdeabc
  • tdecmshell
  • tdecore
  • tdefx
  • tdehtml
  • tdeinit
  • tdeio
  •   bookmarks
  •   httpfilter
  •   kpasswdserver
  •   kssl
  • tdeioslave
  •   http
  •   tdefile
  •   tdeio
  •   tdeioexec
  • tdemdi
  •   tdemdi
  • tdenewstuff
  • tdeparts
  • tdeprint
  • tderandr
  • tderesources
  • tdespell2
  • tdesu
  • tdeui
  • tdeunittest
  • tdeutils
  • tdewallet
Generated for tdecore by doxygen 1.8.8
This website is maintained by Timothy Pearson.