forloop.hh

Go to the documentation of this file.
00001 #ifndef DUNE_COMMON_FORLOOP_HH
00002 #define DUNE_COMMON_FORLOOP_HH
00003 
00004 #include <dune/common/static_assert.hh>
00005 
00006 namespace Dune
00007 {
00046   template< template< int > class Operation, int first, int last >
00047   struct ForLoop
00048   {
00049     static void apply ()
00050     {
00051       Operation< first >::apply();
00052       ForLoop< Operation, first+1, last >::apply();
00053     }
00054 
00055     template< class T1 >
00056     static void apply ( T1 &p1 )
00057     {
00058       Operation< first >::apply( p1 );
00059       ForLoop< Operation, first+1, last >::apply( p1 );
00060     }
00061 
00062     template< class T1, class T2 >
00063     static void apply ( T1 &p1, T2 &p2 )
00064     {
00065       Operation< first >::apply( p1, p2 );
00066       ForLoop< Operation, first+1, last >::apply( p1, p2 );
00067     }
00068 
00069     template< class T1, class T2, class T3 >
00070     static void apply ( T1 &p1, T2 &p2, T3 &p3 )
00071     {
00072       Operation< first >::apply( p1, p2, p3 );
00073       ForLoop< Operation, first+1, last >::apply( p1, p2, p3 );
00074     }
00075 
00076     template< class T1, class T2, class T3, class T4 >
00077     static void apply ( T1 &p1, T2 &p2, T3 &p3, T4 &p4 )
00078     {
00079       Operation< first >::apply( p1, p2, p3, p4 );
00080       ForLoop< Operation, first+1, last >::apply( p1, p2, p3, p4 );
00081     }
00082 
00083     template< class T1, class T2, class T3, class T4, class T5 >
00084     static void apply ( T1 &p1, T2 &p2, T3 &p3, T4 &p4, T5 &p5 )
00085     {
00086       Operation< first >::apply( p1, p2, p3, p4, p5 );
00087       ForLoop< Operation, first+1, last >::apply( p1, p2, p3, p4, p5 );
00088     }
00089 
00090   private:
00091     dune_static_assert( (first <= last), "ForLoop: first > last" );
00092   };
00093 
00094   template< template< int > class Operation, int last >
00095   struct ForLoop< Operation, last, last >
00096   {
00097     static void apply ()
00098     {
00099       Operation< last >::apply();
00100     }
00101 
00102     template< class T1 >
00103     static void apply ( T1 &p1 )
00104     {
00105       Operation< last >::apply( p1 );
00106     }
00107 
00108     template< class T1, class T2 >
00109     static void apply ( T1 &p1, T2 &p2 )
00110     {
00111       Operation< last >::apply( p1, p2 );
00112     }
00113 
00114     template< class T1, class T2, class T3 >
00115     static void apply ( T1 &p1, T2 &p2, T3 &p3 )
00116     {
00117       Operation< last >::apply( p1, p2, p3 );
00118     }
00119 
00120     template< class T1, class T2, class T3, class T4 >
00121     static void apply ( T1 &p1, T2 &p2, T3 &p3, T4 &p4 )
00122     {
00123       Operation< last >::apply( p1, p2, p3, p4 );
00124     }
00125 
00126     template< class T1, class T2, class T3, class T4, class T5 >
00127     static void apply ( T1 &p1, T2 &p2, T3 &p3, T4 &p4, T5 &p5 )
00128     {
00129       Operation< last >::apply( p1, p2, p3, p4, p5 );
00130     }
00131   };
00132 
00133 }
00134 
00135 #endif
Generated on Mon Apr 26 10:45:21 2010 for dune-common by  doxygen 1.6.3