- 论坛徽章:
- 0
|
回复 #9 ldap 的帖子
void insert_btree32_i(bnode32_i *node, void *index, int32 key, int16 pos)
{
bnode32_i *son = NULL;
bnode32_i *new = NULL;
int16 m = BNODE32_I_MAX/2;
Assert(node != NULL);
Assert(pos >= 0);
start:
/* insert the ip without divide */
if (node->num != BNODE32_I_MAX) {
insert_none32_i(node, new, son, index, key, pos);
return;
}
/* insert the ip with divide */
if (node->parent == NULL) {
/* create new root node */
node->parent = create_bnode32_i(BNODE32_I_ROOT);
node->parent->child[0] = node;
node->pos = 0;
}
/* create new divide node */
if (node->child[0] == NULL) {
new = create_bnode32_i(BNODE32_I_LEAF);
}
else {
new = create_bnode32_i(BNODE32_I_ROOT);
}
/* insert middle and divide */
if (pos == m) {
insert_middle32_i(node, new, son, index, &index, key, &key, pos);
}
/* insert left and divide */
if (pos < m) {
insert_left32_i(node, new, son, index, &index, key, &key, pos);
}
/* insert right and divide */
if (pos > m) {
insert_right32_i(node, new, son, index, &index, key, &key, pos);
}
pos = node->pos;
node = node->parent;
son = new;
goto start;
} |
|
|