diff options
Diffstat (limited to 'lib/hash.c')
-rw-r--r-- | lib/hash.c | 245 |
1 files changed, 125 insertions, 120 deletions
@@ -4,200 +4,205 @@ #include "hash.h" #include "exceptions.h" #include "config.h" -static char *CHAINEHACHAGE = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_"; +static char *CHAINEHACHAGE = + + "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_"; static int FonctionHachage(char *clef) { - unsigned int i; + unsigned int i; - if (!clef) { - exception(1, _("Internal error into hashing")); - } + if (!clef) { + exception(1, _("Internal error into hashing")); + } - for (i = 0; i < strlen(CHAINEHACHAGE); i++) { - if (clef[0] == CHAINEHACHAGE[i]) { - return (i); - } + for (i = 0; i < strlen(CHAINEHACHAGE); i++) { + if (clef[0] == CHAINEHACHAGE[i]) { + return (i); } - return strlen(CHAINEHACHAGE); + } + return strlen(CHAINEHACHAGE); } _Element CreerElement(char *Nom, _TypeVariable Var) { - _Element e; + _Element e; - e.NomVar = Estrdup(Nom); + e.NomVar = Estrdup(Nom); - e.Variable = Var; - return (e); + e.Variable = Var; + return (e); } static _ListeChaine InserTete(_ListeChaine l, _Element e) { - _ListeChaine aux; - unsigned int i; - - aux = (_ListeChaine) Emalloc(sizeof(struct _LstChn)); - aux->Elem.NomVar = (char *) Emalloc(sizeof(char) * (strlen(e.NomVar) + 1)); - - for (i = 0; i <= strlen(e.NomVar); i++) { - aux->Elem.NomVar[i] = e.NomVar[i]; - } - aux->Elem.Variable = e.Variable; - aux->Suivant = l; - return (aux); + _ListeChaine aux; + unsigned int i; + + aux = (_ListeChaine) Emalloc(sizeof(struct _LstChn)); + aux->Elem.NomVar = (char *) Emalloc(sizeof(char) * (strlen(e.NomVar) + 1)); + + for (i = 0; i <= strlen(e.NomVar); i++) { + aux->Elem.NomVar[i] = e.NomVar[i]; + } + aux->Elem.Variable = e.Variable; + aux->Suivant = l; + return (aux); } static int EgaliteChaine(char *ch1, char *ch2) { - unsigned int i; - - if (strlen(ch1) != strlen(ch2)) { - return (0); + unsigned int i; + + if (strlen(ch1) != strlen(ch2)) { + return (0); + } + for (i = 0; i < strlen(ch1); i++) { + if (ch1[i] != ch2[i]) { + return (0); } - for (i = 0; i < strlen(ch1); i++) { - if (ch1[i] != ch2[i]) { - return (0); - } - } - return (1); - /* return (1-strcmp(ch1,ch2)); */ + } + return (1); + /* return (1-strcmp(ch1,ch2)); */ } static void Supprimer(_ListeChaine * l, char *Nom) { - _ListeChaine l_aux = NULL; - - if ((*l) != NULL) { - if (EgaliteChaine((*l)->Elem.NomVar, Nom)) { - l_aux = *l; - *l = (*l)->Suivant; - free(l_aux->Elem.NomVar); - free(l_aux); - } else { - Supprimer(&((*l)->Suivant), Nom); - } + _ListeChaine l_aux = NULL; + + if ((*l) != NULL) { + if (EgaliteChaine((*l)->Elem.NomVar, Nom)) { + l_aux = *l; + *l = (*l)->Suivant; + free(l_aux->Elem.NomVar); + free(l_aux); + } else { + Supprimer(&((*l)->Suivant), Nom); } + } } static void Detruit(_ListeChaine * l) { - _ListeChaine l_aux = NULL; - - while (*l) { - l_aux = (*l)->Suivant; - free((*l)->Elem.NomVar); - free(*l); - *l = l_aux; - } + _ListeChaine l_aux = NULL; + + while (*l) { + l_aux = (*l)->Suivant; + free((*l)->Elem.NomVar); + free(*l); + *l = l_aux; + } } char SupprimerDansTab(_TableauVariable * t, char *Nom) { - int index = FonctionHachage(Nom); - - if (0 <= index && index <= strlen(CHAINEHACHAGE)) { - Supprimer(&((*t)[index]), Nom); - } else { - return (0); - } - return (1); + int index = FonctionHachage(Nom); + + if (0 <= index && index <= strlen(CHAINEHACHAGE)) { + Supprimer(&((*t)[index]), Nom); + } else { + return (0); + } + return (1); } char InsererVarDansTab(_TableauVariable * t, _Element e) { - int index = FonctionHachage(e.NomVar); - - if (0 <= index && index <= strlen(CHAINEHACHAGE)) { - (*t)[index] = InserTete((*t)[index], e); - } else { - return (0); - } - return (1); + int index = FonctionHachage(e.NomVar); + + if (0 <= index && index <= strlen(CHAINEHACHAGE)) { + (*t)[index] = InserTete((*t)[index], e); + } else { + return (0); + } + return (1); } static _TypeVariable NomVarToVarListe(char *Nom, _ListeChaine l, char *trouve) { - *trouve = 0; - while (l != NULL) { - if (EgaliteChaine(Nom, (l->Elem).NomVar)) { - *trouve = 1; - return (l->Elem.Variable); - } - l = l->Suivant; + *trouve = 0; + while (l != NULL) { + if (EgaliteChaine(Nom, (l->Elem).NomVar)) { + *trouve = 1; + return (l->Elem.Variable); } + l = l->Suivant; + } #ifdef HAVE_CONFIG_H - return (NULL); + return (NULL); #else - return 0; + return 0; #endif } _TypeVariable NomVarToVar(char *Nom, _TableauVariable t, char *trouve) { - return (NomVarToVarListe(Nom, t[FonctionHachage(Nom)], trouve)); + return (NomVarToVarListe(Nom, t[FonctionHachage(Nom)], trouve)); } void AfficheListe(_ListeChaine l) { - while (l != NULL) { - fprintf(stderr, "%s\n", l->Elem.NomVar); - l = l->Suivant; - } + while (l != NULL) { + fprintf(stderr, "%s\n", l->Elem.NomVar); + l = l->Suivant; + } } void AfficheTableau(_TableauVariable t) { - unsigned int i; + unsigned int i; - for (i = 0; i < TAILLECHAINEHACHAGE; i++) { - AfficheListe(t[i]); - } + for (i = 0; i < TAILLECHAINEHACHAGE; i++) { + AfficheListe(t[i]); + } } int Initialise(_TableauVariable * t) { - unsigned int i; + unsigned int i; - (*t) = (_TableauVariable) Emalloc(sizeof(_ListeChaine) * (strlen(CHAINEHACHAGE) + 1)); - for (i = 0; i <= strlen(CHAINEHACHAGE); i++) { - (*t)[i] = NULL; - } - return (i); + + (*t) = + (_TableauVariable) Emalloc(sizeof(_ListeChaine) * + (strlen(CHAINEHACHAGE) + 1)); + for (i = 0; i <= strlen(CHAINEHACHAGE); i++) { + (*t)[i] = NULL; + } + return (i); } void DetruitTab(_TableauVariable * t) { - int i; + int i; - for (i = 0; i <= strlen(CHAINEHACHAGE); i++) { - Detruit(&((*t)[i])); - } + for (i = 0; i <= strlen(CHAINEHACHAGE); i++) { + Detruit(&((*t)[i])); + } - free(*t); - *t = NULL; + free(*t); + *t = NULL; } #ifndef HAVE_CONFIG_H int main(void) { - int c; - _TableauVariable t; - - Initialise(&t); - InsererVarDansTab(&t, CreerElement("yves", 14)); - InsererVarDansTab(&t, CreerElement("vomitif", 8)); - InsererVarDansTab(&t, CreerElement("vomi", 2)); - InsererVarDansTab(&t, CreerElement("Vomi", 25)); - InsererVarDansTab(&t, CreerElement("_vomi", 20)); - AfficheTableau(t); - printf("\n"); - SupprimerDansTab(&t, "Vomi"); - AfficheTableau(t); - - /* c'est a cause du ouindause qui ferme tout de suite l'exec, - mais moi je veux ce qu'il se passe */ - c = getc(stdin); - return (c); + int c; + _TableauVariable t; + + Initialise(&t); + InsererVarDansTab(&t, CreerElement("yves", 14)); + InsererVarDansTab(&t, CreerElement("vomitif", 8)); + InsererVarDansTab(&t, CreerElement("vomi", 2)); + InsererVarDansTab(&t, CreerElement("Vomi", 25)); + InsererVarDansTab(&t, CreerElement("_vomi", 20)); + AfficheTableau(t); + printf("\n"); + SupprimerDansTab(&t, "Vomi"); + AfficheTableau(t); + + /* c'est a cause du ouindause qui ferme tout de suite l'exec, + mais moi je veux ce qu'il se passe */ + c = getc(stdin); + return (c); } #endif |