package buffalo.util; /** Fifo de taille bornée géré avec un tableau. */ public class Fifo { private Object[] file; private int premier; private int dernier; private int taille; /*----------------------------------------------------------*/ /** Il suffit pour créer une Fifo de préciser sa taille. */ public Fifo(int taille) { file = new Object[taille]; this.taille = taille; premier = 0; dernier = 0; } /*-----------------------------------------------------------*/ /** Pour ajouter un objet dans la file. */ public void add(Object o) { if (isFull()) { System.out.println("Fifo overflow"); } else { file[dernier] = o; dernier = incrementeIndice(dernier); } } /*-----------------------------------------------------------*/ private int incrementeIndice(int indice) { return (indice + 1)%taille; } /*-----------------------------------------------------------*/ /** Pour récupérer la tête de file, renvoie null si la file est vide. */ public Object get() { if (isEmpty()) { return null; } return file[premier]; } /*-----------------------------------------------------------*/ /** Pour éliminer la tête de file. */ public void extract() { if (!isEmpty()) { file[premier]=null; premier = incrementeIndice(premier); } } /*-----------------------------------------------------------*/ private boolean isEmpty() { return (file[premier] == null); } /*-----------------------------------------------------------*/ private boolean isFull() { return ((premier == dernier)&&(!isEmpty())); } /*-----------------------------------------------------------*/ public String toString() { String res = "fifo : "; if (isEmpty()) { return (res + "empty"); } else { for(int i = premier; i !=dernier ; i = incrementeIndice(i)) { res += file[i].toString() + "; "; } } return res; } /*---------------------------------------------*/ static void main(String[] args) { Fifo f = new Fifo(100); try { for (int i = 1; i<=90; i++ ) { f.add(new Integer(i)); } for (int i = 1; i <= 60; i ++) { System.out.print("---" + f.get()); f.extract(); } for (int i = 51 ; i <= 120 ; i++) { f.add(new Integer(i)); } while(true) { System.out.print("---" + f.get()); f.extract(); } } catch(Exception e) { System.out.println(e); } } }