unsigned char dst_offset, new_end = end;
unsigned char offset, offset_end;
struct maple_node reuse, *newnode;
- unsigned char copy_size;
+ unsigned char copy_size, max_piv = mt_pivots[mt];
offset = offset_end = mas->offset;
if (mas->last == max) { // don't copy this offset
}
// Store the new entry and range end.
- if (dst_offset < mt_pivots[mt])
+ if (dst_offset < max_piv)
dst_pivots[dst_offset] = mas->last;
dst_slots[dst_offset++] = entry;
copy_size = end - offset_end + 1;
memcpy(dst_slots + dst_offset, slots + offset_end,
sizeof(void *) * copy_size);
- if (dst_offset < mt_pivots[mt]) {
- if (copy_size > mt_pivots[mt] - dst_offset)
- copy_size = mt_pivots[mt] - dst_offset;
+ if (dst_offset < max_piv) {
+ if (copy_size > max_piv - dst_offset)
+ copy_size = max_piv - dst_offset;
memcpy(dst_pivots + dst_offset, pivots + offset_end,
sizeof(unsigned long) * copy_size);
}
if (mas_is_err(mas))
return NULL;
+
if (mas_start(mas) || mas_is_none(mas) || mas->node == MAS_ROOT) {
ret = ma_root_ptr(mas, entry, content, overwrite);
if (mas_is_err(mas))