PIPS
sg.h File Reference

Go to the source code of this file.

Data Structures

struct  ttsg_soms
 Representation d'un ensemble de sommets. More...
 
struct  ttsg_vects
 Representation d'un ensemble de droites. More...
 
struct  type_sg
 Representation d'un systeme generateur par trois ensembles de sommets de rayons et de droites. More...
 

Macros

#define TSG   101
 Warning! Do not modify this file that is automatically generated! More...
 
#define TSGSOMS   103
 
#define TSGVECTS   104
 
#define SG_UNDEFINED   ((Ptsg) NULL)
 
#define SG_UNDEFINED_P(sg)   ((sg)==(SG_UNDEFINED))
 
#define sg_sommets(sg)   ((sg)->soms_sg.ssg)
 vieilles definitions des fonctions d'impression void sg_fprint(); #define print_sg(sg) sg_fprint(stdout,sg) More...
 
#define sg_rayons(sg)   ((sg)->rays_sg.vsg)
 acces au premier rayon de la liste des rayons d'un systeme generateur defini par un pointeur: sg_rayons(Ptsg) More...
 
#define sg_droites(sg)   ((sg)->dtes_sg.vsg)
 acces a la premiere droite de la liste des droites d'un systeme generateur defini par un pointeur: sg_droites(Ptsg) More...
 
#define sg_nbre_sommets(sg)   ((sg)->soms_sg.nb_s)
 nombre de sommets: int sg_nbre_sommets(Ptsg) More...
 
#define sg_nbre_rayons(sg)   ((sg)->rays_sg.nb_v)
 nombre de rayons: int sg_nbre_rayons(Ptsg) More...
 
#define sg_nbre_droites(sg)   ((sg)->dtes_sg.nb_v)
 nombre de droites: int sg_nbre_droites(Ptsg) More...
 
#define sg_base(sg)   ((sg)->base)
 Basis used for the generating system. More...
 
#define sg_empty(sg)    ((sg)->soms_sg.nb_s==0 &&(sg)-> rays_sg.nb_v == 0 && (sg)->dtes_sg.nb_v == 0)
 Test for an empty generating system, which corresponds to an empty set. More...
 

Typedefs

typedef struct ttsg_somsPtsg_soms
 Representation d'un ensemble de sommets. More...
 
typedef struct ttsg_soms Stsg_soms
 
typedef struct ttsg_vectsPtsg_vects
 Representation d'un ensemble de droites. More...
 
typedef struct ttsg_vects Stsg_vects
 
typedef struct type_sgPtsg
 Representation d'un systeme generateur par trois ensembles de sommets de rayons et de droites. More...
 
typedef struct type_sg Stsg
 

Functions

Ptsg sg_new (void)
 Obsolete macros of Malik Imadache #define soms_of_sg(sg) (((sg).soms_sg).ssg) #define rays_of_sg(sg) (((sg).rays_sg).vsg) #define dtes_of_sg(sg) (((sg).dtes_sg).vsg) More...
 
Ptsg sg_dup (Ptsg)
 Ptsg sg_dup(Ptsg sg_in): allocation d'un systeme generateur sg_out et copie sans sharing des ensembles de rayons, de droites et de sommets de l'argument sg_in. More...
 
Ptsg sg_without_line (Ptsg)
 Ptsg sg_without_line(Ptsg sg_in): allocation d'un systeme generateur et copie d'un systeme generateur dont on transforme les lignes en rayons. More...
 
Ptsg sg_add_ray (Ptsg, Pray_dte)
 Ptsg sg_add_ray(Ptsg sg, Pray_dte ray): ajout d'un rayon a un syteme generateur; aucune allocation n'est affectuee; il y a donc risque de sharing pour le rayon ray; l'argument sg est modifie. More...
 
void sg_rm_sommets (Ptsg)
 void sg_rm_sommets(Ptsg sg): desallocation d'une liste de sommets d'un systeme generateur More...
 
void sg_rm_rayons (Ptsg)
 void sg_rm_rayons(Ptsg sg): desallocation d'une liste de rayons d'un systeme generateur More...
 
void sg_rm_droites (Ptsg)
 void sg_rm_droites(Ptsg sg): desallocation d'une liste de droites d'un systeme generateur More...
 
void sg_rm (Ptsg)
 void sg_rm(Ptsg sg): liberation de l'espace memoire occupe par un systeme generateur More...
 
void sg_fprint (FILE *, Ptsg, char *(*)(Variable))
 
void sg_print (Ptsg, char *(*)(Variable))
 
void sg_dump (Ptsg)
 For debugging. More...
 
void sg_fprint_as_dense (FILE *, Ptsg, Pbase)
 void sg_fprint_as_dense(FILE * f, Ptsg sg): impression d'un systeme generateur More...
 
void sg_fprint_as_ddv (FILE *, Ptsg)
 
bool sg_egal (Ptsg, Ptsg)
 bool sg_egal(Ptsg sg1, Ptsg sg2): test de l'egalite de deux systemes generateur sg1 et sg2 More...
 
Ptsg mk_rn (Pbase)
 Ptsg mk_rn(Pbase b): construction du systeme generateur du polyedre qui represente l'espace entier; le systeme de contraintes correspondant est vide: il ne contient ni egalite ni inegalite non triviale;. More...
 
Ptsg ajout_dte (Ptsg, Variable)
 Ptsg ajout_dte(Ptsg sg, Variable v): ajoute une droite dans la direction correspondant a la variable v. More...
 
