(* Exercice Implémentation file avec un tableau circulaire *) exception FileVide ;; exception FilePleine ;; type 'a file = { taille : int ; tab : 'a array ; mutable tete : int ; mutable queue : int } ;; let create n e = { taille = n ; tab = Array.make n e ; tete = 0 ; queue = 0 } ;; let add e file = if (file.queue = file.tete + file.taille) then raise FilePleine (* Si la file est pleine on lève une exception *) else begin file.tab.(file.queue mod file.taille) <- e ; file.queue <- file.queue + 1 end ;; let peek file = if (file.queue = file.tete) then raise FileVide (* Si la file est vide on lève une exception *) else file.tab.(file.tete mod file.taille) ;; let take file = if (file.queue = file.tete) then raise FileVide (* Si la file est vide on lève une exception *) else begin let rep = file.tab.(file.tete mod file.taille) in file.tete <- file.tete + 1 ; rep end ;; let is_empty file = file.queue = file.tete ;; let mafile = create 5 0. ;; (* On teste avec une file de flotttans *) peek mafile ;; add 5. mafile ;; mafile ;; add 3. mafile ;; add 1. mafile ;; peek mafile ;; mafile ;; add (-1.) mafile ;; add 2. mafile ;; add 4. mafile ;; mafile ;; add 6. mafile ;; take mafile ;; mafile ;; add 6. mafile ;; add 8. mafile ;; mafile ;;