4 #ifndef DUNE_COMMON_FORLOOP_HH
5 #define DUNE_COMMON_FORLOOP_HH
19 template<
template<
class,
class >
class Operation,
template<
int >
class Value,
int first,
int last >
21 :
public Operation< Value< first >, GenericForLoop< Operation, Value, first+1, last > >
23 dune_static_assert( (first <= last),
"GenericForLoop: first > last" );
26 template<
template<
class,
class >
class Operation,
template<
int >
class Value,
int last >
28 :
public Value< last >
36 namespace ForLoopHelper
39 template<
class A,
class B >
55 template<
class T1,
class T2 >
56 static void apply ( T1 &p1, T2 &p2 )
62 template<
class T1,
class T2,
class T3 >
63 static void apply ( T1 &p1, T2 &p2, T3 &p3 )
65 A::apply( p1, p2, p3 );
66 B::apply( p1, p2, p3 );
69 template<
class T1,
class T2,
class T3,
class T4 >
70 static void apply ( T1 &p1, T2 &p2, T3 &p3, T4 &p4 )
72 A::apply( p1, p2, p3, p4 );
73 B::apply( p1, p2, p3, p4 );
76 template<
class T1,
class T2,
class T3,
class T4,
class T5 >
77 static void apply ( T1 &p1, T2 &p2, T3 &p3, T4 &p4, T5 &p5 )
79 A::apply( p1, p2, p3, p4, p5 );
80 B::apply( p1, p2, p3, p4, p5 );
83 template<
class T1,
class T2,
class T3,
class T4,
class T5,
class T6 >
84 static void apply ( T1 &p1, T2 &p2, T3 &p3, T4 &p4, T5 &p5, T6 &p6 )
86 A::apply( p1, p2, p3, p4, p5, p6 );
87 B::apply( p1, p2, p3, p4, p5, p6 );
90 template<
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
92 static void apply ( T1 &p1, T2 &p2, T3 &p3, T4 &p4, T5 &p5, T6 &p6,
95 A::apply( p1, p2, p3, p4, p5, p6, p7 );
96 B::apply( p1, p2, p3, p4, p5, p6, p7 );
99 template<
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
101 static void apply ( T1 &p1, T2 &p2, T3 &p3, T4 &p4, T5 &p5, T6 &p6,
104 A::apply( p1, p2, p3, p4, p5, p6, p7, p8 );
105 B::apply( p1, p2, p3, p4, p5, p6, p7, p8 );
108 template<
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
109 class T7,
class T8,
class T9 >
110 static void apply ( T1 &p1, T2 &p2, T3 &p3, T4 &p4, T5 &p5, T6 &p6,
111 T7 &p7, T8 &p8, T9 &p9 )
113 A::apply( p1, p2, p3, p4, p5, p6, p7, p8, p9 );
114 B::apply( p1, p2, p3, p4, p5, p6, p7, p8, p9 );
117 template<
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
118 class T7,
class T8,
class T9,
class T10 >
119 static void apply ( T1 &p1, T2 &p2, T3 &p3, T4 &p4, T5 &p5, T6 &p6,
120 T7 &p7, T8 &p8, T9 &p9, T10 &p10 )
122 A::apply( p1, p2, p3, p4, p5, p6, p7, p8, p9, p10 );
123 B::apply( p1, p2, p3, p4, p5, p6, p7, p8, p9, p10 );
126 template<
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
127 class T7,
class T8,
class T9,
class T10,
class T11 >
128 static void apply ( T1 &p1, T2 &p2, T3 &p3, T4 &p4, T5 &p5, T6 &p6,
129 T7 &p7, T8 &p8, T9 &p9, T10 &p10, T11 &p11 )
131 A::apply( p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11 );
132 B::apply( p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11 );
135 template<
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
136 class T7,
class T8,
class T9,
class T10,
class T11,
class T12 >
137 static void apply ( T1 &p1, T2 &p2, T3 &p3, T4 &p4, T5 &p5, T6 &p6,
138 T7 &p7, T8 &p8, T9 &p9, T10 &p10, T11 &p11,
141 A::apply( p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12 );
142 B::apply( p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12 );
145 template<
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
146 class T7,
class T8,
class T9,
class T10,
class T11,
class T12,
148 static void apply ( T1 &p1, T2 &p2, T3 &p3, T4 &p4, T5 &p5, T6 &p6,
149 T7 &p7, T8 &p8, T9 &p9, T10 &p10, T11 &p11,
152 A::apply( p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13 );
153 B::apply( p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13 );
220 template<
template<
int >
class Operation,
int first,
int last >
222 :
public GenericForLoop< ForLoopHelper::Apply, Operation, first, last >
224 dune_static_assert( (first <= last),
"ForLoop: first > last" );
229 #endif // #ifndef DUNE_COMMON_FORLOOP_HH