X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=Tools.h;h=4def5e84d9ff83f67ccf74eefc982e74811ccbc2;hb=54b24bcc08f601be0c264fefc65af50bfb3837e5;hp=121e46e06527539ae952f2e9ff09eee9bc5bb836;hpb=7d27a4450ed429e3b63e9d3ba7217a28cbbf9a31;p=SXSI%2FTextCollection.git diff --git a/Tools.h b/Tools.h index 121e46e..4def5e8 100644 --- a/Tools.h +++ b/Tools.h @@ -8,6 +8,7 @@ #include #include +#include #include #include @@ -24,8 +25,13 @@ # define W 32 #endif +#ifndef WW #define WW (W*2) +#endif + +#ifndef Wminusone #define Wminusone (W-1) +#endif #ifndef uchar #define uchar unsigned char @@ -54,7 +60,7 @@ public: { ulong i = index * len / W, j = index * len - i * W; - ulong mask = (j+len < W ? ~0lu << j+len : 0) + ulong mask = (j+len < W ? ~0lu << (j+len) : 0) | (W-j < W ? ~0lu >> (W-j) : 0); A[i] = (A[i] & mask) | x << j; if (j + len > W) @@ -95,7 +101,7 @@ public: static inline void SetVariableField(ulong *A, register unsigned len, register ulong index, register ulong x) { ulong i=index/W, j=index-i*W; - ulong mask = (j+len < W ? ~0lu << j+len : 0) + ulong mask = (j+len < W ? ~0lu << (j+len) : 0) | (W-j < W ? ~0lu >> (W-j) : 0); A[i] = (A[i] & mask) | x << j; if (j+len>W) {