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
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list