00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef __VCG_DERIVATION_CHAIN
00025 #define __VCG_DERIVATION_CHAIN
00026
00027 namespace vcg{
00028
00029
00030
00031 template < typename T=int>
00032 class DefaultDeriver : public T {};
00033
00034 template <
00035 class Base,
00036 template <typename> class A>
00037 class Arity1: public A<Base > {
00038 };
00039
00040 template <
00041 class Base,
00042 template <typename> class A, template <typename> class B>
00043 class Arity2: public B<Arity1<Base, A> > {};
00044
00045 template <
00046 class Base,
00047 template <typename> class A, template <typename> class B,
00048 template <typename> class C >
00049 class Arity3: public C<Arity2<Base, A, B> > {};
00050
00051 template <
00052 class Base,
00053 template <typename> class A, template <typename> class B,
00054 template <typename> class C, template <typename> class D>
00055 class Arity4: public D<Arity3<Base, A, B, C> > {};
00056
00057 template <
00058 class Base,
00059 template <typename> class A, template <typename> class B,
00060 template <typename> class C, template <typename> class D,
00061 template <typename> class E >
00062 class Arity5: public E<Arity4<Base, A, B, C, D> > {};
00063
00064 template <
00065 class Base,
00066 template <typename> class A, template <typename> class B,
00067 template <typename> class C, template <typename> class D,
00068 template <typename> class E, template <typename> class F >
00069 class Arity6: public F<Arity5<Base, A, B, C, D, E> > {};
00070
00071 template <
00072 class Base,
00073 template <typename> class A, template <typename> class B,
00074 template <typename> class C, template <typename> class D,
00075 template <typename> class E, template <typename> class F,
00076 template <typename> class G>
00077 class Arity7: public G<Arity6<Base, A, B, C, D, E, F> > {};
00078
00079 template <
00080 class Base,
00081 template <typename> class A, template <typename> class B,
00082 template <typename> class C, template <typename> class D,
00083 template <typename> class E, template <typename> class F,
00084 template <typename> class G, template <typename> class H>
00085 class Arity8: public H<Arity7<Base, A, B, C, D, E, F, G > > {};
00086
00087 template <
00088 class Base,
00089 template <typename> class A, template <typename> class B,
00090 template <typename> class C, template <typename> class D,
00091 template <typename> class E, template <typename> class F,
00092 template <typename> class G, template <typename> class H,
00093 template <typename> class I>
00094 class Arity9: public I<Arity8<Base, A, B, C, D, E, F, G, H > > {};
00095
00096 template <
00097 class Base,
00098 template <typename> class A, template <typename> class B,
00099 template <typename> class C, template <typename> class D,
00100 template <typename> class E, template <typename> class F,
00101 template <typename> class G, template <typename> class H,
00102 template <typename> class I, template <typename> class J>
00103 class Arity10: public J<Arity9<Base, A, B, C, D, E, F, G, H, I > > {};
00104
00105 template <
00106 class Base,
00107 template <typename> class A, template <typename> class B,
00108 template <typename> class C, template <typename> class D,
00109 template <typename> class E, template <typename> class F,
00110 template <typename> class G, template <typename> class H,
00111 template <typename> class I, template <typename> class J,
00112 template <typename> class K>
00113 class Arity11: public K<Arity10<Base, A, B, C, D, E, F, G, H, I, J> > {};
00114
00115
00116 template <
00117 class Base,
00118 template <typename> class A, template <typename> class B,
00119 template <typename> class C, template <typename> class D,
00120 template <typename> class E, template <typename> class F,
00121 template <typename> class G, template <typename> class H,
00122 template <typename> class I, template <typename> class J,
00123 template <typename> class K, template <typename> class L>
00124 class Arity12: public L<Arity11<Base, A, B, C, D, E, F, G, H, I, J, K> > {};
00125
00126
00127
00128 template <
00129 class Base,
00130 class TA,
00131 template <typename,typename> class A >
00132 class MArity1: public A< Base, TA > {
00133 };
00134
00135 template <
00136 class Base,
00137 class TA,
00138 template <typename,typename> class A,
00139 class TB,
00140 template <typename,typename> class B>
00141 class MArity2: public B< MArity1<Base, TA, A>,TB > {};
00142
00143 template <
00144 class Base,
00145 class TA,
00146 template <typename,typename> class A,
00147 class TB,
00148 template <typename,typename> class B,
00149 class TC,
00150 template <typename,typename> class C >
00151 class MArity3: public C<MArity2<Base, TA,A,TB, B>,TC > {};
00152
00153 template <
00154 class Base,
00155 class TA,
00156 template <typename,typename> class A,
00157 class TB,
00158 template <typename,typename> class B,
00159 class TC,
00160 template <typename,typename> class C,
00161 class TD,
00162 template <typename,typename> class D>
00163 class MArity4: public D<MArity3<Base, TA,A,TB, B, TC,C>,TD > {};
00164
00165
00166
00167 class DumClass {};
00168
00169 }
00170 #endif