00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00027 #ifndef util_IndexList_h
00028 #define util_IndexList_h
00029
00030 #include <util/Basics.hpp>
00031
00032 namespace phdmesh {
00033
00037 template< unsigned I0 = 0 , unsigned I1 = 0 ,
00038 unsigned I2 = 0 , unsigned I3 = 0 ,
00039 unsigned I4 = 0 , unsigned I5 = 0 ,
00040 unsigned I6 = 0 , unsigned I7 = 0 ,
00041 unsigned I8 = 0 , unsigned I9 = 0 ,
00042 unsigned I10 = 0 , unsigned I11 = 0 ,
00043 unsigned I12 = 0 , unsigned I13 = 0 ,
00044 unsigned I14 = 0 , unsigned I15 = 0 ,
00045 unsigned I16 = 0 , unsigned I17 = 0 ,
00046 unsigned I18 = 0 , unsigned I19 = 0 ,
00047 unsigned I20 = 0 , unsigned I21 = 0 ,
00048 unsigned I22 = 0 , unsigned I23 = 0 ,
00049 unsigned I24 = 0 , unsigned I25 = 0 ,
00050 unsigned I26 = 0 , unsigned I27 = 0 ,
00051 unsigned I28 = 0 , unsigned I29 = 0 ,
00052 unsigned I30 = 0 , unsigned I31 = 0 >
00053 struct IndexList {};
00054
00059 template< class List , unsigned J > struct IndexListAt {};
00060
00061 #define INDEX_LIST_AT_SPECIALIZATION( J , K ) \
00062 template< unsigned I0 , unsigned I1 , \
00063 unsigned I2 , unsigned I3 , \
00064 unsigned I4 , unsigned I5 , \
00065 unsigned I6 , unsigned I7 , \
00066 unsigned I8 , unsigned I9 , \
00067 unsigned I10 , unsigned I11 , \
00068 unsigned I12 , unsigned I13 , \
00069 unsigned I14 , unsigned I15 , \
00070 unsigned I16 , unsigned I17 , \
00071 unsigned I18 , unsigned I19 , \
00072 unsigned I20 , unsigned I21 , \
00073 unsigned I22 , unsigned I23 , \
00074 unsigned I24 , unsigned I25 , \
00075 unsigned I26 , unsigned I27 , \
00076 unsigned I28 , unsigned I29 , \
00077 unsigned I30 , unsigned I31 > \
00078 struct IndexListAt< \
00079 IndexList< I0 , I1 , I2 , I3 , I4 , I5 , I6 , I7 , \
00080 I8 , I9 , I10 , I11 , I12 , I13 , I14 , I15 , \
00081 I16 , I17 , I18 , I19 , I20 , I21 , I22 , I23 , \
00082 I24 , I25 , I26 , I27 , I28 , I29 , I30 , I31 > , J > \
00083 { enum { value = K }; };
00084
00085 INDEX_LIST_AT_SPECIALIZATION( 0 , I0 )
00086 INDEX_LIST_AT_SPECIALIZATION( 1 , I1 )
00087 INDEX_LIST_AT_SPECIALIZATION( 2 , I2 )
00088 INDEX_LIST_AT_SPECIALIZATION( 3 , I3 )
00089 INDEX_LIST_AT_SPECIALIZATION( 4 , I4 )
00090 INDEX_LIST_AT_SPECIALIZATION( 5 , I5 )
00091 INDEX_LIST_AT_SPECIALIZATION( 6 , I6 )
00092 INDEX_LIST_AT_SPECIALIZATION( 7 , I7 )
00093 INDEX_LIST_AT_SPECIALIZATION( 8 , I8 )
00094 INDEX_LIST_AT_SPECIALIZATION( 9 , I9 )
00095 INDEX_LIST_AT_SPECIALIZATION( 10 , I10 )
00096 INDEX_LIST_AT_SPECIALIZATION( 11 , I11 )
00097 INDEX_LIST_AT_SPECIALIZATION( 12 , I12 )
00098 INDEX_LIST_AT_SPECIALIZATION( 13 , I13 )
00099 INDEX_LIST_AT_SPECIALIZATION( 14 , I14 )
00100 INDEX_LIST_AT_SPECIALIZATION( 15 , I15 )
00101 INDEX_LIST_AT_SPECIALIZATION( 16 , I16 )
00102 INDEX_LIST_AT_SPECIALIZATION( 17 , I17 )
00103 INDEX_LIST_AT_SPECIALIZATION( 18 , I18 )
00104 INDEX_LIST_AT_SPECIALIZATION( 19 , I19 )
00105 INDEX_LIST_AT_SPECIALIZATION( 20 , I20 )
00106 INDEX_LIST_AT_SPECIALIZATION( 21 , I21 )
00107 INDEX_LIST_AT_SPECIALIZATION( 22 , I22 )
00108 INDEX_LIST_AT_SPECIALIZATION( 23 , I23 )
00109 INDEX_LIST_AT_SPECIALIZATION( 24 , I24 )
00110 INDEX_LIST_AT_SPECIALIZATION( 25 , I25 )
00111 INDEX_LIST_AT_SPECIALIZATION( 26 , I26 )
00112 INDEX_LIST_AT_SPECIALIZATION( 27 , I27 )
00113 INDEX_LIST_AT_SPECIALIZATION( 28 , I28 )
00114 INDEX_LIST_AT_SPECIALIZATION( 29 , I29 )
00115 INDEX_LIST_AT_SPECIALIZATION( 30 , I30 )
00116 INDEX_LIST_AT_SPECIALIZATION( 31 , I31 )
00117
00118 #undef INDEX_LIST_AT_SPECIALIZATION
00119
00120 }
00121
00122 #endif
00123