PIPS
ray_dte.h File Reference

Go to the source code of this file.

Data Structures

struct  rdte
 

Macros

#define RAY_DTE   105
 Warning! Do not modify this file that is automatically generated! More...
 
#define print_rd(s)   ray_dte_fprint(stdout,s)
 
#define print_lray_dte(lv)   fprint_lray_dte(stdout,lv)
 
#define RAY_DTE_RM(rd, f)   dbg_ray_dte_rm(rd,f)
 

Typedefs

typedef struct rdtePray_dte
 
typedef struct rdte Sray_dte
 

Functions

Pray_dte ray_dte_dup (Pray_dte)
 RAY_DTE. More...
 
Pray_dte ray_dte_new (void)
 Pray_dte ray_dte_new(): allocation d'une structure ray_dte;. More...
 
Pray_dte ray_dte_make (Pvecteur)
 Pray_dte ray_dte_make(Pvecteur v): allocation et initialisation d'une structure ray_dte;. More...
 
Pray_dte ray_oppose (Pray_dte)
 Pray_dte ray_oppose(Pray_dte r): transformation d'un rayon en son oppose (effet de bord) More...
 
void ray_dte_rm (Pray_dte)
 void ray_dte_rm(Pray_dte rm): desallocation complete d'une structure ray_dte More...
 
void dbg_ray_dte_rm (Pray_dte, char *)
 void dbg_ray_dte(Pray_dte rd, char * f): desallocation complete d'une structure ray_dte rd avec trace sur stderr; le nom de la fonction demandant la desallocation est passe comme deuxieme argument, f. More...
 
void ray_dte_fprint (FILE *, Pray_dte, char *(*)(Variable))
 
void ray_dte_fprint_as_dense (FILE *, Pray_dte, Pbase)
 void ray_dte_fprint_as_dense(File * f, Pray_dte rd, Pbase b) impression d'un rayon ou d'une droite More...
 
void ray_dte_dump (Pray_dte)
 void ray_dte_dump(Pray_dte rd): impression de debug de rd sur stderr, utilisant variable_debug_name() More...
 
void fprint_lray_dte (FILE *, Pray_dte, char *(*)(Variable))
 
void fprint_lray_dte_as_dense (FILE *, Pray_dte, Pbase)
 void fprint_lray_dte_as_dense(FILE * f, Pray_dte listrd): impression d'une liste de rayons ou de droites More...
 
void ray_dte_normalize (Pray_dte)
 void ray_dte_normalize(Pray_dte rd): normalisation des coordonnees d'un rayon ou d'une droite rd (division par le pgcd leurs coefficients) More...
 
bool rd_in_liste (Pray_dte, Pray_dte)
 bool rd_in_liste(Pray-dte rd, Pray_dte lrd): test si rd appartient a la liste lrd More...
 
bool egaliste_rd (Pray_dte, Pray_dte *)
 bool egaliste_rd(Pray_dte l1, Pray_dte * l2): egalite de deux listes de rayons ou de droites More...
 
Pray_dte elim_null_vect (Pray_dte, int *)
 Pray_dte elim_null_vect(Pray_dte l, int * n): elimine les vecteurs nuls d'une liste l de rayons ou de droites et renvoie un pointeur vers la nouvelle liste ainsi que le nouveau nombre d'elements de la liste *n. More...
 
void elim_tt_rd (Pray_dte)
 void elim_tt_rd(Pray_dte listrd): suppression d'une liste de rayons ou d'une liste de droites More...
 

Macro Definition Documentation

◆ print_lray_dte

#define print_lray_dte (   lv)    fprint_lray_dte(stdout,lv)

Definition at line 59 of file ray_dte.h.

◆ print_rd

#define print_rd (   s)    ray_dte_fprint(stdout,s)

Definition at line 57 of file ray_dte.h.

◆ RAY_DTE

#define RAY_DTE   105

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