bool sommet_in_sg_p (Psommet, Ptsg)
 
bool ray_in_sg_p (Pray_dte, Ptsg)
 
bool dte_in_sg_p (Pray_dte, Ptsg)
 
Ptsg sg_union (Ptsg, Ptsg)
 

Macro Definition Documentation

◆ sg_base

#define sg_base (   sg)    ((sg)->base)

Basis used for the generating system.

Definition at line 113 of file sg.h.

◆ sg_droites

#define sg_droites (   sg)    ((sg)->dtes_sg.vsg)

acces a la premiere droite de la liste des droites d'un systeme generateur defini par un pointeur: sg_droites(Ptsg)

Definition at line 101 of file sg.h.

◆ sg_empty

#define sg_empty (   sg)     ((sg)->soms_sg.nb_s==0 &&(sg)-> rays_sg.nb_v == 0 && (sg)->dtes_sg.nb_v == 0)

Test for an empty generating system, which corresponds to an empty set.

Definition at line 116 of file sg.h.

◆ sg_nbre_droites

#define sg_nbre_droites (   sg)    ((sg)->dtes_sg.nb_v)

nombre de droites: int sg_nbre_droites(Ptsg)

Definition at line 110 of file sg.h.

◆ sg_nbre_rayons

#define sg_nbre_rayons (   sg)    ((sg)->rays_sg.nb_v)

nombre de rayons: int sg_nbre_rayons(Ptsg)

Definition at line 107 of file sg.h.

◆ sg_nbre_sommets

#define sg_nbre_sommets (   sg)    ((sg)->soms_sg.nb_s)

nombre de sommets: int sg_nbre_sommets(Ptsg)

Definition at line 104 of file sg.h.

◆ sg_rayons

#define sg_rayons (   sg)    ((sg)->rays_sg.vsg)

acces au premier rayon de la liste des rayons d'un systeme generateur defini par un pointeur: sg_rayons(Ptsg)

Definition at line 97 of file sg.h.

◆ sg_sommets

#define sg_sommets (   sg)    ((sg)->soms_sg.ssg)

vieilles definitions des fonctions d'impression void sg_fprint(); #define print_sg(sg) sg_fprint(stdout,sg)

macros d'acces aux champs acces au premier sommet de la liste des sommets d'un systeme generateur defini par un pointeur: sg_sommets(Ptsg)

Definition at line 93 of file sg.h.

◆ SG_UNDEFINED

#define SG_UNDEFINED   ((Ptsg) NULL)

Definition at line 81 of file sg.h.

◆ SG_UNDEFINED_P

#define SG_UNDEFINED_P (   sg)    ((sg)==(SG_UNDEFINED))

Definition at line 82 of file sg.h.

◆ TSG

#define TSG   101

Warning! Do not modify this file that is automatically generated!

Modify src/Libs/sg/sg-local.h instead, to add your own modifications. header file built by cproto sg-local.h package sur les systemes generateur sg

Francois Irigoin, Mai 1989

packages a inclure: boolean.h, arithmetique.h, variable.h, vecteur.h, ray_dte.h et sommet.h

package utilisateur: polyedre.h

Definition at line 44 of file sg.h.

◆ TSGSOMS

#define TSGSOMS   103

Definition at line 45 of file sg.h.

◆ TSGVECTS

#define TSGVECTS   104

Definition at line 46 of file sg.h.

Typedef Documentation

◆ Ptsg

typedef struct type_sg * Ptsg

Representation d'un systeme generateur par trois ensembles de sommets de rayons et de droites.

L'ensemble vide est represente par un systeme generateur n'ayant aucun element dans ces trois ensembles (soms_sg.nb_s==0 && rays_sg.nb_v == 0 && dtes_sg.nb_v == 0)

L'espace tout entier Rn est represente par n droites et un sommet. Par convention ce sommet est l'origine.

La dimension de l'espace contenant le polyedre genere n'est pas accessible directement. Il faut parcourir tous les elements generateurs et chercher leurs coordonnees non nulles.

◆ Ptsg_soms

typedef struct ttsg_soms * Ptsg_soms

Representation d'un ensemble de sommets.

◆ Ptsg_vects

typedef struct ttsg_vects * Ptsg_vects

Representation d'un ensemble de droites.

◆ Stsg

typedef struct type_sg Stsg

◆ Stsg_soms

typedef struct ttsg_soms Stsg_soms

◆ Stsg_vects

typedef struct ttsg_vects Stsg_vects

Function Documentation

◆ ajout_dte()

Ptsg ajout_dte ( Ptsg  sg,
Variable  v 
)

Ptsg ajout_dte(Ptsg sg, Variable v): ajoute une droite dans la direction correspondant a la variable v.

creation

ajout

Parameters
sgg

Definition at line 487 of file sg.c.

490 {
491  Pray_dte dte;
492 
493  /* creation */
494 
495  dte = (Pray_dte ) MALLOC(sizeof(Sray_dte),RAY_DTE,"ajout_dte");
496  dte->vecteur = vect_new(v, VALUE_ONE);
497 
498  /* ajout */
499 
500  dte->succ = sg_droites(sg);
501  sg_droites(sg) = dte;
502  sg_nbre_droites(sg)++;
503  return(sg);
504 }
#define VALUE_ONE
Ptsg sg
struct rdte * Pray_dte
#define RAY_DTE
package ray_dte: structure de donnees representant les rayons et les droites d'un systeme generateur;...
Definition: ray_dte-local.h:41
#define sg_nbre_droites(sg)
nombre de droites: int sg_nbre_droites(Ptsg)
Definition: sg-local.h:102
#define sg_droites(sg)
acces a la premiere droite de la liste des droites d'un systeme generateur defini par un pointeur: sg...
Definition: sg-local.h:93
#define MALLOC(s, t, f)
Definition: sg.c:49
struct rdte * succ
Definition: ray_dte-local.h:46
struct Svecteur * vecteur
Definition: ray_dte-local.h:45
Pvecteur vect_new(Variable var, Value coeff)
Pvecteur vect_new(Variable var,Value coeff): allocation d'un vecteur colineaire au vecteur de base va...
Definition: alloc.c:110

