slowBsf.h
Go to the documentation of this file.
00001 /* slowBsf.h
00002  */
00003 #ifndef OSL_SLOWBSF_H
00004 #define OSL_SLOWBSF_H
00005 
00006 namespace osl
00007 {
00008   namespace misc
00009   {
00014   inline int slowbsf(unsigned int mask){
00015     assert(mask);
00016     int mask0= (static_cast<int>(-(mask&0xffff)))>>31;
00017     mask&=(mask0^0xffff0000);
00018     int mask1= (static_cast<int>(-(mask&0xff00ff)))>>31;
00019     mask&=(mask1^0xff00ff00);
00020     int mask2= (static_cast<int>(-(mask&0xf0f0f0f)))>>31;
00021     mask&=(mask2^0xf0f0f0f0);
00022     int mask3= (static_cast<int>(-(mask&0x33333333)))>>31;
00023     mask&=(mask3^0xcccccccc);
00024     int mask4= (static_cast<int>(-(mask&0x55555555)))>>31;
00025     return 31+(mask0&0xfffffff0)+(mask1&0xfffffff8)+
00026       (mask2&0xfffffffc)+(mask3&0xfffffffe)+mask4;
00027   }
00028 } // namespace misc
00029 } // namespace osl
00030 
00031 #endif /* OSL_SLOWBSF_H */
00032 // ;;; Local Variables:
00033 // ;;; mode:c++
00034 // ;;; c-basic-offset:2
00035 // ;;; End:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines