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