Modify src/Libs/ray_dte/ray_dte-local.h instead, to add your own modifications. header file built by cproto ray_dte-local.h package ray_dte: structure de donnees representant les rayons et les droites d'un systeme generateur; elle contient le vecteur correspondant, un eventuel tableau de saturation, et le chainage vers les autres rayons ou droites.

Francois Irigoin, Mai 1989

Voir poly.h

A terme, poly.h devrait exploser et la definition de ray_dte etre remise dans ce fichier; a moins qu'on ne mette plutot ray_dte.h dans sg.h pour eviter une explosion des .h numero du type de donnees

Definition at line 49 of file ray_dte.h.

◆ RAY_DTE_RM

#define RAY_DTE_RM (   rd,
  f 
)    dbg_ray_dte_rm(rd,f)

Definition at line 62 of file ray_dte.h.

Typedef Documentation

◆ Pray_dte

typedef struct rdte * Pray_dte

◆ Sray_dte

typedef struct rdte Sray_dte

Function Documentation

◆ dbg_ray_dte_rm()

void dbg_ray_dte_rm ( Pray_dte  rd,
char *  f 
)

void dbg_ray_dte(Pray_dte rd, char * f): desallocation complete d'une structure ray_dte rd avec trace sur stderr; le nom de la fonction demandant la desallocation est passe comme deuxieme argument, f.

Parameters
rdd

Definition at line 145 of file ray_dte.c.

148 {
149  (void) fprintf(stderr,"destruction de R/D dans %s\n",f);
151  dbg_vect_rm(rd->vecteur,f);
152  FREE((char *)rd,RAY_DTE,f);
153 }
void vect_fprint(FILE *f, Pvecteur v, get_variable_name_t variable_name)
void vect_fprint(FILE * f, Pvecteur v, char * (*variable_name)()): impression d'un vecteur creux v su...
Definition: io.c:124
char *(* variable_debug_name)(Variable)
Debug support: pointer to the function used by debug print outs.
Definition: variable.c:114
int f(int off1, int off2, int n, float r[n], float a[n], float b[n])
Definition: offsets.c:15
#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 FREE(s, t, f)
Definition: ray_dte.c:57
int fprintf()
test sc_min : ce test s'appelle par : programme fichier1.data fichier2.data ...
struct Svecteur * vecteur
Definition: ray_dte-local.h:45
void dbg_vect_rm(Pvecteur v, char __attribute__((unused)) *f)
void dbg_vect_rm(Pvecteur v, char * f): desallocation d'un vecteur avec marquage de la fonction provo...
Definition: alloc.c:139

References dbg_vect_rm(), f(), fprintf(), FREE, RAY_DTE, variable_debug_name, and vect_fprint().

+ Here is the call graph for this function:

◆ egaliste_rd()

bool egaliste_rd ( Pray_dte  l1,
Pray_dte ad_l2 
)

bool egaliste_rd(Pray_dte l1, Pray_dte * l2): egalite de deux listes de rayons ou de droites

Parameters
l11
ad_l2d_l2

Definition at line 260 of file ray_dte.c.

262 {
263  int egalite;
264  Pray_dte eq1,eq2,eq21,eq23,*ad_aux;
265 
266  if (l1==(*ad_l2)) return(true);
267  eq2 = *ad_l2;
268  ad_aux = ad_l2;
269  (*ad_l2) = NULL;
270  for(eq1=l1;eq1!=NULL;eq1=eq1->succ) {
271  egalite = 0;
272  for(eq21=eq2,eq23=eq2;eq21!=NULL;) {
273  if (vect_equal(eq21->vecteur,eq1->vecteur)) {
274  if (eq21==eq2) {
275  eq2=eq2->succ;
276  eq21->succ = NULL;
277  (*ad_aux) = eq21;
278  ad_aux = &(eq21->succ);
279  eq21 = eq23 = eq2;
280  }
281  else {
282  eq23->succ = eq21->succ;
283  eq21->succ = NULL;
284  (*ad_aux) = eq21;
285  ad_aux = &(eq21->succ);
286  eq21 = eq23->succ;
287  }
288  egalite = 1;
289  break;
290  }
291  else {
292  eq23 = eq21;
293  eq21 = eq21->succ;
294  }
295  }
296  if (egalite == 0) {
297  (* ad_aux) = eq2;
298  return(false);
299  }
300  else
301  egalite = 0;
302  }
303  if (eq2==NULL)
304  return(true);
305  else
306  (*ad_aux) = eq2;
307  return(false);
308 }
bool vect_equal(Pvecteur v1, Pvecteur v2)
bool vect_equal(Pvecteur v1, Pvecteur v2): test a egalite de deux vecteurs
Definition: reductions.c:278
struct rdte * succ
Definition: ray_dte-local.h:46

