Go to the documentation of this file.00001
00002
00003
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #ifndef _CHOMP_STRUCT_BITCOUNT_H_
00036 #define _CHOMP_STRUCT_BITCOUNT_H_
00037
00038 namespace chomp {
00039 namespace homology {
00040
00041
00042 extern unsigned char bitcounttable [];
00043
00044 inline int bitcountbyte (char n)
00045 {
00046 return bitcounttable [static_cast<unsigned char> (n)];
00047 }
00048
00049 inline int bitcount (int number)
00050 {
00051 if (!number)
00052 return 0;
00053 unsigned int n = static_cast<unsigned int> (number);
00054 if (n < 256)
00055 return bitcountbyte (static_cast<unsigned char> (n));
00056 int c = 0;
00057 while (n > 255)
00058 {
00059 if (n & 1)
00060 ++ c;
00061 n >>= 1;
00062 }
00063 return c + bitcountbyte (static_cast<unsigned char> (n));
00064 }
00065
00066
00067 }
00068 }
00069
00070 #endif // _CHOMP_STRUCT_BITCOUNT_H_
00071
00073