}
sd.new_end += src2.end + 1;
+ mas_ascend(mas);
+ mas->end = parent.end;
+ mas->offset = parent.insert_off;
if (sd.new_end >= mt_slots[left.type]) {
- mni_node_init(&right, mas_pop_node(mas), mte_node_type(mas->node));
+ mni_node_init(&right, mas_pop_node(mas), left.type);
rebalance_two(&left, &right, &src, &src2, &part, &sd, left_store);
- mas_ascend(mas);
- mas->end = parent.end;
- mas->offset = parent.insert_off;
break;
}
rebalance_reduce(&left, &src, &src2, &part, &sd, left_store);
- mas_ascend(mas);
- mas->end = parent.end;
- mas->offset = parent.insert_off;
if (ma_is_root(parent.node)) {
if (parent.end != 1)
- break; /* Converged */
+ break;
src.enode = mas->node;
left.node->parent = mas_mn(mas)->parent;
mas->node = left.enode;
mas->depth = mas_mt_height(mas) - 1;
- if (mas->depth == 1)
-
- mas_set_height(mas);
+ mas_set_height(mas);
goto new_root;
}
- if (mas->end > mt_min_slots[parent.type])
- break; /* Converged */
- /* Must go again */
- sd.len = 0;
+
sd.new_end = mas->end + part.size - part.skip + 1;
+ if (sd.new_end > mt_min_slots[parent.type])
+ break;
+
+ sd.len = 0;
sd.offset = mas->offset;
sd.src_ins_end = mas->offset + 1;
mni_mas_init(&src, mas);