|
@@ -410,3 +410,49 @@ Integers Util::computeFastSet(string ipaddr, const unsigned char* infoHash,
|
|
|
return fastSet;
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+int Util::countBit(unsigned int n) {
|
|
|
+ int count = 0;
|
|
|
+ while(n > 0) {
|
|
|
+ count++;
|
|
|
+ n &= (n-1);
|
|
|
+ }
|
|
|
+ return count;
|
|
|
+}
|
|
|
+*/
|
|
|
+
|
|
|
+static int nbits[] = {
|
|
|
+ 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4,
|
|
|
+ 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
|
|
|
+ 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
|
|
|
+ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
|
|
|
+ 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
|
|
|
+ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
|
|
|
+ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
|
|
|
+ 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
|
|
|
+ 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
|
|
|
+ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
|
|
|
+ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
|
|
|
+ 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
|
|
|
+ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
|
|
|
+ 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
|
|
|
+ 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
|
|
|
+ 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8,
|
|
|
+};
|
|
|
+
|
|
|
+int Util::countBit(unsigned int n) {
|
|
|
+ /*
|
|
|
+ return
|
|
|
+ nbits[n & 0xffu]+
|
|
|
+ nbits[(n >> 8) & 0xffu]+
|
|
|
+ nbits[(n >> 16) & 0xffu]+
|
|
|
+ nbits[(n >> 24) & 0xffu];
|
|
|
+ */
|
|
|
+ int count = 0;
|
|
|
+ int size = sizeof(unsigned int);
|
|
|
+ for(int i = 0; i < size; i++) {
|
|
|
+ count += nbits[(n >> i*8) & 0xffu];
|
|
|
+ }
|
|
|
+
|
|
|
+ return count;
|
|
|
+}
|