References rdte::succ, vect_equal(), and rdte::vecteur.

Referenced by egal_rd().

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

◆ elim_null_vect()

Pray_dte elim_null_vect ( Pray_dte  l,
int n 
)

Pray_dte elim_null_vect(Pray_dte l, int * n): elimine les vecteurs nuls d'une liste l de rayons ou de droites et renvoie un pointeur vers la nouvelle liste ainsi que le nouveau nombre d'elements de la liste *n.

la nouvelle liste contient les elements non-nuls en ordre inverse nombre d'elements non-nuls dans l

nouvelle liste

rayon ou droite nul a desallouer

desallocation du rayon ou de la droite

il faut le chainer a la nouvelle liste

Parameters
nla nouvelle liste contient les elements non-nuls en ordre inverse liste initiale, passee par valeur

Definition at line 317 of file ray_dte.c.

320 {
321  Pray_dte nl = (Pray_dte) NULL; /* nouvelle liste */
322  Pray_dte zero; /* rayon ou droite nul a desallouer */
323 
324  *n = 0;
325 
326  while(l!=NULL) {
327  if(l->vecteur==NULL) {
328  /* desallocation du rayon ou de la droite */
329  zero = l;
330  l = l->succ;
331  RAY_DTE_RM(zero,"elim_null_vect");
332  }
333  else {
334  Pray_dte ll;
335  (*n)++;
336  /* il faut le chainer a la nouvelle liste */
337  ll = l;
338  l = l->succ;
339  ll->succ = nl;
340  nl = ll;
341  }
342  }
343  return nl;
344 }
struct rdte * Pray_dte
#define RAY_DTE_RM(rd, f)
Definition: ray_dte-local.h:54

References RAY_DTE_RM, and rdte::succ.

◆ elim_tt_rd()

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

Parameters
listrdistrd

Definition at line 349 of file ray_dte.c.

351 {
352  Pray_dte rd,rd1;
353 
354  for (rd=listrd; rd!=NULL;) {
355  rd1 = rd->succ;
356  RAY_DTE_RM(rd,"elim_tt_rd");
357  rd = rd1;
358  }
359 }

References RAY_DTE_RM, and rdte::succ.

Referenced by sg_rm_droites(), and sg_rm_rayons().

+ Here is the caller graph for this function:

◆ fprint_lray_dte()

void fprint_lray_dte ( FILE *  ,
Pray_dte  ,
char *  *)(Variable 
)

◆ fprint_lray_dte_as_dense()

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 droites

Parameters
listrdistrd

Definition at line 210 of file ray_dte.c.

214 {
215  Pray_dte e;
216  for (e = listrd; e != NULL; e = e->succ) {
217  ray_dte_fprint_as_dense(f, e, b);
218  }
219 }
void ray_dte_fprint_as_dense(FILE *f, Pray_dte rd, Pbase b)
void ray_dte_fprint_as_dense(File * f, Pray_dte rd, Pbase b) impression d'un rayon ou d'une droite
Definition: ray_dte.c:176

References f(), ray_dte_fprint_as_dense(), and rdte::succ.