References MALLOC, RAY_DTE, sg, sg_droites, sg_nbre_droites, rdte::succ, VALUE_ONE, vect_new(), and rdte::vecteur.

+ Here is the call graph for this function:

◆ dte_in_sg_p()

bool dte_in_sg_p ( Pray_dte  dte,
Ptsg  sg 
)
Parameters
dtete
sgg

Definition at line 537 of file sg.c.

540 {
541  Pray_dte pr;
542  bool trouve = false;
543 
544  if (!SG_UNDEFINED_P(sg)) {
545  for (pr = sg->dtes_sg.vsg; pr != NULL; pr=pr->succ) {
546  trouve = trouve || vect_equal(dte->vecteur,pr->vecteur);
547  }
548  }
549  return (trouve);
550 }
bool vect_equal(Pvecteur v1, Pvecteur v2)
bool vect_equal(Pvecteur v1, Pvecteur v2): test a egalite de deux vecteurs
Definition: reductions.c:278
#define SG_UNDEFINED_P(sg)
Definition: sg-local.h:74
Pray_dte vsg
Definition: sg-local.h:49
Stsg_vects dtes_sg
Definition: sg-local.h:69

References type_sg::dtes_sg, sg, SG_UNDEFINED_P, rdte::succ, vect_equal(), rdte::vecteur, and ttsg_vects::vsg.

Referenced by sg_union().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ mk_rn()

Ptsg mk_rn ( Pbase  b)

Ptsg mk_rn(Pbase b): construction du systeme generateur du polyedre qui represente l'espace entier; le systeme de contraintes correspondant est vide: il ne contient ni egalite ni inegalite non triviale;.

Modifications:

  • remplacement du parametre entier dim par une base (FI, 18/12/89)

un sommet a l'origine

il n'y a aucun rayon

enfin, une droite par dimension

Definition at line 451 of file sg.c.

453 {
454  Ptsg sg;
455  Pray_dte d;
456 
457  ifdebug(8) (void) fprintf(stderr,"mk_rn: begin\n");
458 
459  sg = sg_new();
460 
461  /* un sommet a l'origine */
462  (sg->soms_sg).nb_s = 1;
464 
465  /* il n'y a aucun rayon */
466  (sg->rays_sg).nb_v = 0;
467  (sg->rays_sg).vsg = NULL;
468 
469  /* enfin, une droite par dimension */
470  (sg->dtes_sg).nb_v = base_dimension(b);
471  (sg->dtes_sg).vsg = NULL;
472  for (;!VECTEUR_NUL_P(b); b = b->succ) {
474  d->succ = (sg->dtes_sg).vsg;
475  (sg->dtes_sg).vsg = d;
476  }
477  ifdebug(8) {
478  sg_fprint(stderr, sg, variable_dump_name);
479  (void) fprintf(stderr,"mk_rn: end\n");
480  }
481  return(sg);
482 }
char * variable_dump_name(Variable v)
variable_dump_name() returns an unambiguous name for variable v, based on the pointer used to really ...
Definition: variable.c:96
Pray_dte ray_dte_make(Pvecteur v)
Pray_dte ray_dte_make(Pvecteur v): allocation et initialisation d'une structure ray_dte;.
Definition: ray_dte.c:108
int fprintf()
test sc_min : ce test s'appelle par : programme fichier1.data fichier2.data ...
Ptsg sg_new()
Ptsg sg_new(): allocation d'un systeme generateur et initialisation a la valeur ensemble vide.
Definition: sg.c:55
#define ifdebug(n)
Definition: sg.c:47
void sg_fprint(FILE *f, Ptsg sg, char *(*nom_var)(Variable))
void sg_fprint(FILE * f, Ptsg sg, char * (*nom_var)()): impression d'un systeme generateur
Definition: sg.c:262
Psommet sommet_make(Value d, Pvecteur v)
Psommet sommet_make(int d, Pvecteur v): allocation et initialisation d'un sommet de denominateur d et...
Definition: sommet.c:67
struct Svecteur * succ
Definition: vecteur-local.h:92
Representation d'un systeme generateur par trois ensembles de sommets de rayons et de droites.
Definition: sg-local.h:66
Stsg_vects rays_sg
Definition: sg-local.h:68
Stsg_soms soms_sg
Definition: sg-local.h:67
#define vecteur_var(v)
#define VECTEUR_NUL
DEFINITION DU VECTEUR NUL.
#define VECTEUR_NUL_P(v)
#define base_dimension(b)

References base_dimension, type_sg::dtes_sg, fprintf(), ifdebug, ray_dte_make(), type_sg::rays_sg, sg, sg_fprint(), sg_new(), sommet_make(), type_sg::soms_sg, rdte::succ, Svecteur::succ, VALUE_ONE, variable_dump_name(), vect_new(), VECTEUR_NUL, VECTEUR_NUL_P, and vecteur_var.

