00001 00009 #ifndef NEXT_HH 00010 #define NEXT_HH 00011 #include"interval_mask.hh" 00012 #include"bin_info.hh" 00013 00014 namespace mask{ 00015 00022 template<unsigned int M> 00023 struct Next{ 00024 static const unsigned int i = BinInfo<M>::bloc0; //a 00025 static const unsigned int j = BinInfo<M>::bloc1; //a 00026 static const unsigned int tmp1 = M | (1<<(i+j)); //b 00027 static const unsigned int tmp2 = tmp1 ^ IntervalMask<i,j>::val; //c 00028 static const unsigned int val = tmp2 | IntervalMask<0,j-1>::val;//d 00029 }; 00031 template<> 00032 struct Next<0>{ 00033 static const unsigned int val = 0; 00034 }; 00035 00036 00037 }//namespace mask 00038 00039 #endif //NEXT_HH