Go to the source code of this file.
Functions | |
| Psommet | sommet_new (void) |
| Warning! Do not modify this file that is automatically generated! | |
| Psommet | sommet_make (Value, Pvecteur) |
| Psommet sommet_make(int d, Pvecteur v): allocation et initialisation d'un sommet de denominateur d et de vecteur v; le vecteur v est utilise directement; ca peut introduire du sharing;. | |
| Psommet | sommet_dup (Psommet) |
| Psommet sommet_dup(Psommet s_in): allocation et copie de la valeur d'un sommet. | |
| void | sommet_rm (Psommet) |
| void sommet_rm(Psommet s): desallocation complete d'une structure sommet | |
| void | dbg_sommet_rm (Psommet, char *) |
| void | sommet_fprint (FILE *, Psommet, char *(*)(Variable)) |
| void | sommet_fprint_as_dense (FILE *, Psommet, Pbase) |
| void sommet_fprint_as_dense(FILE * f, Psommet s): impression d'un sommet | |
| void | sommet_dump (Psommet) |
| void sommet_dump(Psommet s): impression d'un sommet sur stderr avec variable_dump_name() | |
| void | fprint_lsom (FILE *, Psommet, char *(*)(Variable)) |
| void | fprint_lsom_as_dense (FILE *, Psommet, Pbase) |
| void fprint_lsom_as_dense(FILE * f, Psommet s): impression d'une liste de sommets | |
| void | sommet_normalize (Psommet) |
| void sommet_normalize(Psommet ns): normalisation des coordonnees d'un sommet par le pgcd des coordonnees et du denominateur | |
| boolean | som_in_liste (Psommet, Psommet) |
| boolean som_in_liste(Psommet s, Psommet l): test de l'appartenance du sommet s a la liste de sommets l | |
| boolean | sommet_egal (Psommet, Psommet) |
| boolean sommet_egal(Psommet s1, Psommet s2): test de l'egalite de representation de deux sommets | |
| boolean | egaliste_s (Psommet, Psommet *) |
| boolean egaliste_s(Psommet l1, Psommet * ad_l2): test d'egalite de listes de sommets | |
| void | sommet_add (Psommet *, Psommet, int *) |
| void sommet_add(Psommet *ps, Psommet som, int *nb_soms): Ajout d'un sommet a une liste de sommets Le sommet est ajoute a la fin de la liste. | |
| Psommet | sommets_dup (Psommet) |
| sommets.c | |
| void | sommets_rm (Psommet) |
| void sommets_rm(Psommet ps): liberation de l'espace memoire alloue a une liste de sommets | |
| void | sommets_normalize (Psommet) |
| void sommets_normalize(som) Normalisation des elements d'une liste de sommets i.e. | |
| void dbg_sommet_rm | ( | Psommet | , | |
| char * | ||||
| ) |
Definition at line 113 of file sommet.c.
References dbg_vect_rm(), fprintf(), FREE, SOMMET, sommet_fprint(), and variable_dump_name().
00116 { 00117 (void) fprintf(stderr,"destruction de sommet dans %s : ",f); 00118 sommet_fprint(stderr, s, variable_dump_name); 00119 dbg_vect_rm(s->vecteur,f); 00120 FREE((char *)s,SOMMET,f); 00121 }

