X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=Tools.h;h=4def5e84d9ff83f67ccf74eefc982e74811ccbc2;hb=1a53e70ef5e10e6235f982940532a3ec3e6a5c7a;hp=7baabbd8107d48f297fd6b16b8eed0a652a34c82;hpb=d39bf1d093c6e08dc50b805b25258d0c095380ec;p=SXSI%2FTextCollection.git diff --git a/Tools.h b/Tools.h index 7baabbd..4def5e8 100644 --- a/Tools.h +++ b/Tools.h @@ -25,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 @@ -55,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) @@ -96,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) {