From 3e4bdee621c062c05ed34de7e501d0ddb63194be Mon Sep 17 00:00:00 2001 From: ColinDrieu <colin.drieu@insa-rennes.fr> Date: Tue, 22 Mar 2016 19:20:47 +0100 Subject: [PATCH] Fin du code du fichier joueurList.c Toutes les fonctions du fichier joueurList.c sont codees. Mise a jour de joueurList.h --- src/joueurList.c | 161 +++++++++++++++++++++++++++++++++++++++++++++-- src/joueurList.h | 4 ++ 2 files changed, 159 insertions(+), 6 deletions(-) diff --git a/src/joueurList.c b/src/joueurList.c index 27bf65b..3b9a34f 100644 --- a/src/joueurList.c +++ b/src/joueurList.c @@ -92,9 +92,34 @@ int emptyJoueurList(ListJoueur * l){ */ int outOfJoueurList(ListJoueur * l){ if(!emptyJoueurList(l)){ - if(l->currentNodeJoueur==l->lastNodeJoueur){ - return 1; - } + return (l->currentNodeJoueur==l->lastNodeJoueur); + } + return 0; +} + +/*! + * \fn int isFirstJoueurList(ListJoueur * l) + * \brief La fonction teste si le NodeJoueur courant est le premier de la liste. + * + * \param La ListJoueur a tester + * \return 1 si le NodeJoueur courant est le premier de la liste, 0 sinon + */ +int isFirstJoueurList(ListJoueur * l){ + if(!emptyJoueurList(l)){ + return (l->currentNodeJoueur==l->firstNodeJoueur); + } + return 0; +} + +/*! + * \fn int isNextNodeJoueurList(ListJoueur * l, NodeJoueur * n) + * \brief La fonction teste si le NodeJoueur en parrametre est le NodeJoueur suivant le NodeJoueur courant. + * \param La ListJoueur et le NodeJoueur a tester. + * \return 1 si le NodeJoueur en parrametre est le NodeJoueur suivant le NodeJoueur courant, 0 sinon. + */ +int isNextNodeJoueurList(ListJoueur * l, NodeJoueur * n){ + if(!emptyJoueurList(l)){ + return (l->currentNodeJoueur->next==n); } return 0; } @@ -151,6 +176,8 @@ int addNodeJoueurFirst(ListJoueur * l, NodeJoueur * j){ if (l!=NULL){ if (emptyJoueurList(l)){ l->firstNodeJoueur=j; + l->currentNodeJoueur=j; + l->lastNodeJoueur=j; return 1; } else{ @@ -182,8 +209,130 @@ int addNodeJoueurLast(ListJoueur * l, NodeJoueur * j){ return 0; } -int deleteCurrentNodeJoueur(ListJoueur * l); +/*! + * \fn deleteFirstNodeJoueur(ListJoueur * l) + * \brief La fonction supprime le premier NodeJoueur de la liste et libere l'espace alloue. + * + * \param La ListJoueur a modifier. + * \return 1 si tout s'est bien passe, 0 sinon + */ +int deleteFirstNodeJoueur(ListJoueur * l){ + if(!emptyJoueurList(l)){ + NodeJoueur * tempNodeJoueur = l->firstNodeJoueur; + l->firstNodeJoueur=l->firstNodeJoueur->next; + deleteNodeJoueur(tempNodeJoueur); + return 1; + } + return 0; +} -void setOnJoueur(ListJoueur * l, Joueur * j); +/*! + * \fn deleteLastNodeJoueur(ListJoueur * l) + * \brief La fonction supprime le dernier NodeJoueur de la liste et libere l'espace alloue. + * + * \param La ListJoueur a modifier. + * \return 1 si tout s'est bien passe, 0 sinon + */ +int deleteLastNodeJoueur(ListJoueur *l){ + if(!emptyJoueurList(l)){ + if(l->firstNodeJoueur==l->lastNodeJoueur){ + return deleteFirstNodeJoueur(l); + } + else{ + NodeJoueur * tempNodeJoueur=l->lastNodeJoueur; + setOnFirstJoueur(l); + while(!isNextNodeJoueurList(l,l->lastNodeJoueur)){ + nextJoueur(l); + } + l->currentNodeJoueur=l->lastNodeJoueur; + l->currentNodeJoueur->next=NULL; + deleteNodeJoueur(tempNodeJoueur); + return 1; + } + } + return 0; +} + +/*! + * \fn deleteCurrentNodeJoueur(ListJoueur * l) + * \brief La fonction supprime le NodeJoueur courant de la liste et libère l'espace alloue. + * + * \param La ListJoueur a modifier. + * \return 1 si tout s'est bien passe, 0 sinon + */ +int deleteCurrentNodeJoueur(ListJoueur * l){ + if(isFirstJoueurList(l)){ + return deleteFirstNodeJoueur(l); + } + else if(outOfJoueurList(l)){ + return deleteLastNodeJoueur(l); + } + else if(!emptyJoueurList(l)){ + NodeJoueur * tempNodeJoueur=l->currentNodeJoueur; + setOnFirstJoueur(l); + while(!isNextNodeJoueurList(l,tempNodeJoueur)){ + nextJoueur(l); + } + l->currentNodeJoueur->next=tempNodeJoueur->next; + deleteNodeJoueur(tempNodeJoueur); + return 1; + } + return 0; +} -int deleteNodeJoueurFromList(ListJoueur * l, Joueur * j); +/*! + * \fn void setOnJoueur(ListJoueur * l, Joueur * j) + * \brief La fonction positionne le NodeJoueur courant sur le NodeJoueur possedant la valeur Joueur. + * + * \param La ListJoueur a modifier, la valeur de Joueur a trouver. + */ +void setOnJoueur(ListJoueur * l, Joueur * j){ + if(!emptyJoueurList(l)){ + setOnFirstJoueur(l); + while(j!=getCurrentJoueur(l)){ + nextJoueur(l); + } + } +} + +/*! + * \fn int deleteNodeJoueurFromList(ListJoueur * l, Joueur * j) + * \brief La fonction efface le NodeJoueur contenant le Joueur en parrametre et libere l'espace alloue en memoire. + * Elle repositione la valeur courante sur le NodeJoueur courant avant l'appel de la fonction. + * Si la valeur a supprimmer est la valeur courante avant l'appel de la fonction, elle positionne la valeur courante sur le NodeJoueur suivant. + * Si la valeur a supprimer est le derniere NodeJoueur de la liste, la valeur courante est placee sur le premier NodeJoueur. + * \param La ListJoueur a modifier, la valeur de Joueur a supprimer. + * \return 1 si tout c'est bien passe, 0 sinon. + */ +int deleteNodeJoueurFromList(ListJoueur * l, Joueur * j){ + int i; + if(!emptyJoueurList(l)){ + if(j==getCurrentJoueur(l)){ + i=deleteCurrentNodeJoueur(l); + nextJoueur(l); + return i; + } + else{ + NodeJoueur * tempCurrent=l->currentNodeJoueur; + setOnFirstJoueur(l); + while((getCurrentJoueur(l)!=j)&&(!outOfJoueurList(l))){ + if(outOfJoueurList(l)){ + if(getCurrentJoueur(l)!=j){ + return 0; + } + else{ + i=deleteLastNodeJoueur(l); + setOnFirstJoueur(l); + return i; + } + } + else{ + i=deleteCurrentNodeJoueur(l); + l->currentNodeJoueur=tempCurrent; + return i; + } + } + } + } + return 0; +} diff --git a/src/joueurList.h b/src/joueurList.h index b5e36ce..d14e272 100644 --- a/src/joueurList.h +++ b/src/joueurList.h @@ -20,6 +20,8 @@ void printJoueurList(ListJoueur * l); int emptyJoueurList(ListJoueur * l); int outOfJoueurList(ListJoueur * l); +int isFirstJoueurList(ListJoueur * l); +int isNextNodeJoueurList(ListJoueur * l,NodeJoueur * n); void setOnFirstJoueur(ListJoueur * l); void nextJoueur(ListJoueur * l); @@ -27,6 +29,8 @@ Joueur * getCurrentJoueur(ListJoueur * l); int addNodeJoueurFirst(ListJoueur * l, NodeJoueur * j); int addNodeJoueurLast(ListJoueur * l, NodeJoueur * j); +int deleteFirstNodeJoueur(ListJoueur * l); +int deleteLastNodeJoueur(ListJoueur *l); int deleteCurrentNodeJoueur(ListJoueur * l); void setOnJoueur(ListJoueur * l, Joueur * j); -- GitLab