/*


 .--. _ .-.           .-.   
: .-':_;: :           : :   
: `; .-.: :   .--.    : `-. 
: :  : :: :_ ' '_.' _ : .. :
:_;  :_;`.__;`.__.':_;:_;:_;
                            

FICHIER	: file.h
DATE	: Fevrier 2003
AUTEUR	: Aymeric
EMAIL	: Aymeric.Demartin@iup.univ-avignon.fr
GROUPE	: IUP1 GMI Avignon - Groupe 5 (RT)

*/


#ifndef FILE_H
#define FILE_H

#include "global.h"

struct Maillon {
	int elt;
	Maillon * suivant;
	Maillon * precedent;
};

class File
{
	private:
		Maillon * debut;
		Maillon * fin;
		int nb;
	public:
		File();
		~File();
		void afficher();
		void ajouter(int);
		int enlever();
		int retourneNb();
		bool estVide();
};

File::File()
{
	debut=NULL;
	fin=NULL;
	nb=0;
}

void File::afficher()
{
	Maillon * aux;
	aux=debut;
	while (aux != NULL)
	{
		printw("\nLe Maillon contient la valeur : %d",aux->elt);
		aux=aux->suivant;
	}
}

void File::ajouter(int e)
{
	Maillon * aux=new Maillon;
	aux->elt=e;
	aux->suivant=debut;
	aux->precedent=NULL;
	if (nb != 0) debut->precedent=aux;
	debut=aux;
	if (nb == 0) fin=aux;
	nb++;
}

int File::enlever()
{
	Maillon * aux;
	int e;
	e=fin->elt;
	if (nb > 1)
	{
		aux=fin;
		fin=aux->precedent;
		fin->suivant=NULL;
		delete aux;
	}
	else
	{
		aux=fin;
		debut=NULL;
		fin=NULL;
		delete aux;
	}
	nb--;
	return (e);
}

int File::retourneNb()
{
	return (nb);
}

bool File::estVide()
{
	if (nb == 0) return (true);
	else return (false);
}

File::~File()
{
	Maillon * aux;
	Maillon * tmp;
	aux=debut;
	tmp=debut;
	while (aux != NULL)
	{
		aux=aux->suivant;
		delete tmp;
		tmp=aux;
	}
}

#endif