boolean egaliste_s(Psommet l1, Psommet * ad_l2): test d'egalite de listes de sommets
nous proposons un test direct au lieu d'un test en deux etapes d'inclusion dans les deux sens; ceci justifie le second parametre qui est l'adresse du pointeur de liste (Malik Imadache)
elements pour lesquels il reste a trouver un "jumeau" dans l1
adresse a laquelle il faudra raccrocher les elements de l2 successivement testes
on a trouve un element (eq21) de eq2 egal a l'element courant de l1; on remet donc eq21 dans l2, en distingant 2 cas suivant qu'il est en tete de eq2 ou pas
eq23 est le predecesseur de eq21 dans eq2 il faut le conserver pour enlever eq21 de eq2
eq21 est different de l'element de l1 qui est teste; il faut voir le reste de la liste eq2
on a trouve un element de l1 qui n'a pas de "jumeau" dans l2 => reformer l2 et sortir
tous les elements de l1 ont un jumeau (=> l1 est inclus dans l2) si tous les elements de l2 sont jumeaux (inclusion inverse) => egalite
dans le cas inverse reformer l2 et sortir
| l1 | 1 | |
| ad_l2 | d_l2 |
Definition at line 254 of file sommet.c.
References FALSE, NULL, sommet_egal(), typ_som::succ, and TRUE.
Referenced by egal_soms().
00256 { 00257 int egalite; 00258 Psommet eq1,eq2,eq21,eq23,*ad_aux; 00259 00260 if (l1==(*ad_l2)) return(TRUE); 00261 00262 /* elements pour lesquels il reste a trouver un "jumeau" dans l1 */ 00263 eq2 = *ad_l2; 00264 /* adresse a laquelle il faudra raccrocher les elements de l2 00265 successivement testes */ 00266 ad_aux = ad_l2; 00267 00268 (*ad_l2) = NULL; 00269 00270 for(eq1=l1;eq1!=NULL;eq1=eq1->succ) { 00271 egalite = 0; 00272 for(eq21=eq2,eq23=eq2;eq21!=NULL;) { 00273 if (sommet_egal(eq21,eq1)) { 00274 /* on a trouve un element (eq21) de eq2 egal a 00275 l'element courant de l1; on remet donc 00276 eq21 dans l2, en distingant 2 00277 cas suivant qu'il est en tete de 00278 eq2 ou pas 00279 */ 00280 /* eq23 est le predecesseur de eq21 dans eq2 00281 il faut le conserver pour enlever eq21 00282 de eq2 00283 */ 00284 if (eq21==eq2) { 00285 eq2=eq2->succ; 00286 eq21->succ = NULL; 00287 (*ad_aux) = eq21; 00288 ad_aux = &(eq21->succ); 00289 eq21 = eq23 = eq2; 00290 } 00291 else { 00292 eq23->succ = eq21->succ; 00293 eq21->succ = NULL; 00294 (*ad_aux) = eq21; 00295 ad_aux = &(eq21->succ); 00296 eq21 = eq23->succ; 00297 } 00298 egalite = 1; 00299 break; 00300 } 00301 else { 00302 /* eq21 est different de l'element de l1 00303 qui est teste; il faut voir le reste de 00304 la liste eq2 00305 */ 00306 eq23 = eq21; 00307 eq21 = eq21->succ; 00308 } 00309 } 00310 if (egalite == 0) { 00311 /* on a trouve un element de l1 qui n'a pas 00312 de "jumeau" dans l2 => reformer l2 et sortir 00313 */ 00314 (* ad_aux) = eq2; 00315 return(FALSE); 00316 } 00317 else egalite = 0; 00318 } 00319 if (eq2==NULL) 00320 /* tous les elements de l1 ont un jumeau 00321 (=> l1 est inclus dans l2) 00322 si tous les elements de l2 sont jumeaux 00323 (inclusion inverse) => egalite 00324 */ 00325 return(TRUE); 00326 else 00327 /* dans le cas inverse reformer l2 et sortir */ 00328 (*ad_aux) = eq2; 00329 return(FALSE); 00330 }


| void fprint_lsom | ( | FILE * | , | |
| Psommet | , | |||
| char * | *)(Variable | |||
| ) |
void fprint_lsom_as_dense(FILE * f, Psommet s): impression d'une liste de sommets
Definition at line 187 of file sommet.c.
References e, NULL, sommet_fprint_as_dense(), and typ_som::succ.
Referenced by prettyprint_dependence_graph(), prettyprint_dot_dependence_graph(), and sg_fprint_as_dense().
00191 { 00192 Psommet e; 00193 for (e = ls; e != NULL; e = e->succ) { 00194 sommet_fprint_as_dense(f, e, b); 00195 } 00196 }


boolean som_in_liste(Psommet s, Psommet l): test de l'appartenance du sommet s a la liste de sommets l
Les coordonnees du sommet s et des sommets de la liste l sont supposees normalisees (fractions reduites)
| listes | istes |
Definition at line 218 of file sommet.c.
References typ_som::denominateur, FALSE, NULL, s1, typ_som::succ, TRUE, vect_equal(), and typ_som::vecteur.
00221 { 00222 Psommet s1; 00223 00224 for (s1=listes;s1!=NULL;s1=s1->succ) { 00225 if ((s1->denominateur)==(s->denominateur)) { 00226 if (vect_equal((s1->vecteur),(s->vecteur))) return(TRUE); 00227 } 00228 } 00229 return(FALSE); 00230 }

