kdecore Library API Documentation

ktypelist.h

00001 /* 00002 This work is derived from: 00003 ---- 00004 The Loki Library 00005 Copyright (c) 2001 by Andrei Alexandrescu 00006 This code accompanies the book: 00007 Alexandrescu, Andrei. "Modern C++ Design: Generic Programming and Design 00008 Patterns Applied". Copyright (c) 2001. Addison-Wesley. 00009 Permission to use, copy, modify, distribute and sell this software for any 00010 purpose is hereby granted without fee, provided that the above copyright 00011 notice appear in all copies and that both that copyright notice and this 00012 permission notice appear in supporting documentation. 00013 The author or Addison-Welsey Longman make no representations about the 00014 suitability of this software for any purpose. It is provided "as is" 00015 without express or implied warranty. 00016 ---- 00017 00018 Simon: Actually we could put a lot more of typelist stuff in here, like 00019 real list management (append, erase, ...) or other things, but 00020 for now I just added the basic typelist and a length template, 00021 to keep compile time at a minimum. If we really need more we can 00022 still add it :) 00023 Holger: Now we add a Template to create the TypeList 00024 */ 00025 #ifndef __ktypelist_h__ 00026 #define __ktypelist_h__ 00027 00028 // Convenience macros for transforming flat type enumerations into the 00029 // recursive typelist structure 00030 00031 #define K_TYPELIST_1(T1) KTypeList<T1, ::KDE::NullType> 00032 00033 #define K_TYPELIST_2(T1, T2) KTypeList<T1, K_TYPELIST_1(T2) > 00034 00035 #define K_TYPELIST_3(T1, T2, T3) KTypeList<T1, K_TYPELIST_2(T2, T3) > 00036 00037 #define K_TYPELIST_4(T1, T2, T3, T4) \ 00038 KTypeList<T1, K_TYPELIST_3(T2, T3, T4) > 00039 00040 #define K_TYPELIST_5(T1, T2, T3, T4, T5) \ 00041 KTypeList<T1, K_TYPELIST_4(T2, T3, T4, T5) > 00042 00043 #define K_TYPELIST_6(T1, T2, T3, T4, T5, T6) \ 00044 KTypeList<T1, K_TYPELIST_5(T2, T3, T4, T5, T6) > 00045 00046 #define K_TYPELIST_7(T1, T2, T3, T4, T5, T6, T7) \ 00047 KTypeList<T1, K_TYPELIST_6(T2, T3, T4, T5, T6, T7) > 00048 00049 #define K_TYPELIST_8(T1, T2, T3, T4, T5, T6, T7, T8) \ 00050 KTypeList<T1, K_TYPELIST_7(T2, T3, T4, T5, T6, T7, T8) > 00051 00052 #define K_TYPELIST_9(T1, T2, T3, T4, T5, T6, T7, T8, T9) \ 00053 KTypeList<T1, K_TYPELIST_8(T2, T3, T4, T5, T6, T7, T8, T9) > 00054 00055 #define K_TYPELIST_10(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) \ 00056 KTypeList<T1, K_TYPELIST_9(T2, T3, T4, T5, T6, T7, T8, T9, T10) > 00057 00058 #define K_TYPELIST_11(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) \ 00059 KTypeList<T1, K_TYPELIST_10(T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) > 00060 00061 #define K_TYPELIST_12(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) \ 00062 KTypeList<T1, K_TYPELIST_11(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00063 T11, T12) > 00064 00065 #define K_TYPELIST_13(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) \ 00066 KTypeList<T1, K_TYPELIST_12(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00067 T11, T12, T13) > 00068 00069 #define K_TYPELIST_14(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00070 T11, T12, T13, T14) \ 00071 KTypeList<T1, K_TYPELIST_13(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00072 T11, T12, T13, T14) > 00073 00074 #define K_TYPELIST_15(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00075 T11, T12, T13, T14, T15) \ 00076 KTypeList<T1, K_TYPELIST_14(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00077 T11, T12, T13, T14, T15) > 00078 00079 #define K_TYPELIST_16(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00080 T11, T12, T13, T14, T15, T16) \ 00081 KTypeList<T1, K_TYPELIST_15(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00082 T11, T12, T13, T14, T15, T16) > 00083 00084 #define K_TYPELIST_17(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00085 T11, T12, T13, T14, T15, T16, T17) \ 00086 KTypeList<T1, K_TYPELIST_16(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00087 T11, T12, T13, T14, T15, T16, T17) > 00088 00089 #define K_TYPELIST_18(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00090 T11, T12, T13, T14, T15, T16, T17, T18) \ 00091 KTypeList<T1, K_TYPELIST_17(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00092 T11, T12, T13, T14, T15, T16, T17, T18) > 00093 00094 #define K_TYPELIST_19(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00095 T11, T12, T13, T14, T15, T16, T17, T18, T19) \ 00096 KTypeList<T1, K_TYPELIST_18(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00097 T11, T12, T13, T14, T15, T16, T17, T18, T19) > 00098 00099 #define K_TYPELIST_20(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00100 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) \ 00101 KTypeList<T1, K_TYPELIST_19(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00102 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20) > 00103 00104 #define K_TYPELIST_21(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00105 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21) \ 00106 KTypeList<T1, K_TYPELIST_20(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00107 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21) > 00108 00109 #define K_TYPELIST_22(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00110 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22) \ 00111 KTypeList<T1, K_TYPELIST_21(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00112 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22) > 00113 00114 #define K_TYPELIST_23(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00115 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23) \ 00116 KTypeList<T1, K_TYPELIST_22(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00117 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23) > 00118 00119 #define K_TYPELIST_24(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00120 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24) \ 00121 KTypeList<T1, K_TYPELIST_23(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00122 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24) > 00123 00124 #define K_TYPELIST_25(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00125 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25) \ 00126 KTypeList<T1, K_TYPELIST_24(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00127 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00128 T21, T22, T23, T24, T25) > 00129 00130 #define K_TYPELIST_26(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00131 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00132 T21, T22, T23, T24, T25, T26) \ 00133 KTypeList<T1, K_TYPELIST_25(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00134 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00135 T21, T22, T23, T24, T25, T26) > 00136 00137 #define K_TYPELIST_27(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00138 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00139 T21, T22, T23, T24, T25, T26, T27) \ 00140 KTypeList<T1, K_TYPELIST_26(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00141 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00142 T21, T22, T23, T24, T25, T26, T27) > 00143 00144 #define K_TYPELIST_28(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00145 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00146 T21, T22, T23, T24, T25, T26, T27, T28) \ 00147 KTypeList<T1, K_TYPELIST_27(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00148 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00149 T21, T22, T23, T24, T25, T26, T27, T28) > 00150 00151 #define K_TYPELIST_29(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00152 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00153 T21, T22, T23, T24, T25, T26, T27, T28, T29) \ 00154 KTypeList<T1, K_TYPELIST_28(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00155 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00156 T21, T22, T23, T24, T25, T26, T27, T28, T29) > 00157 00158 #define K_TYPELIST_30(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00159 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00160 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30) \ 00161 KTypeList<T1, K_TYPELIST_29(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00162 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00163 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30) > 00164 00165 #define K_TYPELIST_31(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00166 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00167 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31) \ 00168 KTypeList<T1, K_TYPELIST_30(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00169 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00170 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31) > 00171 00172 #define K_TYPELIST_32(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00173 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00174 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32) \ 00175 KTypeList<T1, K_TYPELIST_31(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00176 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00177 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32) > 00178 00179 #define K_TYPELIST_33(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00180 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00181 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33) \ 00182 KTypeList<T1, K_TYPELIST_32(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00183 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00184 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33) > 00185 00186 #define K_TYPELIST_34(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00187 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00188 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34) \ 00189 KTypeList<T1, K_TYPELIST_33(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00190 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00191 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34) > 00192 00193 #define K_TYPELIST_35(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00194 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00195 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00196 T31, T32, T33, T34, T35) \ 00197 KTypeList<T1, K_TYPELIST_34(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00198 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00199 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00200 T31, T32, T33, T34, T35) > 00201 00202 #define K_TYPELIST_36(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, T27, T28, T29, T30, \ 00205 T31, T32, T33, T34, T35, T36) \ 00206 KTypeList<T1, K_TYPELIST_35(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00207 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00208 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00209 T31, T32, T33, T34, T35, T36) > 00210 00211 #define K_TYPELIST_37(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00212 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00213 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00214 T31, T32, T33, T34, T35, T36, T37) \ 00215 KTypeList<T1, K_TYPELIST_36(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00216 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00217 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00218 T31, T32, T33, T34, T35, T36, T37) > 00219 00220 #define K_TYPELIST_38(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00221 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00222 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00223 T31, T32, T33, T34, T35, T36, T37, T38) \ 00224 KTypeList<T1, K_TYPELIST_37(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00225 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00226 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00227 T31, T32, T33, T34, T35, T36, T37, T38) > 00228 00229 #define K_TYPELIST_39(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00230 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00231 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00232 T31, T32, T33, T34, T35, T36, T37, T38, T39) \ 00233 KTypeList<T1, K_TYPELIST_38(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 T31, T32, T33, T34, T35, T36, T37, T38, T39) > 00237 00238 #define K_TYPELIST_40(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00239 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00240 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00241 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40) \ 00242 KTypeList<T1, K_TYPELIST_39(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00243 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00244 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00245 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40) > 00246 00247 #define K_TYPELIST_41(T1, 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, \ 00250 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41) \ 00251 KTypeList<T1, K_TYPELIST_40(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, \ 00254 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41) > 00255 00256 #define K_TYPELIST_42(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00257 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00258 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00259 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42) \ 00260 KTypeList<T1, K_TYPELIST_41(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00261 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00262 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00263 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42) > 00264 00265 #define K_TYPELIST_43(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, T36, T37, T38, T39, T40, T41, T42, T43) \ 00269 KTypeList<T1, K_TYPELIST_42(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, T36, T37, T38, T39, T40, T41, T42, T43) > 00273 00274 #define K_TYPELIST_44(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, T37, T38, T39, T40, T41, T42, T43, T44) \ 00278 KTypeList<T1, K_TYPELIST_43(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, T37, T38, T39, T40, T41, T42, T43, T44) > 00282 00283 #define K_TYPELIST_45(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, T38, T39, T40, \ 00287 T41, T42, T43, T44, T45) \ 00288 KTypeList<T1, K_TYPELIST_44(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00289 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00290 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00291 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, \ 00292 T41, T42, T43, T44, T45) > 00293 00294 #define K_TYPELIST_46(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00295 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00296 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00297 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, \ 00298 T41, T42, T43, T44, T45, T46) \ 00299 KTypeList<T1, K_TYPELIST_45(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00300 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00301 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00302 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, \ 00303 T41, T42, T43, T44, T45, T46) > 00304 00305 #define K_TYPELIST_47(T1, 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, T40, \ 00309 T41, T42, T43, T44, T45, T46, T47) \ 00310 KTypeList<T1, K_TYPELIST_46(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 T41, T42, T43, T44, T45, T46, T47) > 00315 00316 #define K_TYPELIST_48(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00317 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00318 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00319 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, \ 00320 T41, T42, T43, T44, T45, T46, T47, T48) \ 00321 KTypeList<T1, K_TYPELIST_47(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00322 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00323 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00324 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, \ 00325 T41, T42, T43, T44, T45, T46, T47, T48) > 00326 00327 #define K_TYPELIST_49(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00328 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00329 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00330 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, \ 00331 T41, T42, T43, T44, T45, T46, T47, T48, T49) \ 00332 KTypeList<T1, K_TYPELIST_48(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, \ 00336 T41, T42, T43, T44, T45, T46, T47, T48, T49) > 00337 00338 #define K_TYPELIST_50(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00339 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00340 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00341 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, \ 00342 T41, T42, T43, T44, T45, T46, T47, T48, T49, T50) \ 00343 KTypeList<T1, K_TYPELIST_49(T2, T3, T4, T5, T6, T7, T8, T9, T10, \ 00344 T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, \ 00345 T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, \ 00346 T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, \ 00347 T41, T42, T43, T44, T45, T46, T47, T48, T49, T50) > 00348 00349 namespace KDE 00350 { 00351 class NullType; 00352 } 00353 00361 template <class T, class U> 00362 struct KTypeList 00363 { 00365 typedef T Head; 00367 typedef U Tail; 00368 }; 00369 00370 // forward decl. 00371 template <class TList> struct KTypeListLength; 00372 00373 template <> 00374 struct KTypeListLength<KDE::NullType> 00375 { 00379 enum { Value = 0 }; 00380 }; 00381 00386 template <class T, class U> 00387 struct KTypeListLength< KTypeList<T, U> > 00388 { 00392 enum { Value = 1 + KTypeListLength<U>::Value }; 00393 }; 00394 00396 // class template IndexOf 00397 // Finds the index of a type in a typelist 00398 // Invocation (TList is a typelist and T is a type): 00399 // IndexOf<TList, T>::value 00400 // returns the position of T in TList, or NullType if T is not found in TList 00402 00403 template <class TList, class T> struct KTypeListIndexOf; 00404 00405 template <class T> 00406 struct KTypeListIndexOf<KDE::NullType, T> 00407 { 00408 enum { value = -1 }; 00409 }; 00410 00411 template <class T, class Tail> 00412 struct KTypeListIndexOf< KTypeList<T, Tail>, T > 00413 { 00414 enum { value = 0 }; 00415 }; 00416 00417 template <class Head, class Tail, class T> 00418 struct KTypeListIndexOf< KTypeList<Head, Tail>, T > 00419 { 00420 private: 00421 enum { temp = KTypeListIndexOf<Tail, T>::value }; 00422 public: 00423 enum { value = (temp == -1 ? -1 : 1 + temp) }; 00424 }; 00425 00426 00427 00441 template< 00442 typename T1 = KDE::NullType, typename T2 = KDE::NullType, typename T3 = KDE::NullType, 00443 typename T4 = KDE::NullType, typename T5 = KDE::NullType, typename T6 = KDE::NullType, 00444 typename T7 = KDE::NullType, typename T8 = KDE::NullType, typename T9 = KDE::NullType, 00445 typename T10 = KDE::NullType, typename T11 = KDE::NullType, typename T12 = KDE::NullType, 00446 typename T13 = KDE::NullType, typename T14 = KDE::NullType, typename T15 = KDE::NullType, 00447 typename T16 = KDE::NullType, typename T17 = KDE::NullType, typename T18 = KDE::NullType 00448 > 00449 struct KMakeTypeList{ 00450 private: 00451 typedef typename KMakeTypeList 00452 < 00453 T2 , T3 , T4 , 00454 T5 , T6 , T7 , 00455 T8 , T9 , T10, 00456 T11, T12, T13, 00457 T14, T15, T16, 00458 T17, T18 00459 >::Result TailResult; 00460 00461 public: 00462 typedef KTypeList<T1, TailResult> Result; 00463 }; 00464 00465 template<> 00466 struct KMakeTypeList<> 00467 { 00468 typedef KDE::NullType Result; 00469 }; 00470 00471 00472 #endif 00473
KDE Logo
This file is part of the documentation for kdecore Library Version 3.4.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Tue Apr 12 22:47:42 2005 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003