Referenced by sg_fprint_as_dense().

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

◆ ray_dte_dump()

void ray_dte_dump ( Pray_dte  rd)

void ray_dte_dump(Pray_dte rd): impression de debug de rd sur stderr, utilisant variable_debug_name()

Parameters
rdd

Definition at line 187 of file ray_dte.c.

189 {
190  ray_dte_fprint(stderr, rd, variable_debug_name);
191 }
void ray_dte_fprint(FILE *f, Pray_dte rd, char *(*nom_var)(Variable))
void ray_dte_fprint(File * f, Pray_dte rd, char * (*nom_var)()): impression d'un rayon ou d'une droit...
Definition: ray_dte.c:162

References ray_dte_fprint(), and variable_debug_name.

+ Here is the call graph for this function:

◆ ray_dte_dup()

Pray_dte ray_dte_dup ( Pray_dte  rd_in)

RAY_DTE.

cproto-generated files ray_dte.c

RAY_DTE.

Le chainage est mis a NULL; le tableau des saturations aussi car on ne peut pas connaitre sa taille; le vecteur est copie pour ne pas introduire de sharing

Parameters
rd_ind_in

Definition at line 66 of file ray_dte.c.

68 {
69  Pray_dte rd_out;
70 
71  if(rd_in->eq_sat!=NULL) {
72  (void) fprintf(stderr,
73  "ray_dte_dup: perte d'un tableau de saturation\n");
74  abort();
75  }
76 
77  rd_out = ray_dte_new();
78  rd_out->vecteur = vect_dup(rd_in->vecteur);
79 
80  return rd_out;
81 }
#define abort()
Definition: misc-local.h:53
Pray_dte ray_dte_new()
Pray_dte ray_dte_new(): allocation d'une structure ray_dte;.
Definition: ray_dte.c:89
int * eq_sat
Definition: ray_dte-local.h:44
Pvecteur vect_dup(Pvecteur v_in)
Pvecteur vect_dup(Pvecteur v_in): duplication du vecteur v_in; allocation de et copie dans v_out;.
Definition: alloc.c:51

References abort, fprintf(), ray_dte_new(), vect_dup(), and rdte::vecteur.

Referenced by sg_dup(), and sg_union().

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

◆ ray_dte_fprint()

void ray_dte_fprint ( FILE *  ,
Pray_dte  ,
char *  *)(Variable 
)

◆ ray_dte_fprint_as_dense()

void ray_dte_fprint_as_dense ( FILE *  f,
Pray_dte  rd,
Pbase  b 
)

void ray_dte_fprint_as_dense(File * f, Pray_dte rd, Pbase b) impression d'un rayon ou d'une droite

Parameters
rdd

Definition at line 176 of file ray_dte.c.

180 {
182 }
void vect_fprint_as_dense(FILE *f, Pvecteur v, Pbase b)
void vect_fprint_as_dense(FILE * f, Pvecteur v, Pbase b):
Definition: io.c:159

References f(), vect_fprint_as_dense(), and rdte::vecteur.

Referenced by fprint_lray_dte_as_dense().

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

◆ ray_dte_make()

Pray_dte ray_dte_make ( Pvecteur  v)

Pray_dte ray_dte_make(Pvecteur v): allocation et initialisation d'une structure ray_dte;.

Le chainage est mis a NULL; le tableau des saturations aussi car on ne peut pas connaitre sa taille; le vecteur n'est pas copie et du sharing est introduit

Definition at line 108 of file ray_dte.c.

110 {
111  Pray_dte rd;
112 
113  rd = ray_dte_new();
114  rd->vecteur = v;
115 
116  return rd;
117 }

References ray_dte_new(), and rdte::vecteur.

Referenced by mk_rn(), and sg_of_rays().

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

◆ ray_dte_new()

Pray_dte ray_dte_new ( void  )

Pray_dte ray_dte_new(): allocation d'une structure ray_dte;.

