Changeset: 39448e7be5f9 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=39448e7be5f9
Modified Files:
        monetdb5/modules/mal/Tests/xidlist.stable.out
        monetdb5/modules/mal/Tests/xidlist.stable.out.oid32
        monetdb5/modules/mal/xid.c
Branch: xid
Log Message:

XIDSETINC/XIDSETDEC: fixed off-by-one to exploit all XID_VAL_BITS


diffs (192 lines):

diff --git a/monetdb5/modules/mal/Tests/xidlist.stable.out 
b/monetdb5/modules/mal/Tests/xidlist.stable.out
--- a/monetdb5/modules/mal/Tests/xidlist.stable.out
+++ b/monetdb5/modules/mal/Tests/xidlist.stable.out
@@ -315,7 +315,7 @@ p:5
 p:7
 p:70
 p:188
-s+:[188] 024
+s+:[188] 012
 p:9999
 r-:50 49
 r=:50 2
@@ -326,14 +326,14 @@ p:99
 p:96
 p:98
 p:97
-s-:[97] 0210
+s-:[97] 0104
 p:93
 p:91
 p:92
 p:1140
-s-:[1140] 020010004002000
+s-:[1140] 010004002001000
 p:1250
-s+:[1250] 020010004002000
+s+:[1250] 010004002001000
 b:9223372036854775807
 r=:0 20
 b:9
@@ -344,7 +344,7 @@ p:5
 p:7
 p:70
 p:188
-s+:[188] 024
+s+:[188] 012
 p:9999
 r-:50 49
 r=:50 2
@@ -355,14 +355,14 @@ p:99
 p:96
 p:98
 p:97
-s-:[97] 0210
+s-:[97] 0104
 p:93
 p:91
 p:92
 p:1140
-s-:[1140] 020010004002000
+s-:[1140] 010004002001000
 p:1250
-s+:[1250] 020010004002000
+s+:[1250] 010004002001000
 b:9223372036854775807
 r=:0 20
 b:9
diff --git a/monetdb5/modules/mal/Tests/xidlist.stable.out.oid32 
b/monetdb5/modules/mal/Tests/xidlist.stable.out.oid32
--- a/monetdb5/modules/mal/Tests/xidlist.stable.out.oid32
+++ b/monetdb5/modules/mal/Tests/xidlist.stable.out.oid32
@@ -315,7 +315,7 @@ p:5
 p:7
 p:70
 p:188
-s+:[188] 024
+s+:[188] 012
 p:9999
 r-:50 49
 r=:50 2
@@ -326,16 +326,16 @@ p:99
 p:96
 p:98
 p:97
-s-:[97] 0210
+s-:[97] 0104
 p:93
 p:91
 p:92
 p:1140
-s-:[1140] 04002000
+s-:[1140] 02001000
 p:1110
 p:1100
 p:1250
-s+:[1250] 04002000
+s+:[1250] 02001000
 p:1280
 p:1290
 b:2147483647
@@ -348,7 +348,7 @@ p:5
 p:7
 p:70
 p:188
-s+:[188] 024
+s+:[188] 012
 p:9999
 r-:50 49
 r=:50 2
@@ -359,16 +359,16 @@ p:99
 p:96
 p:98
 p:97
-s-:[97] 0210
+s-:[97] 0104
 p:93
 p:91
 p:92
 p:1140
-s-:[1140] 04002000
+s-:[1140] 02001000
 p:1110
 p:1100
 p:1250
-s+:[1250] 04002000
+s+:[1250] 02001000
 p:1280
 p:1290
 b:2147483647
