let maxlen = 1000
type sarray = {
mutable n : int;
mutable values : int array;
mutable idx : int array;
mutable back : int array;
}
let valid i s =
let k = s.idx.(i) in
if 0 <= k && k < s.n
then s.back.(k) = i
else false
let get i s =
if valid i s then s.values.(i) else 0
let set i v s =
s.values.(i) <- v;
if not (valid i s) then begin
let k = s.n in
s.idx.(i) <- k;
s.back.(k) <- i;
s.n <- k + 1
end
(*
let rand_array () =
Array.init maxlen (fun _ -> Random.int max_int)
let create () =
{ n = 0;
values = rand_array();
idx = rand_array();
back = rand_array(); }
let harness () =
let a = create 10 in
let b = create 20 in
assert (get 6 a = 0);
assert (get 7 b = 0);
set 5 1 a;
set 7 2 b;
assert (get 0 a = 0);
assert (get 0 b = 0)
*)
|