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