diff --git a/monetdb5/modules/mal/xid.c b/monetdb5/modules/mal/xid.c
--- a/monetdb5/modules/mal/xid.c
+++ b/monetdb5/modules/mal/xid.c
@@ -127,7 +127,7 @@ XIDencode(BUN *rtrn, XIDcolumn col, oid 
                         * otherwise, we loose order information
                         */
                        if ( v > prev && v <= vmax ) {
-                               col[i].x.val |=  ( ((xid)1)<< (v - 
col[i-1].x.val));
+                               col[i].x.val |= (((xid)1) << ((v - 
col[i-1].x.val) - 1));
                                scnt++;
                                prev= v;
                                //mnstr_printf(GDKout,"xidset " BUNFMT " " 
XIDFMT "\n",i,(xid) (v - col[i-1].x.val));
@@ -149,7 +149,7 @@ XIDencode(BUN *rtrn, XIDcolumn col, oid 
                         * otherwise, we loose order information
                         */
                        if ( v < prev && v >= vmin ) {
-                               col[i].x.val |=  ( ((xid)1)<< (col[i-1].x.val - 
v));
+                               col[i].x.val |= (((xid)1) << ((col[i-1].x.val - 
v) - 1));
                                scnt++;
                                prev= v;
                                //mnstr_printf(GDKout,"xidset " BUNFMT " " 
XIDFMT "\n",i,(xid) (v - col[i-1].x.val));
@@ -206,12 +206,12 @@ XIDencode(BUN *rtrn, XIDcolumn col, oid 
                        }
                        break;
                case XIDPOINT:
-                       if ( (xid) col[i].x.val >= XID_VAL_BITS )
-                               vmin = (xid) col[i].x.val - (XID_VAL_BITS - 1);
+                       if ( (xid) col[i].x.val > XID_VAL_BITS )
+                               vmin = (xid) col[i].x.val - XID_VAL_BITS;
                        else
                                vmin = 0;
-                       if ( (xid) col[i].x.val <= XID_VAL_MAX - XID_VAL_BITS )
-                               vmax = (xid) col[i].x.val + (XID_VAL_BITS - 1);
+                       if ( (xid) col[i].x.val < XID_VAL_MAX - XID_VAL_BITS )
+                               vmax = (xid) col[i].x.val + XID_VAL_BITS;
                        else
                                vmax = XID_VAL_MAX;
                        if ( (xid) col[i].x.val == v){
@@ -244,7 +244,7 @@ XIDencode(BUN *rtrn, XIDcolumn col, oid 
                                col[i].x.tag = XIDSETINC;
                                scnt = 1;
                                prev = v;
-                               col[i].x.val = ((xid)1) << (v -col[i-1].x.val);
+                               col[i].x.val = ((xid)1) << ((v - 
col[i-1].x.val) - 1);
                                //mnstr_printf(GDKout,"xidset " BUNFMT " " 
XIDFMT "\n",i,(xid) (v- col[i-1].x.val));
                                //set++;
                        } else
@@ -254,7 +254,7 @@ XIDencode(BUN *rtrn, XIDcolumn col, oid 
                                col[i].x.tag = XIDSETDEC;
                                scnt = 1;
                                prev = v;
-                               col[i].x.val = ((xid)1) << (col[i-1].x.val - v);
+                               col[i].x.val = ((xid)1) << ((col[i-1].x.val - 
v) - 1);
                                //mnstr_printf(GDKout,"xidset " BUNFMT " " 
XIDFMT "\n",i,(xid) (v- col[i-1].x.val));
                                //set++;
                        } else {
@@ -496,7 +496,7 @@ XIDdecode(BUN *rtrn, XIDcolumn col, oid 
                switch ( col[i].x.tag ) {
                case XIDSETINC:
                        v = col[i-1].x.val;
-                       v += min;
+                       v += min + 1;
                        for (j=0 ; j< XID_VAL_BITS ; j++)
                                if (col[i].x.val & (((xid)1)<<j)) {
                                        cnt++;
@@ -507,7 +507,7 @@ XIDdecode(BUN *rtrn, XIDcolumn col, oid 
                        break;
                case XIDSETDEC:
                        v = col[i-1].x.val;
-                       v += min;
+                       v += min - 1;
                        for (j=0 ; j< XID_VAL_BITS ; j++)
                                if (col[i].x.val & (((xid)1)<<j)) {
                                        cnt++;
_______________________________________________
Checkin-list mailing list
Checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to