Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-09 07:49:30

0001 // name=sbitmask ; gcc $name.cc -std=c++11 -lstdc++ -o /tmp/$name && /tmp/$name
0002 
0003 #include <iostream>
0004 #include <iomanip>
0005 #include <bitset>
0006 #include <string>
0007 #include <sstream>
0008 #include <cstdint>
0009 
0010 #include "sbitmask.h"
0011 
0012 template<typename T>
0013 std::string desc(int i, T mask)
0014 {
0015     std::stringstream ss ; 
0016     ss << " i " << std::setw(3) << i  ; 
0017 
0018     if( sizeof(T) == 4 )
0019     {
0020          ss << " mask " << std::setw(10) << mask
0021             << " (0x) " << std::hex << std::setw(10) << mask << std::dec
0022             << " (0b) " << std::bitset<32>(mask).to_string()   
0023             ;
0024     }
0025     else if( sizeof(T) == 8 )
0026     {
0027         ss << " mask " << std::setw(25) << mask
0028            << " (0x) " << std::hex << std::setw(16) << mask << std::dec
0029            << " (0b) " << std::bitset<64>(mask).to_string()   
0030            ;
0031     }
0032     std::string s = ss.str(); 
0033     return s ; 
0034 }
0035 
0036 template<typename T>
0037 std::string desc(bool dbg=false)
0038 {
0039     int n = sizeof(T)*CHAR_BIT ; 
0040     std::stringstream ss ; 
0041     ss << "desc_" << n << std::endl ; 
0042     for(int i=0 ; i <= n ; i++)
0043     {
0044         T mask = sbitmask<T>(i) ; 
0045         T mask0 = sbitmask_0<T>(i) ;  // all bits set, except i=0 which is all bits unset 
0046         T mask1 = sbitmask_1<T>(i) ; 
0047         T mask2 = sbitmask_2<T>(i) ; 
0048 
0049         if(dbg)
0050         { 
0051             ss << "mk " << desc<T>(i, mask ) << std::endl ; 
0052             ss << "m0 " << desc<T>(i, mask0 ) << std::endl ; 
0053             ss << "m1 " << desc<T>(i, mask1 ) << std::endl ; 
0054             ss << "m2 " << desc<T>(i, mask2 ) << std::endl ; 
0055             ss << std::endl ;  
0056         }
0057         else
0058         {
0059             ss << "mk " << desc<T>(i, mask ) << std::endl ; 
0060         }
0061     }
0062     std::string s = ss.str(); 
0063     return s ; 
0064 }
0065 
0066 int main(int argc, char** argv)
0067 {
0068     bool dbg=false ; 
0069     std::cout << desc<uint32_t>(dbg);   
0070     std::cout << desc<uint64_t>(dbg);   
0071     return 0 ; 
0072 }