void sommet_add(Psommet *ps, Psommet som, int *nb_soms): Ajout d'un sommet a une liste de sommets Le sommet est ajoute a la fin de la liste.
Definition at line 338 of file sommet.c.
References NULL, and typ_som::succ.
Referenced by eq_in_ineq(), plint_degen(), and plint_pas().
00341 { 00342 00343 if (som != NULL) 00344 { 00345 Psommet pred,ps1; 00346 00347 pred = *ps; 00348 for (ps1 = pred; ps1 != NULL; pred = ps1, ps1 = ps1->succ); 00349 pred->succ = som; 00350 som->succ = NULL; 00351 *nb_som = (*nb_som) +1; 00352 } 00353 }

| void sommet_dump | ( | Psommet | ) |
void sommet_dump(Psommet s): impression d'un sommet sur stderr avec variable_dump_name()
Definition at line 164 of file sommet.c.
References sommet_fprint(), and variable_dump_name().
00166 { 00167 sommet_fprint(stderr, s, variable_dump_name); 00168 }

Psommet sommet_dup(Psommet s_in): allocation et copie de la valeur d'un sommet.
Definition at line 78 of file sommet.c.
References typ_som::denominateur, typ_som::eq_sat, fprintf(), MALLOC, NULL, SOMMET, typ_som::succ, vect_dup(), and typ_som::vecteur.
Referenced by sg_dup(), sg_union(), sommets_dup(), and sommets_dupc().
00080 { 00081 Psommet s_out; 00082 00083 s_out = (Psommet) MALLOC(sizeof(Ssommet), SOMMET, "sommet_dup"); 00084 00085 if(s_in->eq_sat!=NULL) { 00086 (void) fprintf(stderr, 00087 "sommet_dup: warning eq_sat is not duplicated\n"); 00088 } 00089 00090 if(s_in->denominateur==0) { 00091 (void) fprintf(stderr,"sommet_dup: denominateur nul\n"); 00092 abort(); 00093 } 00094 00095 s_out = (Psommet) MALLOC(sizeof(Ssommet),SOMMET,"sommet_dup"); 00096 s_out->succ = NULL; 00097 s_out->eq_sat = NULL; 00098 s_out->vecteur = vect_dup(s_in->vecteur); 00099 s_out->denominateur = s_in->denominateur; 00100 00101 return s_out; 00102 }


boolean sommet_egal(Psommet s1, Psommet s2): test de l'egalite de representation de deux sommets
Il faut en normaliser les coordonnees d'abord si on veut une egalite de valeur
| s1 | 1 | |
| s2 | 2 |
Definition at line 238 of file sommet.c.
References FALSE, sommet_denominateur, and vect_equal().
Referenced by egaliste_s().
00240 { 00241 if (sommet_denominateur(s1)!=sommet_denominateur(s2)) 00242 return(FALSE); 00243 else 00244 return(vect_equal(s1->vecteur,s2->vecteur)); 00245 }


| void sommet_fprint | ( | FILE * | , | |
| Psommet | , | |||
| char * | *)(Variable | |||
| ) |
void sommet_fprint_as_dense(FILE * f, Psommet s): impression d'un sommet
Definition at line 148 of file sommet.c.
References typ_som::denominateur, fprint_Value(), fprintf(), value_notone_p, vect_fprint_as_dense(), and typ_som::vecteur.
Referenced by fprint_lsom_as_dense().
00152 { 00153 if(value_notone_p(s->denominateur)) { 00154 (void) fprintf(f,"denominator = "); 00155 fprint_Value(f,s->denominateur); 00156 (void) fprintf(f, "\t"); 00157 } 00158 vect_fprint_as_dense(f,s->vecteur, b); 00159 }


Psommet sommet_make(int d, Pvecteur v): allocation et initialisation d'un sommet de denominateur d et de vecteur v; le vecteur v est utilise directement; ca peut introduire du sharing;.
Definition at line 63 of file sommet.c.
References typ_som::denominateur, s, sommet_new(), and typ_som::vecteur.
Referenced by mk_rn(), and polyhedron_to_sg().
00066 { 00067 Psommet s; 00068 00069 s = sommet_new(); 00070 s->denominateur = d; 00071 s->vecteur = v; 00072 return (s); 00073 }


