29
29
#include < memory>
30
30
31
31
#define BLOCKSIZE 4096
32
- #define T 255
32
+ #define T 255
33
33
#define LEAF 0x0001
34
34
#define ONDISK 0x0002
35
35
@@ -104,11 +104,16 @@ namespace alg {
104
104
*/
105
105
int32_t search (node x, int32_t k) {
106
106
int32_t i = 0 ;
107
- while (i<x->n && k > x->key [i]) i++;
107
+ while (i<x->n && ( k > x->key [i]) ) i++;
108
108
109
109
if (i<x->n && k == x->key [i]) {
110
110
return i;
111
111
} else if (x->flag & LEAF) {
112
+ int c;
113
+ for (c=0 ;c<x->n ;c++) {
114
+ printf (" %d " , x->key [c]);
115
+ }
116
+ printf (" [%d]\n " , x->key [i]);
112
117
return -1 ;
113
118
} else {
114
119
std::auto_ptr<node_t > xi (READ (x, i));
@@ -151,11 +156,7 @@ namespace alg {
151
156
*/
152
157
void * allocate_node () {
153
158
node x = (node)malloc (sizeof (node_t ));
154
- x->n = 0 ;
155
- x->offset = 0 ;
156
- x->flag = 0 ;
157
- memset (x->key , 0 , sizeof (x->key ));
158
- memset (x->c , 0 , sizeof (x->c ));
159
+ memset (x, 0 , sizeof (node_t ));
159
160
return x;
160
161
}
161
162
@@ -165,11 +166,7 @@ namespace alg {
165
166
void split_child (node x, int32_t i) {
166
167
std::auto_ptr<node_t > z ((node)allocate_node ());
167
168
std::auto_ptr<node_t > y (READ (x, i));
168
- z->flag &= ~LEAF;
169
169
z->flag |= (y->flag & LEAF);
170
- printf (" leafz:%x\n " , z->flag );
171
- printf (" leafy:%x\n " , y->flag );
172
- printf (" leafx:%x offset:%x\n " , x->flag , x->offset );
173
170
z->n = T - 1 ;
174
171
175
172
int32_t j;
@@ -188,10 +185,8 @@ namespace alg {
188
185
WRITE (z.get ());
189
186
190
187
for (j=x->n ;j>=i+1 ;j--) {
191
- x->c [j+1 ] = x->c [j]; // shift
188
+ x->c [j+1 ] = x->c [j]; // right shift
192
189
}
193
-
194
- // save z
195
190
x->c [i+1 ] = z->offset ;
196
191
197
192
for (j=x->n -1 ;j>=i;j--) {
0 commit comments