next up previous contents
suivant: Heap.java monter: Package util précédent: Package util   Table des matières

Fifo.java


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);
	    }
    }
}



Alexandre 2009-05-14