+ Here is the call graph for this function:

◆ ray_in_sg_p()

bool ray_in_sg_p ( Pray_dte  ray,
Ptsg  sg 
)
Parameters
rayay
sgg

Definition at line 522 of file sg.c.

525 {
526  Pray_dte pr;
527  bool trouve = false;
528 
529  if (!SG_UNDEFINED_P(sg)) {
530  for (pr = sg->rays_sg.vsg; pr != NULL; pr=pr->succ) {
531  trouve = trouve || vect_equal(ray->vecteur,pr->vecteur);
532  }
533  }
534  return (trouve);
535 }

References type_sg::rays_sg, sg, SG_UNDEFINED_P, rdte::succ, vect_equal(), rdte::vecteur, and ttsg_vects::vsg.

Referenced by sg_union().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sg_add_ray()

Ptsg sg_add_ray ( Ptsg  sg,
Pray_dte  ray 
)

Ptsg sg_add_ray(Ptsg sg, Pray_dte ray): ajout d'un rayon a un syteme generateur; aucune allocation n'est affectuee; il y a donc risque de sharing pour le rayon ray; l'argument sg est modifie.

Aucune elimination de redondance pour le moment. On peut en envisager trois niveaux: egalite entre rayons, proportionalite entre rayons et combinaison lineaire positive de rayons.

chainage en tete de la liste des rayons

Parameters
sgg
rayay

Definition at line 189 of file sg.c.

192 {
193  /* chainage en tete de la liste des rayons */
194  ray = sg->rays_sg.vsg;
195  sg->rays_sg.vsg = ray;
196 
197  return sg;
198 }

References type_sg::rays_sg, sg, and ttsg_vects::vsg.

◆ sg_dump()

void sg_dump ( Ptsg  sg)

For debugging.

Parameters
sgg

Definition at line 288 of file sg.c.

289 {
291 }
void sg_print(Ptsg sg, char *(*nom_var)(Variable))
For debugging.
Definition: sg.c:282

References sg, sg_print(), and variable_dump_name().

+ Here is the call graph for this function:

◆ sg_dup()

Ptsg sg_dup ( Ptsg  sg_in)

Ptsg sg_dup(Ptsg sg_in): allocation d'un systeme generateur sg_out et copie sans sharing des ensembles de rayons, de droites et de sommets de l'argument sg_in.

sg_in n'est pas modifie

Autre nom (obsolete): cp_sg()

Extension: duplicate undefined generating systems (FI, 22 May 2009)

sc_dup() has been replaced by sc_copy() which maintains the order in the data structure lists. Maybe we need the same change for generating systems.

duplication de la liste des sommets

duplication de la liste des rayons

duplication de la liste des droites

Parameters
sg_ing_in

Definition at line 84 of file sg.c.

85 {
86  Ptsg sg_out = SG_UNDEFINED;
87 
88  if(!SG_UNDEFINED_P(sg_in)) {
89  Pray_dte rd;
90  Pray_dte rd_new;
91  Psommet s;
92  Psommet s_new;
93 
94  sg_out = sg_new();
95 
96  /* duplication de la liste des sommets */
97  sg_out->soms_sg.nb_s = sg_in->soms_sg.nb_s;
98  for(s = sg_in->soms_sg.ssg; s != NULL; s = s->succ) {
99  s_new = sommet_dup(s);
100  s_new->succ = sg_out->soms_sg.ssg;
101  sg_out->soms_sg.ssg = s_new;
102  }
103 
104  /* duplication de la liste des rayons */
105  sg_out->rays_sg.nb_v = sg_in->rays_sg.nb_v;
106  for(rd = sg_in->rays_sg.vsg; rd != NULL; rd = rd->succ) {
107  rd_new = ray_dte_dup(rd);
108  rd_new->succ = sg_out->rays_sg.vsg;
109  sg_out->rays_sg.vsg = rd_new;
110  }
111 
112  /* duplication de la liste des droites */
113  sg_out->dtes_sg.nb_v = sg_in->dtes_sg.nb_v;
114  for(rd = sg_in->dtes_sg.vsg; rd != NULL; rd = rd->succ) {
115  rd_new = ray_dte_dup(rd);
116  rd_new->succ = sg_out->dtes_sg.vsg;
117  sg_out->dtes_sg.vsg = rd_new;
118  }
119 
120  sg_out->base = base_dup(sg_in->base);
121  }
122  return sg_out;
123 }
Pray_dte ray_dte_dup(Pray_dte rd_in)
Pray_dte ray_dte_dup(Pray_dte rd_in): duplication (allocation et copie) d'une structure ray_dte;.
Definition: ray_dte.c:66
#define SG_UNDEFINED
Definition: sg-local.h:73
Psommet sommet_dup(Psommet s_in)
Psommet sommet_dup(Psommet s_in): allocation et copie de la valeur d'un sommet.
Definition: sommet.c:82
struct typ_som * ssg
Definition: sg-local.h:43
int nb_s
Definition: sg-local.h:42
int nb_v
Definition: sg-local.h:48
structure de donnees Sommet
Definition: sommet-local.h:64
struct typ_som * succ
Definition: sommet-local.h:68
Pbase base
Definition: sg-local.h:70
Pbase base_dup(Pbase b)
Pbase base_dup(Pbase b) Note: this function changes the value of the pointer.
Definition: alloc.c:268

