let filter_in_place p ({ ar = ar } as ra) =
let dest = ref 0 in
let pos = ref 0 in
while !pos <= ra.vlix do
let el = Impl.unsafe_get ar !pos in
if p el then begin
Impl.unsafe_set ar !dest el;
incr dest
end;
incr pos
done;
unsafe_remove_n ra (!pos - !dest)