done:
wr_mas->r_max = max;
wr_mas->r_min = min;
- mas->offset = offset;
+ wr_mas->offset_end = mas->offset = offset;
}
/*
while (true) {
mas_wr_walk_descend(wr_mas);
- if (mas_is_span_wr(wr_mas))
+ if (unlikely(mas_is_span_wr(wr_mas)))
return false;
wr_mas->content = mas_slot_locked(mas, wr_mas->slots,
mas->offset);
if (ma_is_leaf(wr_mas->type))
return true;
- mas_wr_walk_traverse(wr_mas);
+ mas_wr_walk_traverse(wr_mas);
}
+
return true;
}
{
struct ma_state *mas = wr_mas->mas;
- if ((wr_mas->content = mas_start(mas)) ||
- mas_is_none(mas) || mas->node == MAS_ROOT) {
+ if ((wr_mas->content = mas_start(mas)) || mas_is_none(mas) ||
+ mas_is_ptr(mas)) {
mas_store_root(mas, wr_mas->entry);
return wr_mas->content;
}
- if (!mas_wr_walk(wr_mas)) {
+ if (unlikely(!mas_wr_walk(wr_mas))) {
mas_spanning_store(wr_mas);
return wr_mas->content;
}
/* At this point, we are at the leaf node that needs to be altered. */
- wr_mas->offset_end = mas->offset;
wr_mas->end_piv = wr_mas->r_max;
mas_wr_end_piv(wr_mas);
mas_wr_extend_null(wr_mas);
/* New root for a single pointer */
- if (!mas->index && mas->last == ULONG_MAX) {
+ if (unlikely(!mas->index && mas->last == ULONG_MAX)) {
mas_new_root(mas, wr_mas->entry);
return wr_mas->content;
}