References type_sg::base, base_dup(), type_sg::dtes_sg, ttsg_soms::nb_s, ttsg_vects::nb_v, ray_dte_dup(), type_sg::rays_sg, sg_new(), SG_UNDEFINED, SG_UNDEFINED_P, sommet_dup(), type_sg::soms_sg, ttsg_soms::ssg, rdte::succ, typ_som::succ, and ttsg_vects::vsg.

Referenced by conflict_dup(), initialize_newgen(), sg_union(), and sg_without_line().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sg_egal()

bool sg_egal ( Ptsg  sg1,
Ptsg  sg2 
)

bool sg_egal(Ptsg sg1, Ptsg sg2): test de l'egalite de deux systemes generateur sg1 et sg2

Ce test suppose que les deux systemes ont ete prealablement normalises:

  • reduction des coordonnees des sommets, des rayons et des droites par leur PGCD
  • suppression des doublons dans les listes
  • suppression des rayons qui sont des droites
  • representation unique des vecteurs directeurs des droites (vecteur lexicopositif par exemple)
  • suppression des vecteurs nuls comme rayon ou droite
  • absence d'elements redondants dans les systemes generateurs

Ancien nom: sg_egal()

Parameters
sg1g1
sg2g2

Definition at line 434 of file sg.c.

436 {
437  if (! egal_soms(&(sg1->soms_sg) ,&(sg2->soms_sg) ) ) return(false);
438  if (sg_nbre_sommets(sg1) == 0) return(true);
439  if (! egal_rd(&(sg1->rays_sg),&(sg2->rays_sg))) return(false);
440  if (! egal_rd(&(sg1->dtes_sg),&(sg2->dtes_sg))) return(false);
441  return(true);
442 }
#define sg_nbre_sommets(sg)
nombre de sommets: int sg_nbre_sommets(Ptsg)
Definition: sg-local.h:96
static bool egal_soms(Ptsg_soms sgs1, Ptsg_soms sgs2)
bool egal_soms(Ptsg_soms sgs1, Ptsg_soms sgs2): test de l'egalite de deux listes de sommets associees...
Definition: sg.c:396
static bool egal_rd(Ptsg_vects rdgs1, Ptsg_vects rdgs2)
bool egal_rd(Ptsg_vects rdgs1, Ptsg_vects rdgs2): test de de l'egalite des deux objets representes pa...
Definition: sg.c:410

References egal_rd(), egal_soms(), and sg_nbre_sommets.

+ Here is the call graph for this function:

◆ sg_fprint()

void sg_fprint ( FILE *  ,
Ptsg  ,
char *  *)(Variable 
)

◆ sg_fprint_as_ddv()

void sg_fprint_as_ddv ( FILE *  fd,
Ptsg  sg 
)

For each coordinate

For all vertices

For all rays

For all lines

Parameters
fdd
sgg

Definition at line 341 of file sg.c.

344 {
345  Pbase c = BASE_NULLE;
346  int ddv = 0;
347 
348  fprintf(fd, "ddv(");
349 
350  /* For each coordinate */
351  for(c=sg->base; !BASE_NULLE_P(c); c = c->succ) {
352  Psommet v;
353  Pray_dte r;
354  Pray_dte l;
355 
356  /* For all vertices */
357  for(v=sg_sommets(sg); v!= NULL; v = v->succ) {
359  }
360 
361  /* For all rays */
362  for(r=sg_rayons(sg); r!= NULL; r = r->succ) {
364  }
365 
366  /* For all lines */
367  for(l=sg_droites(sg); l!= NULL; l = l->succ) {
369  }
370 
371  fprintf(fd, c==sg->base? "%s" : ",%s", direction_to_representation[ddv]);
372  }
373 
374  fprintf(fd, ")");
375 }
#define value_sign(v)
trian operators on values
#define sg_sommets(sg)
vieilles definitions des fonctions d'impression void sg_fprint(); #define print_sg(sg) sg_fprint(stdo...
Definition: sg-local.h:85
#define sg_rayons(sg)
acces au premier rayon de la liste des rayons d'un systeme generateur defini par un pointeur: sg_rayo...
Definition: sg-local.h:89
static int ray_to_direction[3]
Definition: sg.c:334
static char * direction_to_representation[8]
Definition: sg.c:338
static int vertex_to_direction[3]
Definition: sg.c:332
static int line_to_direction[3]
Definition: sg.c:336
le type des coefficients dans les vecteurs: Value est defini dans le package arithmetique
Definition: vecteur-local.h:89
Pvecteur vecteur
Definition: sommet-local.h:66
#define BASE_NULLE
MACROS SUR LES BASES.
#define BASE_NULLE_P(b)
Value vect_coeff(Variable var, Pvecteur vect)
Variable vect_coeff(Variable var, Pvecteur vect): coefficient de coordonnee var du vecteur vect —> So...
Definition: unaires.c:228

References type_sg::base, BASE_NULLE, BASE_NULLE_P, direction_to_representation, fprintf(), line_to_direction, ray_to_direction, sg, sg_droites, sg_rayons, sg_sommets, rdte::succ, typ_som::succ, Svecteur::succ, value_sign, vect_coeff(), rdte::vecteur, typ_som::vecteur, vecteur_var, and vertex_to_direction.

Referenced by check_for_conflict(), prettyprint_dependence_graph(), and prettyprint_dot_dependence_graph().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sg_fprint_as_dense()

void sg_fprint_as_dense ( FILE *  f,
Ptsg  sg,
Pbase  b 
)

void sg_fprint_as_dense(FILE * f, Ptsg sg): impression d'un systeme generateur

