type 'a tr = { mutable taille : int; mutable donnees : 'a array };; let creer_tr capacity init_value = { taille = 0; donnees = Array.make (max capacity 1) init_value };; let taille_tr tr = tr.taille;; let acces_tr tr i = if i >= tr.taille then invalid_arg "Index bigger than tr size" else tr.donnees.(i);; let modif_tr tr i value = if i >= tr.taille then invalid_arg "Index bigger than tr size" else tr.donnees.(i) <- value;; let append_tr tr value = let n = Array.length tr.donnees in if tr.taille >= n then tr.donnees <- Array.init (n*2) (fun i -> tr.donnees.(i mod n)); tr.donnees.(tr.taille) <- value; tr.taille <- tr.taille + 1 ;; let pop_tr tr = if tr.taille <= 0 then invalid_arg "Empty tr" else tr.taille <- tr.taille - 1; tr.donnees.(tr.taille) ;;