Le chainage est mis a NULL; le tableau des saturations aussi car on ne peut pas connaitre sa taille; le vecteur est initialise a VECTEUR_UNDEFINED

Definition at line 89 of file ray_dte.c.

90 {
91  Pray_dte rd;
92 
93  rd = (Pray_dte) MALLOC(sizeof(Sray_dte),RAY_DTE,"ray_dte_new");
94  rd->succ = NULL;
95  rd->eq_sat = NULL;
97 
98  return rd;
99 }
#define MALLOC(s, t, f)
package pour la structure de donnees ray_dte, qui represente un rayon ou une droite de systeme genera...
Definition: ray_dte.c:56
#define VECTEUR_UNDEFINED

References rdte::eq_sat, MALLOC, RAY_DTE, rdte::succ, rdte::vecteur, and VECTEUR_UNDEFINED.

Referenced by ray_dte_dup(), and ray_dte_make().

+ Here is the caller graph for this function:

◆ ray_dte_normalize()

void ray_dte_normalize ( Pray_dte  rd)

void ray_dte_normalize(Pray_dte rd): normalisation des coordonnees d'un rayon ou d'une droite rd (division par le pgcd leurs coefficients)

Ancien nom: norm_rd()

Parameters
rdd

Definition at line 226 of file ray_dte.c.

228 {
229  vect_normalize(rd->vecteur);
230 }
void vect_normalize(Pvecteur v)
void vect_normalize(Pvecteur v): division de tous les coefficients de v par leur pgcd; "normalisation...
Definition: unaires.c:59

References vect_normalize(), and rdte::vecteur.

+ Here is the call graph for this function:

◆ ray_dte_rm()

void ray_dte_rm ( Pray_dte  rd)

void ray_dte_rm(Pray_dte rm): desallocation complete d'une structure ray_dte

Parameters
rdd

Definition at line 134 of file ray_dte.c.

136 {
137  vect_rm(rd->vecteur);
138  FREE((char *)rd,RAY_DTE,"ray_dte_rm");
139 }
void vect_rm(Pvecteur v)
void vect_rm(Pvecteur v): desallocation des couples de v;
Definition: alloc.c:78

References FREE, RAY_DTE, and vect_rm().

+ Here is the call graph for this function:

◆ ray_oppose()

Pray_dte ray_oppose ( Pray_dte  r)

Pray_dte ray_oppose(Pray_dte r): transformation d'un rayon en son oppose (effet de bord)

-> -> r = - r

Definition at line 125 of file ray_dte.c.

127 {
128  vect_chg_sgn(r->vecteur);
129  return r;
130 }
void vect_chg_sgn(Pvecteur v)
void vect_chg_sgn(Pvecteur v): multiplie v par -1
Definition: scalaires.c:151

References vect_chg_sgn().

Referenced by sg_without_line().

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

◆ rd_in_liste()

bool rd_in_liste ( Pray_dte  rd,
Pray_dte  lrd 
)

bool rd_in_liste(Pray-dte rd, Pray_dte lrd): test si rd appartient a la liste lrd

Les coordonnees de rd et des elements de lrd sont supposees normalisees.

Il faudrait distinguer le cas des droites qui peuvent avoir des vecteurs directeurs opposes et etre neanmoins egales; a moins que le normalisation soit effectuee de maniere a n'avoir qu'un vecteur directeur possible (le lexico-positif par exemple).

Parameters
rdd
lrdrd

Definition at line 242 of file ray_dte.c.

245 {
246  Pray_dte rd1;
247 
248  if (rd->vecteur == NULL) return(1);
249  for (rd1=lrd;rd1!=NULL;rd1=rd1->succ) {
250  if (vect_equal((rd1->vecteur),(rd->vecteur))) {
251  return(true);
252  }
253  }
254  return(false);
255 }

References rdte::succ, vect_equal(), and rdte::vecteur.

+ Here is the call graph for this function: