#include <stdio.h>
#include <stdlib.h>
#include "file.h"

void test1()
{
fifo file;
int x;
int i;

init(&file); // initialisation de la file (=0)

print_fifo(&file); // affichage de la file vide

for (i = 0; i < 5; i++) // remplissage de la file
{
push(i, &file);
}
printf("\n");
print_fifo(&file); // affichage de la file remplie

for (i = 0; i < 5; i++) // Vidage de la file
{
pop(&file);
}
printf("\n");

pop(&file);
print_fifo(&file); // affichage de la file vidé
}

void init(fifo* file) // initialise la file
{
    file->head=NULL;
    file->queue=NULL;
    file->length=0;
}

int isEmpty (fifo *file) // renvoie 0 lorsque la liste est vide, sinon renvoie 1.
{
    if(file->head != NULL)
    {
        return 1;
    }
    else return 0;
}

void print_fifo(fifo * file) // affiche le contenu de la file
{
    cell* temp;
    temp=(cell*)malloc(sizeof(cell));
    temp=file->head;
    int i=0;

    if (isEmpty(file)==0) printf("File vide.\n");
    else
    {
        printf("Liste complete : \n");
        for (i=0; i<file->length;i++)
        {
            printf("Valeur : %d\n", temp->val);
            temp=temp->next;
        }
    }
}

int push(int i, fifo *file) // retourne 0 si erreur, 1 sinon.
{
    cell* temp;
    temp=(cell*)malloc(sizeof(cell));
    temp->val=i;
    temp->next=NULL;

    if (isEmpty(file)==0) // cas de la liste vide
    {
        file->head=temp;
        file->queue=temp;
        file->length++;
        return 1;
    }
    else
    {
        file->queue->next=temp;
        temp->next=NULL;
        file->queue=temp;
        file->length++;
        return 1;
    }
    return 0;
}

int pop(fifo* file) // retourne 0 si erreur, sinon 1.
{
      if (file->head==file->queue) // 1 seul élément dans la file
      {
          free(file->head);
          file->head=file->queue=NULL;
          return 1;
      }
      else
      {
          cell* boite;
          boite = file->head;
          file->head=file->head->next; // On met à jour la tête de file
          free(boite); // on libère l'élément qui était en tête
          return 1;
      }
      return 0;
}


