X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=Tools.h;h=1fb4d56f811af24626cced7fe579c1f38e103183;hb=72aa11ca7df7975f650344e8904a1a690be2480e;hp=121e46e06527539ae952f2e9ff09eee9bc5bb836;hpb=7d27a4450ed429e3b63e9d3ba7217a28cbbf9a31;p=SXSI%2FTextCollection.git diff --git a/Tools.h b/Tools.h index 121e46e..1fb4d56 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 @@ -34,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 { @@ -54,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) @@ -95,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) {