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