| Psommet sommet_new | ( | void | ) |
Warning! Do not modify this file that is automatically generated!
Modify src/Libs/sommet/sommet-local.h instead, to add your own modifications. header file built by cprotopackage sommet: structure de donnees representant les sommets d'un systeme generateur; elle contient:
Francois Irigoin, Mai 1989
Cette structure de donnees est aussi utilisee dans plint.dir pour representer la fonction economique, les contraintes lineaires et les systemes de contraintes lineaires.
FI: commentaires a completer par Corinne, declaration d'un type synonyme pour eviter les conflits?SOMMETsommet.c
Definition at line 47 of file sommet.c.
References typ_som::denominateur, typ_som::eq_sat, MALLOC, NULL, s, SOMMET, typ_som::succ, and typ_som::vecteur.
Referenced by fonct_init(), fonct_max(), fonct_max_all(), fonct_max_d(), fonct_min(), fonct_min_all(), fonct_min_d(), fonct_read(), and sommet_make().
00048 { 00049 Psommet s; 00050 00051 s = (Psommet) MALLOC(sizeof(Ssommet), SOMMET, "sommet_dup"); 00052 s->denominateur =0; 00053 s->vecteur = NULL; 00054 s->eq_sat =NULL; 00055 s->succ = NULL; 00056 return (s); 00057 }

| void sommet_normalize | ( | Psommet | ) |
void sommet_normalize(Psommet ns): normalisation des coordonnees d'un sommet par le pgcd des coordonnees et du denominateur
Definition at line 201 of file sommet.c.
References assert, pgcd, value_division, value_pos_p, vect_div(), and vect_pgcd_all().
Referenced by sommets_normalize().
00203 { 00204 Value div = vect_pgcd_all(ns->vecteur); 00205 00206 assert(value_pos_p(div)); 00207 div = pgcd(div, ns->denominateur); 00208 value_division(ns->denominateur,div); 00209 (void) vect_div(ns->vecteur, div); 00210 }


| void sommet_rm | ( | Psommet | ) |
pointeur vers le dernier element de la liste
pointeur vers le premier element de la liste
| som | om |
Definition at line 45 of file sommets.c.
References NULL, printf(), sommet_dup(), and typ_som::succ.
00047 { 00048 00049 Psommet som1,som2; 00050 /* pointeur vers le dernier element de la liste*/ 00051 Psommet pred; 00052 /* pointeur vers le premier element de la liste*/ 00053 Psommet debut = NULL; 00054 00055 00056 #ifdef TRACE 00057 printf(" ***** duplication du systeme \n"); 00058 #endif 00059 if (som) 00060 { 00061 som2 = sommet_dup(som); 00062 debut = som2; 00063 pred = som2; 00064 for (som1 = som->succ; som1 != NULL; som1 = som1->succ) 00065 { 00066 00067 som2 = sommet_dup(som1); 00068 pred->succ = som2; 00069 pred = som2; 00070 }; 00071 }; 00072 return (debut); 00073 }

| void sommets_normalize | ( | Psommet | som | ) |
void sommets_normalize(som) Normalisation des elements d'une liste de sommets i.e.
division par le pgcd de tous les elements.
| som | om |
Definition at line 104 of file sommets.c.
References NULL, sommet_normalize(), and typ_som::succ.
Referenced by eq_in_ineq(), pivoter(), and primal_pivot().
00106 { 00107 Psommet ps; 00108 for (ps = som;ps!= NULL; ps= ps->succ) 00109 sommet_normalize(ps); 00110 }


| void sommets_rm | ( | Psommet | ps | ) |
void sommets_rm(Psommet ps): liberation de l'espace memoire alloue a une liste de sommets
| ps | s |
Definition at line 79 of file sommets.c.
References typ_som::eq_sat, FREE, NULL, printf(), SOMMET, typ_som::succ, vect_rm(), and typ_som::vecteur.
Referenced by dual_pivot(), dual_pivot_pas(), find_eg(), gomory_eq(), plint(), plint_degen(), plint_pas(), plreal(), primal(), primal_pivot(), and primal_positive().
00081 { 00082 Psommet p1,p2; 00083 00084 #ifdef TRACE2 00085 printf(" ***** erase systeme \n"); 00086 #endif 00087 00088 for (p2 = ps;p2 != NULL;) 00089 { 00090 p1 = p2->succ; 00091 FREE((int *)p2->eq_sat,INTEGER,"sommets_rm"); 00092 vect_rm(p2->vecteur); 00093 FREE((Psommet)p2,SOMMET,"sommets_rm"); 00094 p2 = p1; 00095 } 00096 00097 }


1.6.2-20100208