X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=libcds%2Fsrc%2Fbasics.h;h=85bfe22e6f3b0702bcd4fc170004b0a0b79322cc;hb=a75155efc2ed07c1907ef017360bd719a47f9c06;hp=4e00cae3ab5bbb8698d97d91eb466c9c2a8beea5;hpb=f1065079810ebe519367f7399edb68307c789b41;p=SXSI%2FXMLTree.git diff --git a/libcds/src/basics.h b/libcds/src/basics.h index 4e00cae..85bfe22 100644 --- a/libcds/src/basics.h +++ b/libcds/src/basics.h @@ -32,7 +32,7 @@ #include #include #include -using namespace std; +////using namespace std; #include #include @@ -233,6 +233,20 @@ inline uint popcount(int x){ return __popcount_tab[(x >> 0) & 0xff] + __popcount_tab[(x >> 8) & 0xff] + __popcount_tab[(x >> 16) & 0xff] + __popcount_tab[(x >> 24) & 0xff]; } +inline unsigned int +fast_popcount(int x) +{ + uint m1 = 0x55555555; + uint m2 = 0x33333333; + uint m4 = 0x0f0f0f0f; + x -= (x >> 1) & m1; + x = (x & m2) + ((x >> 2) & m2); + x = (x + (x >> 4)) & m4; + x += x >> 8; + return (x + (x >> 16)) & 0x3f; +} + + /** Counts the number of 1s in the first 16 bits of x */ inline uint popcount16(int x){