PIPS
path.c
Go to the documentation of this file.
1 
2 #line 55 "path.w"
3 
4 
5 #line 335 "UNION.w"
6 
7 /* Package : C3/union
8  * Author : Arnauld LESERVOT (leservot(a)limeil.cea.fr)
9  * Date :
10  * Modified : 04 04 95
11  * Documents: UNION.tex : ``Extension de C3 aux unions de polyedres''
12  * Comments :
13  */
14 /*
15  * WARNING
16  *
17  * THOSE FUNCTIONS ARE AUTOMATICALLY DERIVED
18  *
19  * FROM THE WEB SOURCES !
20  */
21 
22 /* Ansi includes */
23 #ifdef HAVE_CONFIG_H
24  #include "config.h"
25 #endif
26 #include <stdlib.h>
27 #include <stdio.h>
28 #include <string.h>
29 #include "linear_assert.h"
30 #include <time.h>
31 #include <sys/time.h>
32 
33 /* Linear includes */
34 #include "boolean.h"
35 #include "arithmetique.h"
36 #include "vecteur.h"
37 #include "contrainte.h"
38 #include "sc.h"
39 #include "sommet.h"
40 #include "polyedre.h"
41 #include "union.h"
42 
43 
44 #line 56 "path.w"
45 
46 
47 #line 97 "path.w"
48 
49 /* Ppath pa_make(in_ps, in_pcomp) AL 16/11/93
50  * Allocates a Ppath and initialize it with in_ps and in_pcomp
51  * SHARING.
52  */
53 Ppath pa_make( in_ps, in_pcomp )
54 Psysteme in_ps;
55 Pcomplist in_pcomp;
56 {
57  Ppath ret_pa = (Ppath) malloc( sizeof( Spath ) );
58  if (ret_pa == NULL) {
59  (void) fprintf(stderr,"pa_new: Out of memory space\n");
60  exit(-1);
61  }
62  ret_pa->psys = in_ps; ret_pa->pcomp = in_pcomp;
63  return ret_pa;
64 }
65 
66 
67 /* void pa_dup(Ppath pa) AL 30/05/94 */
68 Ppath pa_dup(in_pa)
69 Ppath in_pa;
70 {
71  if (in_pa == PA_UNDEFINED ) return PA_UNDEFINED;
72  return pa_make( sc_dup(in_pa->psys), sl_dup(in_pa->pcomp) );
73 }
74 
75 /* Ppath pa_free(Ppath pa) BA, AL 30/05/94 */
76 Ppath pa_free(in_pa)
77 Ppath in_pa;
78 {
79  if (in_pa != PA_UNDEFINED) {
80  in_pa->psys = sc_free(in_pa->psys);
81  in_pa->pcomp = sl_free((Psyslist) in_pa->pcomp);
82  free( in_pa ); in_pa = PA_UNDEFINED;
83  }
84  return((Ppath) PA_UNDEFINED);
85 }
86 
87 
88 /* void pa_dup1(Ppath pa) AL 30/05/94
89  * 1 depth duplication: system and complements are shared.
90  */
91 Ppath pa_dup1(in_pa)
92 Ppath in_pa;
93 {
94  if (in_pa == PA_UNDEFINED) return PA_UNDEFINED;
95  return pa_make( in_pa->psys, sl_dup1(in_pa->pcomp) );
96 }
97 
98 
99 /* Ppath pa_free1(Ppath pa) BA, AL 30/05/94
100  * 1 depth free. System and complement are not freed.
101  */
103 Ppath in_pa;
104 {
105  if (in_pa != PA_UNDEFINED) {
106  sl_free1((Psyslist) in_pa->pcomp);
107  free( in_pa ); in_pa = PA_UNDEFINED;
108  }
109  return((Ppath) PA_UNDEFINED);
110 }
111 
112 #line 171 "path.w"
113 
114 /* Ppath pa_full() AL 18/11/93
115  * Returns full space path : pa_full = pa_new()
116  */
117 Ppath pa_full() { return pa_new(); }
118 
119 
120 /* pa_full_p( (Ppath) in_pa ) AL 18/11/93
121  * Returns True if in_pa = (NIL) ^ (NIL)
122  */
123 bool pa_full_p( in_pa )
124 Ppath in_pa;
125 {
126  return( (in_pa != PA_UNDEFINED) &&
127  ( in_pa->pcomp == NULL ) &&
128  ( in_pa->psys == NULL ) );
129 }
130 
131 
132 /* Ppath pa_empty() AL 18/11/93
133  * Returns empty path : pa_empty = sc_empty(NULL) ^ (NIL)
134  */
135 Ppath pa_empty() { return pa_make(sc_empty(NULL), NULL); }
136 
137 
138 /* pa_empty_p( (Ppath) in_pa ) AL 18/11/93
139  * Returns True if in_pa = (1*TCST = 0) ^ (NIL)
140  */
141 bool pa_empty_p( in_pa )
142 Ppath in_pa;
143 {
144  return( (in_pa != PA_UNDEFINED) &&
145  ( in_pa->pcomp == NULL ) &&
146  ( in_pa->psys != NULL ) &&
147  ( sc_empty_p( in_pa->psys ) ) );
148 }
149 
150 #line 216 "path.w"
151 
152 /* int pa_max_constraints_nb( (Ppath) in_pa )
153  * Give the maximum constraints nb among systems of in_pa.
154  */
156 Ppath in_pa;
157 {
158  Psysteme ps;
159  int loc, ret_int;
160 
161  if (PA_UNDEFINED_P(in_pa)||pa_full_p(in_pa)) return 0;
162  if ( pa_empty_p(in_pa) ) return 1;
163 
164  ps = in_pa->psys;
165  ret_int = 2*(ps->nb_eq) + ps->nb_ineq;
166  loc = sl_max_constraints_nb( (Psyslist) in_pa->pcomp );
167 
168  if (loc > ret_int) ret_int = loc;
169  return ret_int;
170 }
171 
172 #line 249 "path.w"
173 
174 /* Ppath pa_intersect_system( (Ppath) in_pa, (Psysteme) in_ps )
175  * Computes the intersection between in_pa and in_ps. AL 25/04/95
176  * No sharing
177  */
178 Ppath pa_intersect_system( in_pa, in_ps )
179 Ppath in_pa;
180 Psysteme in_ps;
181 {
182  Psysteme ps;
183 
184  if (PA_UNDEFINED_P(in_pa)||SC_UNDEFINED_P(in_ps))
185  return PA_UNDEFINED;
186  if ( pa_empty_p(in_pa) ) return pa_empty();
187  if ( pa_full_p(in_pa) ) return pa_make(sc_dup(in_ps),NULL);
188 
189  ps = sc_normalize(sc_append( sc_dup(in_pa->psys), in_ps ));
190  if (ps == NULL){ ps = sc_free(ps); return pa_empty(); }
191  return pa_make(ps, sl_dup(in_pa->pcomp));
192 }
193 
194 #line 274 "path.w"
195 
196 /* Ppath pa_intersect_complement( (Ppath) in_pa, (Pcomplement) in_pc )
197  * Computes the intersection between in_pa and in_ps. AL 17/11/93
198  * No sharing
199  */
201 Ppath in_pa;
202 Pcomplement in_pc;
203 {
204  Pcomplist pc;
205  Psysteme ps;
206 
207  if (PA_UNDEFINED_P(in_pa)||SC_UNDEFINED_P(in_pc)) return PA_UNDEFINED;
208  if (pa_empty_p(in_pa)) return pa_empty();
209 
210  if (pa_full_p(in_pa)) ps = sc_full(); else ps = sc_dup(in_pa->psys);
211  pc = sl_append_system( sl_dup(in_pa->pcomp), sc_dup(in_pc) );
212  return pa_make(ps, pc) ;
213 }
214 
215 #line 300 "path.w"
216 
217 /* Ppath pa_reduce_simple_complement( (Ppath) in_pa ) AL 16/11/93
218  * Scan all the complement. If one complement is a simple inequality,
219  * its complement is computed and intersected with psys part of in_pa.
220  * in_pa is modified. (Sharing with in_pa).
221  */
223 Ppath in_pa;
224 {
225  Psysteme pss;
226  Pcomplist pco, pco2 = NULL, tofree = NULL;
227  Ppath ret_pa;
228  bool at_least_one = false ; /* Do we have a simple complement ? */
229 
230  if( pa_full_p(in_pa) || pa_empty_p(in_pa) || (in_pa == PA_UNDEFINED) )
231  return (in_pa);
232 
233  C3_DEBUG("pa_reduce_simple_complement", {
234  fprintf(stderr, "Input path:\n");
235  pa_fprint_tab( stderr, in_pa, union_variable_name, 1 );
236  });
237 
238  pss = in_pa->psys;
239  for( pco = in_pa->pcomp, pco2 = NULL; pco != NULL; pco = pco->succ ) {
240  Psysteme ps = pco->psys;
241 
242  if (ps == SC_UNDEFINED) {
243  pco2 = sl_free1(pco2);
244  in_pa = pa_free1(in_pa);
245  return PA_UNDEFINED ;
246  }
247  else if (sc_empty_p(ps)) continue;
248  else if ((ps->nb_ineq == 1) && (ps->nb_eq == 0)) {
249  Pdisjunct dj = dj_system_complement( ps );
250  pss = sc_safe_append( pss, dj->psys );
251  tofree = sl_append_system( tofree, ps );
252  dj = dj_free( dj );
253  at_least_one = true;
254  }
255  else { pco2 = (Pcomplist) sl_append_system( pco2, ps ); }
256  }
257 
258  if(!at_least_one) {
259  pco2 = sl_free1(pco2);
260  ret_pa = in_pa;
261  }
262  else if(!sc_faisabilite_ofl(pss)) {
263  pco2 = sl_free1( pco2 );
264  tofree = sl_free1( tofree );
265  in_pa = pa_free ( in_pa ); /* also frees pss */
266  ret_pa = pa_empty();
267  }
268  else {
269  in_pa = pa_free1( in_pa );
270  tofree = sl_free ( tofree );
271  ret_pa = pa_make ( pss, pco2 );
272  }
273 
274  C3_RETURN( IS_PA, ret_pa );
275 }
276 
277 #line 366 "path.w"
278 
279 /* Ppath pa_transform_eg_in_ineg( in_pa )
280  * Transforms all equalities of all systems composing in_pa in
281  * inequalities and returns in_pa.
282  * in_pa is modified. (Sharing with in_pa).
283  */
285 Ppath in_pa;
286 {
287  Pcomplist pco;
288 
289  if( pa_full_p(in_pa) || pa_empty_p(in_pa) || (in_pa == PA_UNDEFINED) )
290  return (in_pa);
291 
292  sc_transform_eg_in_ineg( in_pa->psys );
293  for( pco = in_pa->pcomp; pco != NULL; pco = pco->succ )
294  { sc_transform_eg_in_ineg( pco->psys ); }
295 
296  return in_pa;
297 }
298 
299 #line 395 "path.w"
300 
301 /* bool pa_feasibility_ofl_ctrl( (Ppath) in_pa, int ofl_ctrl)
302  * Returns true if the input path is possible and false if it
303  * is not possible or undefined.
304  */
305 #ifdef TRACE_LINEAR_PATH
306 extern char* entity_local_name() ;
307 #endif
308 
309 bool pa_feasibility_ofl_ctrl( in_pa, ofl_ctrl )
310 Ppath in_pa;
311 int ofl_ctrl;
312 {
313  Pdisjunct dj;
314  Ppath pa;
315  bool ret_bo = false;
316 #ifdef TRACE_LINEAR_PATH
317  FILE* report_file;
318 #endif
319 
320  if ( PA_UNDEFINED_P( in_pa )) return false;
321  if ( pa_empty_p ( in_pa )) return false;
322  if ( pa_full_p ( in_pa )) return true;
323 
324 #ifdef TRACE_LINEAR_PATH
325  /* Just to keep trace of input paths if wanted */
326  if (getenv("KEEP_PATH") != (char*) NULL) {
327  struct timeval *tp = (struct timeval*) malloc(sizeof(struct timeval));
328  struct timezone *tz = (struct timezone*) malloc(sizeof(struct timezone));
329  int seconds;
330  gettimeofday( tp, tz ); seconds = tp->tv_sec;
331  report_file = fopen("mail_those_paths_to_arnauld","a");
332  pa_fprint( report_file, in_pa, union_variable_name );
333  fprintf( report_file, "# %s", ctime( &(seconds) ));
334  fprintf( report_file,
335  "# Module: \t%s\n", db_get_current_module_name());
336  fprintf( report_file,
337  "# Input number of complement: \t%d\n", sl_length(in_pa->pcomp) );
338  fprintf( report_file,
339  "# Input max constrainst: \t%d\n", pa_max_constraints_nb(in_pa));
340  fflush ( report_file ); free( tp ); free( tz );
341  }
342 #endif
343 
344  pa = pa_supress_same_constraints( in_pa );
345  dj = pa_path_to_few_disjunct_ofl_ctrl( pa, ofl_ctrl );
346  if( dj_empty_p(dj) || (dj == NULL) ) ret_bo = false;
347  else ret_bo = true;
348 
349 
350 #ifdef TRACE_LINEAR_PATH
351  /* keep trace of paths */
352  if (getenv("KEEP_PATH") != (char*) NULL) {
353  fprintf( report_file,
354  "# Output number of disjunctions: \t%d\n", sl_length(dj) );
355  fprintf( report_file,
356  "# Output max constrainst: \t%d\n", sl_max_constraints_nb(dj));
357  fprintf( report_file,
358  "# Feasible: \t%s\n", (ret_bo) ? "YES":"NO" );
359  fclose ( report_file );
360  }
361 #endif
362 
363  pa = pa_free( pa ); dj = dj_free( dj );
364  return ret_bo;
365 }
366 
367 #line 470 "path.w"
368 
369 /* Pdisjunct pa_path_to_disjunct_ofl_ctrl
370  * ( (Ppath) in_pa, (int) ofl_ctrl)
371  * Produces a Pdisjunct corresponding to the path Ppath.
372  * No sharing.
373  */
375 Ppath in_pa;
376 int ofl_ctrl;
377 {
378  Pdisjunct ret_dj;
379  Pcomplist comp;
380  int meth1 = 0, meth2 = 1; /* comparison between 2 methods */
381 
382  if ( in_pa == PA_UNDEFINED ) return DJ_UNDEFINED;
383  if (pa_full_p(in_pa)) return dj_full();
384  if (pa_empty_p(in_pa)) return dj_empty();
385  if ((in_pa->psys != NULL) &&
386  sc_empty_p(in_pa->psys)) return dj_empty();
387 
388  ret_dj = (Pdisjunct) sl_append_system(NULL, sc_dup(in_pa->psys));
389  for( comp = in_pa->pcomp; comp != NULL; comp = comp->succ) {
390  Pdisjunct dj1 = dj_system_complement( comp->psys );
391  Pdisjunct dj2 = ret_dj;
392  int lg1 = sl_length( dj1 );
393  int lg2 = sl_length( dj2 );
394 
395  meth1 = meth1 + lg2*lg1 ; meth2 = meth2 * lg1;
396 
397  ret_dj = dj_intersection_ofl_ctrl( ret_dj, dj1, ofl_ctrl);
398  dj1 = dj_free( dj1 ); dj2 = dj_free( dj2 );
399  }
400 
401  C3_DEBUG("pa_path_to_disjunct_ofl_ctrl", {
402  fprintf(stderr, "Feasibility calls with method 1 and 2 : %d\t%d\n",
403  meth1, meth2);
404  });
405 
406  return( ret_dj );
407 }
408 
409 #line 631 "sl_io.w"
410 
411 /* void pa_fprint_tab(FILE*, Pdisjunct, function, tab) prints a Ppath */
412 void pa_fprint_tab( in_fi, in_pa, in_fu, in_tab )
413 FILE* in_fi;
414 Ppath in_pa;
415 char *(*in_fu)();
416 int in_tab;
417 {
418  Psyslist sl;
419  char* tabs = sl_get_tab_string( in_tab );
420 
421  if (pa_full_p(in_pa)) {
422  fprintf(in_fi, "%sPA_FULL\n", tabs);
423  free(tabs); return;
424  }
425  if PA_UNDEFINED_P(in_pa) {
426  fprintf(in_fi, "%sPA_UNDEFINED\n", tabs);
427  free(tabs); return;
428  }
429 
430  sl = sl_new(); sl->succ = in_pa->pcomp; sl->psys = in_pa->psys;
431  fprintf ( in_fi, "\n%s# --------PA BEGIN------\n", tabs);
432  sl_fprint_tab( in_fi, sl, in_fu, in_tab );
433  fprintf ( in_fi, "\n%s# --------PA END--------\n", tabs);
434  free( sl ); free( tabs ); return;
435 }
436 
437 /* void pa_read(FILE*) reads a Ppath */
438 Ppath pa_read( nomfic )
439 char* nomfic;
440 {
441  Ppath ret_pa;
442  Psyslist sl;
443 
444  sl = sl_read(nomfic);
445  if (sl == SL_NULL) return PA_UNDEFINED;
446  ret_pa = pa_make(sl->psys, (Pcomplist) sl->succ);
447  free( sl );
448  return ret_pa;
449 }
450 
451 #line 57 "path.w"
452 
string db_get_current_module_name(void)
Also used to check whether set...
Definition: database.c:1059
Pdisjunct dj_system_complement(Psysteme in_ps)
Pdisjunct dj_system_complement( (Psystem) in_ps ) AL 26/10/93 Input : A Psysteme.
Definition: disjunct.c:254
Pdisjunct dj_free(Pdisjunct in_dj)
Pdisjunct dj_free( (Pdisjunct) in_dj ) AL 31/05/94 w - 1 depth free of input disjunction.
Definition: disjunct.c:69
Pdisjunct dj_intersection_ofl_ctrl(Pdisjunct in_dj1, Pdisjunct in_dj2, int ofl_ctrl)
Pdisjunct dj_intersection_ofl_ctrl( in_dj1, in_dj2, ofl_ctrl ) Computes intersection of two disjuncti...
Definition: disjunct.c:134
bool dj_empty_p(Pdisjunct in_dj)
dj_empty_p( (Ppath) in_pa ) AL 30/05/94 Returns True if in_dj = (1*TCST = 0) ^ (NIL)
Definition: disjunct.c:118
Pdisjunct dj_full()
Pdisjunct dj_full() AL 18/11/93 Return full space disjunction = dj_new()
Definition: disjunct.c:92
Pdisjunct dj_empty()
Pdisjunct dj_empty() AL 18/11/93 Returns a disjunction with sc_empty() element.
Definition: disjunct.c:111
void * malloc(YYSIZE_T)
void free(void *)
#define exit(code)
Definition: misc-local.h:54
#define false
Definition: newgen_types.h:80
int pa_max_constraints_nb(Ppath in_pa)
int pa_max_constraints_nb( (Ppath) in_pa ) Give the maximum constraints nb among systems of in_pa.
Definition: path.c:155
Ppath pa_full()
Ppath pa_full() AL 18/11/93 Returns full space path : pa_full = pa_new()
Definition: path.c:117
Ppath pa_empty()
Ppath pa_empty() AL 18/11/93 Returns empty path : pa_empty = sc_empty(NULL) ^ (NIL)
Definition: path.c:135
void pa_fprint_tab(FILE *in_fi, Ppath in_pa, char *(*in_fu)(), int in_tab)
void pa_fprint_tab(FILE*, Pdisjunct, function, tab) prints a Ppath
Definition: path.c:412
Ppath pa_transform_eg_in_ineg(Ppath in_pa)
Ppath pa_transform_eg_in_ineg( in_pa ) Transforms all equalities of all systems composing in_pa in in...
Definition: path.c:284
Ppath pa_free(Ppath in_pa)
Ppath pa_free(Ppath pa) BA, AL 30/05/94.
Definition: path.c:76
Pdisjunct pa_path_to_disjunct_ofl_ctrl(Ppath in_pa, int ofl_ctrl)
Pdisjunct pa_path_to_disjunct_ofl_ctrl ( (Ppath) in_pa, (int) ofl_ctrl) Produces a Pdisjunct corres...
Definition: path.c:374
Ppath pa_make(Psysteme in_ps, Pcomplist in_pcomp)
Package : C3/union Author : Arnauld LESERVOT (leservot(a)limeil.cea.fr) Date : Modified : 04 04 95 ...
Definition: path.c:53
bool pa_feasibility_ofl_ctrl(Ppath in_pa, int ofl_ctrl)
bool pa_feasibility_ofl_ctrl( (Ppath) in_pa, int ofl_ctrl) Returns true if the input path is possib...
Definition: path.c:309
Ppath pa_read(char *nomfic)
void pa_read(FILE*) reads a Ppath
Definition: path.c:438
bool pa_full_p(Ppath in_pa)
pa_full_p( (Ppath) in_pa ) AL 18/11/93 Returns True if in_pa = (NIL) ^ (NIL)
Definition: path.c:123
Ppath pa_free1(Ppath in_pa)
Ppath pa_free1(Ppath pa) BA, AL 30/05/94 1 depth free.
Definition: path.c:102
bool pa_empty_p(Ppath in_pa)
pa_empty_p( (Ppath) in_pa ) AL 18/11/93 Returns True if in_pa = (1*TCST = 0) ^ (NIL)
Definition: path.c:141
Ppath pa_reduce_simple_complement(Ppath in_pa)
Ppath pa_reduce_simple_complement( (Ppath) in_pa ) AL 16/11/93 Scan all the complement.
Definition: path.c:222
Ppath pa_intersect_system(Ppath in_pa, Psysteme in_ps)
Ppath pa_intersect_system( (Ppath) in_pa, (Psysteme) in_ps ) Computes the intersection between in_pa ...
Definition: path.c:178
Ppath pa_intersect_complement(Ppath in_pa, Pcomplement in_pc)
Ppath pa_intersect_complement( (Ppath) in_pa, (Pcomplement) in_pc ) Computes the intersection between...
Definition: path.c:200
Ppath pa_dup1(Ppath in_pa)
void pa_dup1(Ppath pa) AL 30/05/94 1 depth duplication: system and complements are shared.
Definition: path.c:91
Ppath pa_dup(Ppath in_pa)
void pa_dup(Ppath pa) AL 30/05/94
Definition: path.c:68
Ppath pa_supress_same_constraints(Ppath in_pa)
Ppath pa_supress_same_constraints( (Ppath) in_pa ) Supress from complements of in_pa same constrain...
Definition: reduc.c:528
Pdisjunct pa_path_to_few_disjunct_ofl_ctrl(Ppath in_pa, int ofl_ctrl)
line 1197 "reduc.w"
Definition: reduc.c:648
const char * entity_local_name(entity e)
entity_local_name modified so that it does not core when used in vect_fprint, since someone thought t...
Definition: entity.c:453
Psysteme sc_empty(Pbase b)
Psysteme sc_empty(Pbase b): build a Psysteme with one unfeasible constraint to define the empty subsp...
Definition: sc_alloc.c:319
bool sc_empty_p(Psysteme sc)
bool sc_empty_p(Psysteme sc): check if the set associated to sc is the constant sc_empty or not.
Definition: sc_alloc.c:350
Psysteme sc_dup(Psysteme ps)
Psysteme sc_dup(Psysteme ps): should becomes a link.
Definition: sc_alloc.c:176
Psysteme sc_append(Psysteme s1, Psysteme s2)
Psysteme sc_append(Psysteme s1, Psysteme s2): calcul de l'intersection des polyedres definis par s1 e...
Psysteme sc_safe_append(Psysteme s1, Psysteme s2)
Psysteme sc_safe_append(Psysteme s1, Psysteme s2) input : output : calcul de l'intersection des polye...
Psysteme sc_free(Psysteme in_ps)
Psysteme sc_free( in_ps ) AL 30/05/94 Free of in_ps.
Definition: sc_list.c:112
Psyslist sl_free1(Psyslist psl)
Psyslist sl_free1(Psyslist psl) AL 30/05/94 1 depth free.
Definition: sc_list.c:343
Psysteme sc_full()
Psysteme sc_full() similar to sc_new.
Definition: sc_list.c:58
Psyslist sl_free(Psyslist psl)
Psyslist sl_free(Psyslist psl) BA, AL 30/05/94 w - 1 depth free.
Definition: sc_list.c:327
char *(* union_variable_name)(Variable)
Package : C3/union Author : Arnauld LESERVOT (leservot(a)limeil.cea.fr) Date : Modified : 04 04 95 ...
Definition: sc_list.c:51
Psyslist sl_append_system(Psyslist in_sl, Psysteme in_ps)
Psyslist sl_append_system( (Psyslist) in_sl, (Psysteme) in_ps ) Input : A disjunct in_sl to wich in_p...
Definition: sc_list.c:240
Psyslist sl_dup1(Psyslist in_sl)
Psyslist sl_dup1( (Psyslist) in_sl ) AL 15/11/93 Duplicates input syslist.
Definition: sc_list.c:311
int sl_max_constraints_nb(Psyslist in_sl)
int sl_max_constraints_nb( (Psyslist) in_sl ) Give the maximum constraints nb among systems of in_sl.
Definition: sc_list.c:207
char * sl_get_tab_string(int in_tab)
char* sl_get_tab_string( in_tab ) returns a string of in_tab \t
Definition: sc_list.c:366
Psyslist sl_read(char *nomfic)
void sl_read(FILE*) reads a Psyslist
Definition: sc_list.c:461
Psyslist sl_dup(Psyslist in_sl)
Psyslist sl_dup( (Psyslist) in_sl ) AL 15/11/93 w - 1 duplication : everything is duplicated,...
Definition: sc_list.c:296
Psyslist sl_new()
Psyslist sl_new() AL 26/10/93 Input : Nothing.
Definition: sc_list.c:277
bool sl_length(Psyslist in_sl)
int sl_length( (Psyslist) in_sl ) AL 26/04/95 Returns length of in_sl.
Definition: sc_list.c:193
void sl_fprint_tab(FILE *in_fi, Psyslist in_sl, char *(*in_fu)(), int in_tab)
Definition: sc_list.c:383
int fprintf()
test sc_min : ce test s'appelle par : programme fichier1.data fichier2.data ...
Psysteme sc_normalize(Psysteme ps)
Psysteme sc_normalize(Psysteme ps): normalisation d'un systeme d'equation et d'inequations lineaires ...
void sc_transform_eg_in_ineg(Psysteme sc)
Package sc.
Pcomplist pcomp
Definition: union-local.h:20
Psysteme psys
Definition: union-local.h:19
Warning! Do not modify this file that is automatically generated!
Definition: union-local.h:3
Psysteme psys
Definition: union-local.h:4
struct Ssyslist * succ
Definition: union-local.h:5
int nb_ineq
Definition: sc-local.h:73
int nb_eq
Definition: sc-local.h:72
#define pa_fprint(fi, pa, fu)
Definition: union-local.h:109
#define PA_UNDEFINED_P(pa)
Definition: union-local.h:110
#define PA_UNDEFINED
Definition: union-local.h:23
#define SL_NULL
Definition: union-local.h:8
Ssyslist * Pdisjunct
Definition: union-local.h:10
#define C3_DEBUG(fun, code)
Definition: union-local.h:150
#define C3_RETURN(type, val)
Definition: union-local.h:151
struct Spath * Ppath
#define IS_PA
Definition: union-local.h:136
Ssyslist * Pcomplist
Definition: union-local.h:17
#define pa_new()
Definition: union-local.h:111
#define DJ_UNDEFINED
Definition: union-local.h:12