| tree_buffer_heap_add#(a, h; H, rxs, rys, xs_len, to_delete) {tree_buffer_heap_process_queue#(; H, to_delete); choose r with ¬ r ∈ H ∧ r ≠ null in {H := H ++ r; H[r].val := a; H[r].nxt := rxs; if xs_len + 1 = h then {if rys ≠ null then to_delete := rys + to_delete; rys := r; xs_len := 0; rxs := null} else {rxs := r; xs_len := 1 + xs_len}} } |