X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=Tools.h;h=1fb4d56f811af24626cced7fe579c1f38e103183;hb=d660b6ec5cd55019d17188810b783a2e3a94fa49;hp=7baabbd8107d48f297fd6b16b8eed0a652a34c82;hpb=d39bf1d093c6e08dc50b805b25258d0c095380ec;p=SXSI%2FTextCollection.git diff --git a/Tools.h b/Tools.h index 7baabbd..1fb4d56 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 @@ -35,6 +40,8 @@ #define ulong unsigned long #endif +#define myminofthree(x,y,z) (x)<(y)?((x)<(z)?(x):(z)):(y)<(z)?(y):(z) + class Tools { @@ -55,7 +62,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 +103,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) {