class IntervalSkipList
def delete(marker)
def delete(marker) range = ranges[marker] path_to_first_node = make_path first_node = find(range.first, path_to_first_node) cur_node = first_node cur_level = first_node.top_level while next_node_at_level_inside_range?(cur_node, cur_level, range) while can_ascend_from?(cur_node, cur_level) && next_node_at_level_inside_range?(cur_node, cur_level + 1, range) cur_level += 1 end cur_node = unmark_forward_path_at_level(cur_node, cur_level, marker) end while node_inside_range?(cur_node, range) while can_descend_from?(cur_level) && next_node_at_level_outside_range?(cur_node, cur_level, range) cur_level -= 1 end cur_node = unmark_forward_path_at_level(cur_node, cur_level, marker) end last_node = cur_node first_node.endpoint_of.delete(marker) if first_node.endpoint_of.empty? first_node.delete(path_to_first_node) end last_node.endpoint_of.delete(marker) if last_node.endpoint_of.empty? path_to_last_node = make_path find(range.last, path_to_last_node) last_node.delete(path_to_last_node) end end