unsigned char node_off, part_off;
struct ma_node_info *to;
- state = sd->state;
i = sd->len;
/* Offset into the destination data where the insert ends */
}
i++;
} while (node_off <= src->end);
+ sd->len = i;
return i;
}
{
struct ma_state tmp_mas;
struct ma_node_info src2, parent, new_parent;
- struct ma_node_state state[5];
- unsigned char split, max, i;
+ unsigned char split, max;
bool left_store = false;
/*
/* The rebalance operation will succeed. */
sd->split = split;
- sd->state = state;
sd->new_end += src2.end + 1;
- i = 0;
if (left_store) {
/* Left pushes data right. */
sd->insert = mas->offset;
sd->insert = mas->offset + src2.end + 1;
sd->offset = src2.end + 1;
sd->space = split - src2.end;
- state[i].info = &src2;
- mns_mni_init(&state[i], left, 0, src2.end + 1);
- i++;
+ sd->states[sd->len].info = &src2;
+ mns_mni_init(&sd->states[sd->len], left, 0, src2.end + 1);
sd->len++;
}
* There can also be a split between nodes that may happen at these
* boundaries, or elsewhere.
*/
- i = mt_wr_split_data(src, left, right, ma_part,
- state, i, sd);
+ mt_wr_split_data(src, left, right, ma_part,
+ sd->states, sd->len, sd);
if (left_store) {
- state[i].info = &src2;
- mns_mni_init(&state[i++], right, 0, src2.end + 1);
+ sd->states[sd->len].info = &src2;
+ mns_mni_init(&sd->states[sd->len], right, 0, src2.end + 1);
+ sd->len++;
}
- mns_assemble(state, i);
+ mns_assemble(sd->states, sd->len);
mni_finalise(left);
mni_finalise(right);
mni_node_part_init(ma_part, left, right);