Note: b could/should be sg->base

Parameters
sgg

Definition at line 298 of file sg.c.

302 {
303  (void) fprintf(f,"Generating system:\n");
304 
305  (void) fprintf(f,"%d Vert%s \n",sg_nbre_sommets(sg),
306  sg_nbre_sommets(sg)==1? "ex" : "ices");
308 
309  if(sg_nbre_rayons(sg)>0) {
310  (void) fprintf(f,"\n%d Ray%s \n",sg_nbre_rayons(sg),
311  sg_nbre_rayons(sg)==1? "" : "s");
313  }
314 
315  if(sg_nbre_droites(sg)>0) {
316  (void) fprintf(f,"\n%d Line%s \n",sg_nbre_droites(sg),
317  sg_nbre_rayons(sg)==1? "" : "s");
319  }
320 
321  (void) fprintf(f,"\nEnd of generating system ****\n");
322 }
int f(int off1, int off2, int n, float r[n], float a[n], float b[n])
Definition: offsets.c:15
void fprint_lray_dte_as_dense(FILE *f, Pray_dte listrd, Pbase b)
void fprint_lray_dte_as_dense(FILE * f, Pray_dte listrd): impression d'une liste de rayons ou de droi...
Definition: ray_dte.c:210
#define sg_nbre_rayons(sg)
nombre de rayons: int sg_nbre_rayons(Ptsg)
Definition: sg-local.h:99
void fprint_lsom_as_dense(FILE *f, Psommet ls, Pbase b)
void fprint_lsom_as_dense(FILE * f, Psommet s): impression d'une liste de sommets
Definition: sommet.c:191

References f(), fprint_lray_dte_as_dense(), fprint_lsom_as_dense(), fprintf(), sg, sg_droites, sg_nbre_droites, sg_nbre_rayons, sg_nbre_sommets, sg_rayons, and sg_sommets.

Referenced by legal_point_p(), prettyprint_dependence_graph(), and prettyprint_dependence_graph_view().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sg_new()

Ptsg sg_new ( void  )

Obsolete macros of Malik Imadache #define soms_of_sg(sg) (((sg).soms_sg).ssg) #define rays_of_sg(sg) (((sg).rays_sg).vsg) #define dtes_of_sg(sg) (((sg).dtes_sg).vsg)

TSG cproto-generated files sg.c

Obsolete macros of Malik Imadache #define soms_of_sg(sg) (((sg).soms_sg).ssg) #define rays_of_sg(sg) (((sg).rays_sg).vsg) #define dtes_of_sg(sg) (((sg).dtes_sg).vsg)

Definition at line 55 of file sg.c.

56 {
57  Ptsg sg;
58 
59  sg = (Ptsg) MALLOC(sizeof(Stsg),TSG,"sg_new");
60  sg->soms_sg.nb_s = 0;
61  sg->soms_sg.ssg = NULL;
62  sg->rays_sg.nb_v = 0;
63  sg->rays_sg.vsg = NULL;
64  sg->dtes_sg.nb_v = 0;
65  sg->dtes_sg.vsg = NULL;
66  sg->base = NULL;
67  return sg;
68 }
struct type_sg * Ptsg
Representation d'un systeme generateur par trois ensembles de sommets de rayons et de droites.
#define TSG
package sur les systemes generateur sg
Definition: sg-local.h:36

References type_sg::base, type_sg::dtes_sg, MALLOC, ttsg_soms::nb_s, ttsg_vects::nb_v, type_sg::rays_sg, sg, type_sg::soms_sg, ttsg_soms::ssg, TSG, and ttsg_vects::vsg.

Referenced by dependence_cone_positive(), main(), mk_rn(), sg_dup(), and sg_of_rays().

+ Here is the caller graph for this function:

◆ sg_print()

void sg_print ( Ptsg  ,
char *  *)(Variable 
)

◆ sg_rm()

void sg_rm ( Ptsg  sg)

void sg_rm(Ptsg sg): liberation de l'espace memoire occupe par un systeme generateur

Ne pas oublier de remettre le pointeur correspondant a NULL dans le programme appelant

Ancien nom: elim_sg()

Parameters
sgg

Definition at line 249 of file sg.c.

251 {
252  sg_rm_sommets(sg);
253  sg_rm_rayons(sg);
254  sg_rm_droites(sg);
255  base_rm(sg->base);
256  FREE((char *)sg,TSG,"sg_rm");
257 }
#define FREE(p, t, f)
Definition: sg.c:50
void sg_rm_droites(Ptsg sg)
void sg_rm_droites(Ptsg sg): desallocation d'une liste de droites d'un systeme generateur
Definition: sg.c:233
void sg_rm_sommets(Ptsg sg)
void sg_rm_sommets(Ptsg sg): desallocation d'une liste de sommets d'un systeme generateur
Definition: sg.c:205
void sg_rm_rayons(Ptsg sg)
void sg_rm_rayons(Ptsg sg): desallocation d'une liste de rayons d'un systeme generateur
Definition: sg.c:222
#define base_rm(b)

References type_sg::base, base_rm, FREE, sg, sg_rm_droites(), sg_rm_rayons(), sg_rm_sommets(), and TSG.

Referenced by dependence_cone_positive(), initialize_newgen(), sg_of_sc(), and TestDependence().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sg_rm_droites()

void sg_rm_droites ( Ptsg  sg)

void sg_rm_droites(Ptsg sg): desallocation d'une liste de droites d'un systeme generateur

Parameters
sgg

