Skip to content

Commit aac5c9a

Browse files
committed
updating btree delete
1 parent 5ccbfa5 commit aac5c9a

File tree

1 file changed

+15
-22
lines changed

1 file changed

+15
-22
lines changed

include/btree.h

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -240,27 +240,20 @@ namespace alg {
240240
WRITE(x);
241241
return;
242242
} else { // in non-leaf node
243-
node y, z;
244-
if (i-1 >= 0) { // case 2a
245-
y = READ(x, i-1);
246-
std::auto_ptr<node_t> _y(y);
247-
if (y->n >= T) {
248-
x->key[i] = y->key[y->n-1];
249-
WRITE(x);
250-
delete_op(y, x->key[i]);
251-
return;
252-
}
243+
std::auto_ptr<node_t> y(READ(x, i));
244+
if (y->n >= T) { // case 2a.
245+
x->key[i] = y->key[y->n-1];
246+
WRITE(x);
247+
delete_op(y.get(), x->key[i]);
248+
return;
253249
}
254250

255-
if (i+1 < x->n) { // case 2b
256-
z = READ(x, i+1);
257-
std::auto_ptr<node_t> _z(z);
258-
if (z->n >= T) {
259-
x->key[i] = z->key[0];
260-
WRITE(x);
261-
delete_op(z, x->key[i]);
262-
return;
263-
}
251+
std::auto_ptr<node_t> z(READ(x, i+1));
252+
if (z->n >= T) { // case 2b.
253+
x->key[i] = z->key[0];
254+
WRITE(x);
255+
delete_op(z.get(), x->key[i]);
256+
return;
264257
}
265258

266259
if (y->n == T-1 && z->n == T-1) { // case 2c
@@ -277,8 +270,8 @@ namespace alg {
277270
// mark free this node
278271
z->flag |= MARKFREE;
279272
y->n = y->n + z->n + 1; // size after merge
280-
WRITE(z);
281-
WRITE(y);
273+
WRITE(z.get());
274+
WRITE(y.get());
282275

283276
// shift x
284277
for (j=i;j<x->n-1;j++) {
@@ -288,7 +281,7 @@ namespace alg {
288281
WRITE(x);
289282

290283
// recursive delete k
291-
delete_op(y, k);
284+
delete_op(y.get(), k);
292285
return;
293286
}
294287

0 commit comments

Comments
 (0)