KDECore
ktypelist.h
Go to the documentation of this file.
00001 //krazy:excludeall=license (minor variation on MIT license) 00002 /* 00003 This work is derived from: 00004 ---- 00005 The Loki Library 00006 Copyright (c) 2001 by Andrei Alexandrescu //krazy:exclude=copyright 00007 This code accompanies the book: 00008 Alexandrescu, Andrei. "Modern C++ Design: Generic Programming and Design 00009 Patterns Applied". Copyright (c) 2001. Addison-Wesley. //krazy:exclude=copyright 00010 Permission to use, copy, modify, distribute and sell this software for any 00011 purpose is hereby granted without fee, provided that the above copyright 00012 notice appear in all copies and that both that copyright notice and this 00013 permission notice appear in supporting documentation. 00014 The author or Addison-Welsey Longman make no representations about the 00015 suitability of this software for any purpose. It is provided "as is" 00016 without express or implied warranty. 00017 ---- 00018 00019 Simon: Actually we could put a lot more of typelist stuff in here, like 00020 real list management (append, erase, ...) or other things, but 00021 for now I just added the basic typelist and a length template, 00022 to keep compile time at a minimum. If we really need more we can 00023 still add it :) 00024 Holger: Now we add a Template to create the TypeList 00025 */ 00026 00084 #ifndef ktypelist_h 00085 #define ktypelist_h 00086 00103 #define K_TYPELIST_1(T1) KTypeList<T1, ::KDE::NullType> 00104 00105 #define K_TYPELIST_2(T1, T2) KTypeList<T1, K_TYPELIST_1(T2) > 00106 00107 #define K_TYPELIST_3(T1, T2, T3) KTypeList<T1, K_TYPELIST_2(T2, T3) > 00108 00109 #define K_TYPELIST_4(T1, T2, T3, T4) \ 00110 KTypeList<T1, K_TYPELIST_3(T2, T3, T4) > 00111 00112 #define K_TYPELIST_5(T1, T2, T3, T4, T5) \ 00113 KTypeList<T1, K_TYPELIST_4(T2, T3, T4, T5) > 00114 00115 #define K_TYPELIST_6(T1, T2, T3, T4, T5, T6) \ 00116 KTypeList<T1, K_TYPELIST_5(T2, T3, T4, T5, T6) > 00117 00118 #define K_TYPELIST_7(T1, T2, T3, T4, T5, T6, T7) \ 00119 KTypeList<T1, K_TYPELIST_6(T2, T3, T4, T5, T6, T7) > 00120 00121 #define K_TYPELIST_8(T1, T2, T3, T4, T5, T6, T7, T8) \ 00122 KTypeList<T1, K_TYPELIST_7(T2, T3, T4, T5, T6, T7, T8) > 00123 00124 #define K_TYPELIST_9(T1, T2, T3, T4, T5, T6, T7, T8, T9) \ 00125 KTypeList<T1, K_TYPELIST_8(T2, T3, T4, T5, T6, T7, T8, T9) > 00126 00127 #define K_TYPELIST_10(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) \ 00128 KTypeList<T1, K_TYPELIST_9(T2, T3, T4, T5, T6, T7, T8, T9, T10) > 00129 00130 #define K_TYPELIST_11(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) \ 00131 KTypeList<T1, K_TYPELIST_10(T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) > 00132 00133 #define K_TYPELIST_12(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) \ 00134 KTypeList<T1, K_TYPELIST_11(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00135 T11, T12) > 00136 00137 #define K_TYPELIST_13(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) \ 00138 KTypeList<T1, K_TYPELIST_12(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00139 T11, T12, T13) > 00140 00141 #define K_TYPELIST_14(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00142 T11, T12, T13, T14) \ 00143 KTypeList<T1, K_TYPELIST_13(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00144 T11, T12, T13, T14) > 00145 00146 #define K_TYPELIST_15(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00147 T11, T12, T13, T14, T15) \ 00148 KTypeList<T1, K_TYPELIST_14(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00149 T11, T12, T13, T14, T15) > 00150 00151 #define K_TYPELIST_16(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00152 T11, T12, T13, T14, T15, T16) \ 00153 KTypeList<T1, K_TYPELIST_15(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00154 T11, T12, T13, T14, T15, T16) > 00155 00156 #define K_TYPELIST_17(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00157 T11, T12, T13, T14, T15, T16, T17) \ 00158 KTypeList<T1, K_TYPELIST_16(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00159 T11, T12, T13, T14, T15, T16, T17) > 00160 00161 #define K_TYPELIST_18(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00162 T11, T12, T13, T14, T15, T16, T17, T18) \ 00163 KTypeList<T1, K_TYPELIST_17(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00164 T11, T12, T13, T14, T15, T16, T17, T18) > 00165 00166 #define K_TYPELIST_19(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00167 T11, T12, T13, T14, T15, T16, T17, T18, T19) \ 00168 KTypeList<T1, K_TYPELIST_18(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00169 T11, T12, T13, T14, T15, T16, T17, T18, T19) > 00170 00171 #define K_TYPELIST_20(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00172 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) \ 00173 KTypeList<T1, K_TYPELIST_19(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00174 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) > 00175 00176 #define K_TYPELIST_21(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00177 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21) \ 00178 KTypeList<T1, K_TYPELIST_20(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00179 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21) > 00180 00181 #define K_TYPELIST_22(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00182 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22) \ 00183 KTypeList<T1, K_TYPELIST_21(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00184 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22) > 00185 00186 #define K_TYPELIST_23(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00187 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23) \ 00188 KTypeList<T1, K_TYPELIST_22(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00189 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23) > 00190 00191 #define K_TYPELIST_24(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00192 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24) \ 00193 KTypeList<T1, K_TYPELIST_23(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00194 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24) > 00195 00196 #define K_TYPELIST_25(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00197 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25) \ 00198 KTypeList<T1, K_TYPELIST_24(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00199 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00200 T21, T22, T23, T24, T25) > 00201 00202 #define K_TYPELIST_26(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00203 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00204 T21, T22, T23, T24, T25, T26) \ 00205 KTypeList<T1, K_TYPELIST_25(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00206 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00207 T21, T22, T23, T24, T25, T26) > 00208 00209 #define K_TYPELIST_27(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00210 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00211 T21, T22, T23, T24, T25, T26, T27) \ 00212 KTypeList<T1, K_TYPELIST_26(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00213 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00214 T21, T22, T23, T24, T25, T26, T27) > 00215 00216 #define K_TYPELIST_28(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00217 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00218 T21, T22, T23, T24, T25, T26, T27, T28) \ 00219 KTypeList<T1, K_TYPELIST_27(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00220 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00221 T21, T22, T23, T24, T25, T26, T27, T28) > 00222 00223 #define K_TYPELIST_29(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00224 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00225 T21, T22, T23, T24, T25, T26, T27, T28, T29) \ 00226 KTypeList<T1, K_TYPELIST_28(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00227 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00228 T21, T22, T23, T24, T25, T26, T27, T28, T29) > 00229 00230 #define K_TYPELIST_30(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00231 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00232 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30) \ 00233 KTypeList<T1, K_TYPELIST_29(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00234 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00235 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30) > 00236 00237 #define K_TYPELIST_31(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00238 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00239 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31) \ 00240 KTypeList<T1, K_TYPELIST_30(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00241 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00242 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31) > 00243 00244 #define K_TYPELIST_32(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00245 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00246 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32) \ 00247 KTypeList<T1, K_TYPELIST_31(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00248 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00249 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32) > 00250 00251 #define K_TYPELIST_33(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00252 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00253 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33) \ 00254 KTypeList<T1, K_TYPELIST_32(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00255 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00256 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33) > 00257 00258 #define K_TYPELIST_34(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00259 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00260 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34) \ 00261 KTypeList<T1, K_TYPELIST_33(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00262 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00263 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34) > 00264 00265 #define K_TYPELIST_35(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00266 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00267 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00268 T31, T32, T33, T34, T35) \ 00269 KTypeList<T1, K_TYPELIST_34(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00270 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00271 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00272 T31, T32, T33, T34, T35) > 00273 00274 #define K_TYPELIST_36(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00275 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00276 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00277 T31, T32, T33, T34, T35, T36) \ 00278 KTypeList<T1, K_TYPELIST_35(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00279 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00280 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00281 T31, T32, T33, T34, T35, T36) > 00282 00283 #define K_TYPELIST_37(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00284 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00285 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00286 T31, T32, T33, T34, T35, T36, T37) \ 00287 KTypeList<T1, K_TYPELIST_36(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00288 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00289 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00290 T31, T32, T33, T34, T35, T36, T37) > 00291 00292 #define K_TYPELIST_38(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00293 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00294 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00295 T31, T32, T33, T34, T35, T36, T37, T38) \ 00296 KTypeList<T1, K_TYPELIST_37(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00297 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00298 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00299 T31, T32, T33, T34, T35, T36, T37, T38) > 00300 00301 #define K_TYPELIST_39(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00302 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00303 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00304 T31, T32, T33, T34, T35, T36, T37, T38, T39) \ 00305 KTypeList<T1, K_TYPELIST_38(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00306 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00307 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00308 T31, T32, T33, T34, T35, T36, T37, T38, T39) > 00309 00310 #define K_TYPELIST_40(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00311 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00312 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00313 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40) \ 00314 KTypeList<T1, K_TYPELIST_39(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00315 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00316 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00317 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40) > 00318 00319 #define K_TYPELIST_41(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00320 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00321 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00322 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41) \ 00323 KTypeList<T1, K_TYPELIST_40(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00324 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00325 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00326 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41) > 00327 00328 #define K_TYPELIST_42(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00329 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00330 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00331 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42) \ 00332 KTypeList<T1, K_TYPELIST_41(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00333 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00334 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00335 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42) > 00336 00337 #define K_TYPELIST_43(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00338 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00339 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00340 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43) \ 00341 KTypeList<T1, K_TYPELIST_42(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00342 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00343 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00344 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43) > 00345 00346 #define K_TYPELIST_44(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00347 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00348 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00349 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44) \ 00350 KTypeList<T1, K_TYPELIST_43(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00351 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00352 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00353 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44) > 00354 00355 #define K_TYPELIST_45(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00356 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00357 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00358 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, \ 00359 T41, T42, T43, T44, T45) \ 00360 KTypeList<T1, K_TYPELIST_44(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00361 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00362 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00363 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, \ 00364 T41, T42, T43, T44, T45) > 00365 00366 #define K_TYPELIST_46(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00367 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00368 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00369 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, \ 00370 T41, T42, T43, T44, T45, T46) \ 00371 KTypeList<T1, K_TYPELIST_45(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00372 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00373 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00374 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, \ 00375 T41, T42, T43, T44, T45, T46) > 00376 00377 #define K_TYPELIST_47(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00378 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00379 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00380 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, \ 00381 T41, T42, T43, T44, T45, T46, T47) \ 00382 KTypeList<T1, K_TYPELIST_46(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00383 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00384 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00385 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, \ 00386 T41, T42, T43, T44, T45, T46, T47) > 00387 00388 #define K_TYPELIST_48(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00389 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00390 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00391 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, \ 00392 T41, T42, T43, T44, T45, T46, T47, T48) \ 00393 KTypeList<T1, K_TYPELIST_47(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00394 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00395 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00396 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, \ 00397 T41, T42, T43, T44, T45, T46, T47, T48) > 00398 00399 #define K_TYPELIST_49(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00400 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00401 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00402 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, \ 00403 T41, T42, T43, T44, T45, T46, T47, T48, T49) \ 00404 KTypeList<T1, K_TYPELIST_48(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00405 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00406 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00407 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, \ 00408 T41, T42, T43, T44, T45, T46, T47, T48, T49) > 00409 00410 #define K_TYPELIST_50(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00411 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00412 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00413 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, \ 00414 T41, T42, T43, T44, T45, T46, T47, T48, T49, T50) \ 00415 KTypeList<T1, K_TYPELIST_49(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00416 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00417 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00418 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, \ 00419 T41, T42, T43, T44, T45, T46, T47, T48, T49, T50) > 00420 00421 00422 namespace KDE 00423 { 00432 class NullType; 00433 } 00434 00452 template <class T, class U> 00453 struct KTypeList 00454 { 00456 typedef T Head; 00458 typedef U Tail; 00459 }; 00460 00461 // forward decl. 00485 template <class TList> struct KTypeListLength; 00486 00487 template <> 00488 struct KTypeListLength<KDE::NullType> 00489 { 00493 enum { Value = 0 }; 00494 }; 00495 00496 template <class T, class U> 00497 struct KTypeListLength< KTypeList<T, U> > 00498 { 00502 enum { Value = 1 + KTypeListLength<U>::Value }; 00503 }; 00504 00506 // class template IndexOf 00507 // Finds the index of a type in a typelist 00508 // Invocation (TList is a typelist and T is a type): 00509 // IndexOf<TList, T>::value 00510 // returns the position of T in TList, or NullType if T is not found in TList 00512 00535 template <class TList, class T> struct KTypeListIndexOf; 00536 00537 template <class T> 00538 struct KTypeListIndexOf<KDE::NullType, T> 00539 { 00540 enum { value = -1 }; 00541 }; 00542 00543 template <class T, class Tail> 00544 struct KTypeListIndexOf< KTypeList<T, Tail>, T > 00545 { 00546 enum { value = 0 }; 00547 }; 00548 00549 template <class Head, class Tail, class T> 00550 struct KTypeListIndexOf< KTypeList<Head, Tail>, T > 00551 { 00552 private: 00553 enum { temp = KTypeListIndexOf<Tail, T>::value }; 00554 public: 00555 enum { value = (temp == -1 ? -1 : 1 + temp) }; 00556 }; 00557 00558 00559 00577 template< 00578 typename T1 = KDE::NullType, typename T2 = KDE::NullType, typename T3 = KDE::NullType, 00579 typename T4 = KDE::NullType, typename T5 = KDE::NullType, typename T6 = KDE::NullType, 00580 typename T7 = KDE::NullType, typename T8 = KDE::NullType, typename T9 = KDE::NullType, 00581 typename T10 = KDE::NullType, typename T11 = KDE::NullType, typename T12 = KDE::NullType, 00582 typename T13 = KDE::NullType, typename T14 = KDE::NullType, typename T15 = KDE::NullType, 00583 typename T16 = KDE::NullType, typename T17 = KDE::NullType, typename T18 = KDE::NullType 00584 > 00585 struct KMakeTypeList{ 00586 private: 00587 typedef typename KMakeTypeList 00588 < 00589 T2 , T3 , T4 , 00590 T5 , T6 , T7 , 00591 T8 , T9 , T10, 00592 T11, T12, T13, 00593 T14, T15, T16, 00594 T17, T18 00595 >::Result TailResult; 00596 00597 public: 00602 typedef KTypeList<T1, TailResult> Result; 00603 }; 00604 00605 template< 00606 typename T2 , typename T3 , 00607 typename T4 , typename T5 , typename T6 , 00608 typename T7 , typename T8 , typename T9 , 00609 typename T10, typename T11, typename T12, 00610 typename T13, typename T14, typename T15, 00611 typename T16, typename T17, typename T18 00612 > 00613 struct KMakeTypeList<KDE::NullType, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18> 00614 { 00615 typedef KDE::NullType Result; 00616 }; 00617 00618 template<> 00619 struct KMakeTypeList<> 00620 { 00621 typedef KDE::NullType Result; 00622 }; 00623 00624 00625 #endif 00626
KDE 4.6 API Reference