Definition at line 233 of file sg.c.

235 {
237  sg->rays_sg.vsg = NULL;
238  sg->rays_sg.nb_v = 0;
239 }
void elim_tt_rd(Pray_dte listrd)
void elim_tt_rd(Pray_dte listrd): suppression d'une liste de rayons ou d'une liste de droites
Definition: ray_dte.c:349

References elim_tt_rd(), ttsg_vects::nb_v, type_sg::rays_sg, sg, and ttsg_vects::vsg.

Referenced by sg_rm().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sg_rm_rayons()

void sg_rm_rayons ( Ptsg  sg)

void sg_rm_rayons(Ptsg sg): desallocation d'une liste de rayons d'un systeme generateur

Parameters
sgg

Definition at line 222 of file sg.c.

224 {
226  sg->rays_sg.vsg = NULL;
227  sg->rays_sg.nb_v = 0;
228 }

References elim_tt_rd(), ttsg_vects::nb_v, type_sg::rays_sg, sg, and ttsg_vects::vsg.

Referenced by sg_rm().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sg_rm_sommets()

void sg_rm_sommets ( Ptsg  sg)

void sg_rm_sommets(Ptsg sg): desallocation d'une liste de sommets d'un systeme generateur

Ex-fonction elim_tt_som() qui prenait en argument une liste de sommets

Parameters
sgg

Definition at line 205 of file sg.c.

207 {
208  Psommet s,s1;
209 
210  for (s=sg->soms_sg.ssg; s!=NULL;) {
211  s1 = s->succ;
212  SOMMET_RM(s,"sg_rm_sommets");
213  s = s1;
214  }
215  sg->soms_sg.ssg = NULL;
216  sg->soms_sg.nb_s = 0;
217 }
s1
Definition: set.c:247
#define SOMMET_RM(s, function_name)
Definition: sommet-local.h:77

References ttsg_soms::nb_s, s1, sg, SOMMET_RM, type_sg::soms_sg, ttsg_soms::ssg, and typ_som::succ.

Referenced by sg_rm().

+ Here is the caller graph for this function:

◆ sg_union()

Ptsg sg_union ( Ptsg  sg1,
Ptsg  sg2 
)

union des sommets

union des rayons

nion des droites

Parameters
sg1g1
sg2g2

Definition at line 552 of file sg.c.

554 {
555  Ptsg sg;
556  bool newsommet = (sg_nbre_sommets(sg1)== 0) ? true : false;
557  bool newray = (sg_nbre_rayons(sg1)== 0) ? true : false;
558  bool newdte = (sg_nbre_droites(sg1)== 0) ? true : false;
559  Psommet ps, ps_tmp;
560  Pray_dte pr,pr_tmp;
561 
562  if (sg1 == NULL)
563  return (sg_dup(sg2));
564  if (sg2 == NULL)
565  return (sg_dup(sg1));
566 
567  sg = sg_dup(sg1);
568  sg->soms_sg.nb_s = sg_nbre_sommets(sg1);
569  sg->rays_sg.nb_v =sg_nbre_rayons(sg1) ;
570  sg->dtes_sg.nb_v = sg_nbre_droites(sg1);
571  /* union des sommets */
572 
573  for (ps = sg->soms_sg.ssg, ps_tmp = ps; ps != NULL ; ps_tmp = ps, ps=ps->succ)
574  ;
575  for (ps = sg2->soms_sg.ssg; ps != NULL; ps=ps->succ) {
576  if (newsommet) {
577  sg->soms_sg.ssg = ps_tmp=sommet_dup(ps);
578  newsommet = false;
579  sg->soms_sg.nb_s++;
580  } else {
581  if (!sommet_in_sg_p(ps,sg)) {
582  ps_tmp->succ=sommet_dup(ps);
583  ps_tmp = ps_tmp->succ; sg->soms_sg.nb_s++;
584  }
585  }
586  }
587 
588  /* union des rayons */
589  for (pr = sg->rays_sg.vsg, pr_tmp=pr; pr!= NULL; pr_tmp = pr, pr = pr->succ)
590  ;
591  for (pr = sg2->rays_sg.vsg; pr != NULL; pr=pr->succ) {
592  if (newray) {
593  sg->rays_sg.vsg = pr_tmp=ray_dte_dup(pr);
594  newray = false;
595  sg->rays_sg.nb_v++;
596  } else {
597  if (!ray_in_sg_p(pr,sg)) {
598  pr_tmp->succ=ray_dte_dup(pr);
599  pr_tmp = pr_tmp->succ;
600  sg->rays_sg.nb_v++;
601  }
602  }
603  }
604 
605  /*union des droites */
606  for (pr = sg->dtes_sg.vsg, pr_tmp=pr; pr!= NULL; pr_tmp = pr,pr=pr->succ)
607  ;
608  for (pr = sg2->dtes_sg.vsg; pr != NULL; pr=pr->succ) {
609  if (newdte) {
610  sg->dtes_sg.vsg = pr_tmp=ray_dte_dup(pr);
611  newdte = false;
612  sg->dtes_sg.nb_v++;
613  } else {
614  if (!dte_in_sg_p(pr,sg)) {
615  pr_tmp->succ=ray_dte_dup(pr);
616  pr_tmp = pr_tmp->succ;
617  sg->dtes_sg.nb_v++;
618  }
619  }
620  }
621  base_rm(sg->base);
622  sg->base = base_union(sg1->base,sg2->base);
623  return (sg);
624 }
Pbase base_union(Pbase b1, Pbase b2)
Pbase base_union(Pbase b1, Pbase b2): compute a new basis containing all elements of b1 and all eleme...
Definition: base.c:428
Ptsg sg_dup(Ptsg sg_in)
Ptsg sg_dup(Ptsg sg_in): allocation d'un systeme generateur sg_out et copie sans sharing des ensemble...
Definition: sg.c:84
bool sommet_in_sg_p(Psommet som, Ptsg sg)
Definition: sg.c:507
bool dte_in_sg_p(Pray_dte dte, Ptsg sg)
Definition: sg.c:537
bool ray_in_sg_p(Pray_dte ray, Ptsg sg)
Definition: sg.c:522

References type_sg::base, base_rm, base_union(), dte_in_sg_p(), type_sg::dtes_sg, ttsg_soms::nb_s, ttsg_vects::nb_v, ray_dte_dup(), ray_in_sg_p(), type_sg::rays_sg, sg, sg_dup(), sg_nbre_droites, sg_nbre_rayons, sg_nbre_sommets, sommet_dup(), sommet_in_sg_p(), type_sg::soms_sg, ttsg_soms::ssg, rdte::succ, typ_som::succ, and ttsg_vects::vsg.

Referenced by main().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sg_without_line()

Ptsg sg_without_line ( Ptsg  sg_in)

Ptsg sg_without_line(Ptsg sg_in): allocation d'un systeme generateur et copie d'un systeme generateur dont on transforme les lignes en rayons.

Aucune elimination de redondance pour le moment. On peut en envisager trois niveaux: egalite entre rayons, proportionalite entre rayons et combinaison lineaire positive de rayons.

ajout des l'oppose des vecteurs directeur des droites a la liste des rayons

allocation et calcul du vecteur opppose

chainage en tete de la liste des rayons

ajout (sans duplication en memoire) de la liste des vecteurs directeurs des droites a la liste des rayons, si l'ensemble des droites n'est pas vide

ajout de l'ensemble des rayons a l'ensemble des droites

transfert de la liste des droites a la liste des rayons

mise a jour des nombres de droites et de vecteurs

Parameters
sg_ing_in

Definition at line 132 of file sg.c.

134 {
135  Ptsg sg_out;
136  Pray_dte rd;
137  Pray_dte rd_new;
138  Pray_dte rd_prec;
139 
140  ifdebug(8) {
141  (void) fprintf(stderr,"sg_without_line: begin\n");
142  (void) fprintf(stderr,"sg_without_line: sg_in\n");
143  sg_fprint(stderr, sg_in, variable_dump_name);
144  }
145 
146  sg_out = sg_dup(sg_in);
147 
148  /* ajout des l'oppose des vecteurs directeur des droites a la liste
149  des rayons */
150  for(rd_prec=rd=sg_out->dtes_sg.vsg; rd!=NULL; rd_prec=rd, rd=rd->succ) {
151  /* allocation et calcul du vecteur opppose */
152  rd_new = ray_oppose(rd);
153  /* chainage en tete de la liste des rayons */
154  rd_new = sg_out->rays_sg.vsg;
155  sg_out->rays_sg.vsg = rd_new;
156  }
157 
158  /* ajout (sans duplication en memoire) de la liste des vecteurs directeurs
159  des droites a la liste des rayons, si l'ensemble des droites n'est
160  pas vide */
161  if(rd_prec!=NULL) {
162  /* ajout de l'ensemble des rayons a l'ensemble des droites */
163  rd_prec->succ = sg_out->rays_sg.vsg;
164  /* transfert de la liste des droites a la liste des rayons */
165  sg_out->rays_sg.vsg = sg_out->dtes_sg.vsg;
166  sg_out->dtes_sg.vsg = NULL;
167  /* mise a jour des nombres de droites et de vecteurs */
168  sg_out->rays_sg.nb_v += 2*(sg_out->dtes_sg.nb_v);
169  sg_out->dtes_sg.nb_v = 0;
170  }
171 
172  ifdebug(8) {
173  (void) fprintf(stderr,"sg_without_line: sg_out\n");
174  sg_fprint(stderr, sg_out, variable_dump_name);
175  (void) fprintf(stderr,"sg_without_line: end\n");
176  }
177 
178  return sg_out;
179 }
Pray_dte ray_oppose(Pray_dte r)
Pray_dte ray_oppose(Pray_dte r): transformation d'un rayon en son oppose (effet de bord)
Definition: ray_dte.c:125

References type_sg::dtes_sg, fprintf(), ifdebug, ttsg_vects::nb_v, ray_oppose(), type_sg::rays_sg, sg_dup(), sg_fprint(), rdte::succ, variable_dump_name(), and ttsg_vects::vsg.

+ Here is the call graph for this function:

◆ sommet_in_sg_p()

bool sommet_in_sg_p ( Psommet  som,
Ptsg  sg 
)
Parameters
somom
sgg

Definition at line 507 of file sg.c.

510 {
511  Psommet ps;
512  bool trouve = false;
513 
514  if (!SG_UNDEFINED_P(sg)) {
515  for (ps = sg->soms_sg.ssg; ps != NULL && !trouve ; ps=ps->succ) {
516  trouve = trouve || vect_equal(som->vecteur,ps->vecteur);
517  }
518  }
519  return (trouve);
520 }

References sg, SG_UNDEFINED_P, type_sg::soms_sg, ttsg_soms::ssg, typ_som::succ, vect_equal(), and typ_som::vecteur.

Referenced by sg_union().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: