PIPS
vecteur.h
Go to the documentation of this file.
1 /* Warning! Do not modify this file that is automatically generated! */
2 /* Modify src/Libs/vecteur/vecteur-local.h instead, to add your own modifications. */
3 
4 /* header file built by cproto */
5 
6 #ifndef vecteur_header_included
7 #define vecteur_header_included
8 /* vecteur-local.h */
9 /*
10 
11  $Id: vecteur-local.h 1641 2016-03-02 08:20:19Z coelho $
12 
13  Copyright 1989-2016 MINES ParisTech
14 
15  This file is part of Linear/C3 Library.
16 
17  Linear/C3 Library is free software: you can redistribute it and/or modify it
18  under the terms of the GNU Lesser General Public License as published by
19  the Free Software Foundation, either version 3 of the License, or
20  any later version.
21 
22  Linear/C3 Library is distributed in the hope that it will be useful, but WITHOUT ANY
23  WARRANTY; without even the implied warranty of MERCHANTABILITY or
24  FITNESS FOR A PARTICULAR PURPOSE.
25 
26  See the GNU Lesser General Public License for more details.
27 
28  You should have received a copy of the GNU Lesser General Public License
29  along with Linear/C3 Library. If not, see <http://www.gnu.org/licenses/>.
30 
31 */
32 
33 /* package sur les vecteurs creux et les bases
34  *
35  * Malik Imadache, Corinne Ancourt, Neil Butler, Francois Irigoin,
36  * Remi Triolet
37  *
38  * Modifications:
39  * - les fonctions d'interface avec GenPgm dont les noms commencent par
40  * "_gC_" ont ete deplacees dans _gC_lib
41  * - passage a "char *" pour le type Variable au lieu de "int" (Linear-C3)
42  * et de "entity *" (Linear/C3 Library); le package n'est pas independant de la
43  * definition du type "Variable"; il faudrait ameliorer ca avec un
44  * package "Variable"
45  * - ajout des fonctions d'interface avec Newgen: (RT, 27/11/89)
46  * - ajout de la notion de base, comme cas particulier de vecteur
47  * (FI, 27/11/89) ou le champ "Value" n'a pas de signification
48  * - suppression de l'include de vecteur-basic-types.h; la fusion entre
49  * les versions C3 et Linear/C3 Library ne necessite plus cette distinction; il y a
50  * tellement peu de code a ecrire pour les variables et les valeurs
51  * qu'il est inutile d'avoir une directory differente pour lui
52  * - rapatriement de la definition du terme constant TCST et de la macro
53  * term_cst (du package contrainte) (PB, 06/06/90)
54  *
55  * - trop creux a mon avis. il faudrait une liste de petits tableaux ? FC.
56  */
57 
58 #ifndef NEWGEN
59 #define VECTEUR 1006 /* constante associee a un vecteur */
60 #endif
61 
62 /* arithmetique is a requirement for vecteur, but I do not want
63  * to inforce it in all pips files... thus here it is
64  */
65 #include "arithmetique.h"
66 
67 /* le type des variables (ou coordonnees) dans les vecteurs */
68 typedef void * Variable;
69 // The method type that return the name of a variable:
70 typedef char * (*get_variable_name_t)(Variable);
71 
72 #define VARIABLE_UNDEFINED ((Variable) 0)
73 #define VARIABLE_UNDEFINED_P(v) ((v)==VARIABLE_UNDEFINED)
74 #define VARIABLE_DEFINED_P(v) ((v)!=VARIABLE_UNDEFINED)
75 
76 /* le type des coefficients dans les vecteurs:
77  * Value est defini dans le package arithmetique
78  */
79 
80 /* STRUCTURE D'UN VECTEUR
81  *
82  * Un vecteur est defini par une suite de couples Variable (i.e. element
83  * de la base) et Valeur (valeur du coefficient correspondant). Les
84  * coordonnees nulles ne sont pas representees et n'existe qu'implicitement
85  * par rapport a une base (hypothetique) definie via la package "variable".
86  *
87  * En consequence, le vecteur nul est (malencontreusement) represente par
88  * NULL. Cela gene toutes les procedures succeptibles de retourner une
89  * valeur vecteur nul par effet de bord. Il faut alors passer en argument
90  * un POINTEUR vers un Pvecteur. En general, nous avons prefere retourner
91  * explicitement le vecteur calcule, a la maniere de ce qui est fait
92  * dans string.h
93  *
94  * Il n'existe pas non plus de VECTEUR_UNDEFINED, puisque sa valeur devrait
95  * logiquement etre NULL.
96  */
97 typedef struct Svecteur {
98  Variable var;
99  Value val;
100  struct Svecteur *succ;
102 
103 /* STRUCTURE D'UNE BASE
104  *
105  * Une base est definie par son vecteur diagonal
106  *
107  * Les tests d'appartenance sont effectues par comparaison des pointeurs
108  * et non par des strcmp.
109  *
110  * Rien ne contraint les coefficients a valoir 1 et le package plint
111  * mais meme certains coefficients a 0, ce qui devrait revenir a faire
112  * disparaitre la variable (i.e. la coordonnee) correspondante de la
113  * base.
114  */
115 typedef struct Svecteur Sbase, * Pbase;
116 
117 /* DEFINITION DU VECTEUR NUL */
118 #define VECTEUR_NUL ((Pvecteur) 0)
119 #define VECTEUR_NUL_P(v) ((v)==VECTEUR_NUL)
120 #define VECTEUR_UNDEFINED ((Pvecteur) 0)
121 #define VECTEUR_UNDEFINED_P(v) ((v)==VECTEUR_UNDEFINED)
122 
123 /* definition de la valeur de type PlinX==Pvecteur qui correspond a un
124  * vecteur indefini parce que l'expression correspondante n'est pas
125  * lineaire (Malik Imadache, Jean Goubault ?)
126  */
127 #define PlinX Pvecteur
128 #define NONEXPLIN ((PlinX)-1)
129 
130 /* MACROS SUR LES VECTEURS */
131 #define print_vect(s) vect_fprint(stdout,(s))
132 #define var_of(varval) ((varval)->var)
133 #define val_of(varval) ((varval)->val)
134 #define vecteur_var(v) ((v)->var)
135 #define vecteur_val(v) ((v)->val)
136 #define vecteur_succ(v) ((v)->succ)
137 
138 /* VARIABLE REPRESENTANT LE TERME CONSTANT */
139 #define TCST ((Variable) 0)
140 #define term_cst(varval) ((varval)->var == TCST)
141 
142 /* MACROS SUR LES BASES */
143 #define BASE_NULLE VECTEUR_NUL
144 #define BASE_NULLE_P(b) ((b)==VECTEUR_NUL)
145 #define BASE_UNDEFINED ((Pbase) 0)
146 #define BASE_UNDEFINED_P(b) ((b)==BASE_UNDEFINED)
147 #define base_dimension(b) vect_size((Pvecteur)(b))
148 #define base_add_dimension(b,v) vect_chg_coeff((Pvecteur *)(b),(v),VALUE_ONE)
149 #define base_rm(b) (vect_rm((Pvecteur)(b)), (b)=BASE_NULLE)
150 #define BASE_FOREACH(v, b) \
151  Pbase v ## _base = b; \
152  Variable v = v ## _base? v ## _base->var: NULL; \
153  for(; v ## _base != BASE_NULLE; v ## _base = v ## _base->succ, v = v ## _base? v ## _base->var: NULL)
154 
155 /* I do thing that overflows are managed in a very poor manner. FC.
156  * It should be all or not, as provided by any os that would raise
157  * integer overflows. Thus we should have thought of a sofware
158  * mecanism compatible with such a hardware and os approach.
159  * maybe by defining a mult_Value macro to check explicitely for
160  * overflows if needed, and defined to a simple product if not.
161  * functions would have an additional argument for returning a
162  * conservative answer in case of overflow. Maybe some global
163  * variable could count the number of overflow that occured so that
164  * some caller could check whether sg got wrong and thus could
165  * warn about the result and this fact.
166  * then we would have either the library compiled for these soft checks
167  * or for none, but without any difference or explicite requirements
168  * from the user of these functions.
169  *
170  * instead of that, we have the two versions at the same time with explicite
171  * control required from the user. I heard that for some functions
172  * this is not used... thus allowing good performance (each time some
173  * result is false someone tracks down the not checked function and
174  * checks overflow explicitely, thus it is not a very good approach).
175  * moreover the most costly functions (simplexe, chernikova) are also
176  * those in which the exceptions occurs thus they are all checked.
177  * the the impact on performances is definitely low.
178  * as far as software engineering is concerned, the current solution
179  * adds low level switch for calling different versions (controled or not)
180  * of pieces of code... this will have to be removed if some good os
181  * is to host this software...
182  */
183 
184 /* OVERFLOW CONTROL
185  */
186 #if (defined(LINEAR_NO_OVERFLOW_CONTROL))
187 #define OFL_CTRL 0
188 #define FWD_OFL_CTRL 0
189 #define NO_OFL_CTRL 0
190 #else /* some OVERFLOW CONTROL is allowed */
191 #define OFL_CTRL 2 /* overflows are treated in the called procedure */
192 #define FWD_OFL_CTRL 1 /* overflows are treated by the calling procedure */
193 #define NO_OFL_CTRL 0 /* overflows are not trapped at all (dangerous !) */
194 #endif /* LINEAR_NO_OVERFLOW_CONTROL */
195 
196 /* internal hash table for variable sets. */
197 struct linear_hashtable_st;
199 
200 /* end of vecteur-local.h */
201 /* cproto-generated files */
202 /* alloc.c */
203 extern Pvecteur vect_dup(Pvecteur /*v_in*/);
204 extern void vect_rm(Pvecteur /*v*/);
205 extern Pvecteur vect_new(Variable /*var*/, Value /*coeff*/);
206 extern void dbg_vect_rm(Pvecteur /*v*/, char */*f*/);
207 extern Pvecteur vect_make(Pvecteur /*v*/, Variable /*var*/, Value /*val*/, ...);
208 extern Pvecteur vect_make_dense(Pbase /*b*/, Value /*val*/, ...);
209 extern Pvecteur vect_make_1D(Value /*a*/, Variable /*x*/, Value /*b*/);
210 extern Pbase vect_copy(Pvecteur /*b*/);
211 extern Pbase base_dup(Pbase /*b*/);
212 extern Pbase base_copy(Pbase /*b*/);
213 /* binaires.c */
214 extern Pvecteur vect_add(Pvecteur /*v1*/, Pvecteur /*v2*/);
215 extern Pvecteur vect_substract(Pvecteur /*v1*/, Pvecteur /*v2*/);
216 extern Pvecteur vect_substitute_dimension(Pvecteur /*v*/, Variable /*i*/, Pvecteur /*s*/);
217 extern Pvecteur vect_cl_ofl_ctrl(Pvecteur /*v*/, Value /*lambda*/, Pvecteur /*u*/, int /*ofl_ctrl*/);
218 extern Pvecteur vect_cl_ofl(Pvecteur /*v*/, Value /*lambda*/, Pvecteur /*u*/);
219 extern Pvecteur vect_cl(Pvecteur /*v*/, Value /*lambda*/, Pvecteur /*u*/);
220 extern Pvecteur vect_cl2_ofl_ctrl(Value /*x1*/, Pvecteur /*v1*/, Value /*x2*/, Pvecteur /*v2*/, int /*ofl_ctrl*/);
221 extern Pvecteur vect_cl2_ofl(Value /*x1*/, Pvecteur /*v1*/, Value /*x2*/, Pvecteur /*v2*/);
222 extern Pvecteur vect_cl2(Value /*x1*/, Pvecteur /*v1*/, Value /*x2*/, Pvecteur /*v2*/);
223 extern Pvecteur vect_subst(Variable /*v*/, Pvecteur /*v1*/, Pvecteur /*v2*/);
224 /* io.c */
225 extern Pvecteur vect_read(Pbase */*b*/);
226 extern void vect_fprint(FILE */*f*/, Pvecteur /*v*/, get_variable_name_t /*variable_name*/);
227 extern void vect_fprint_as_dense(FILE */*f*/, Pvecteur /*v*/, Pbase /*b*/);
228 extern void vect_fprint_as_monome(FILE */*f*/, Pvecteur /*v*/, Pbase /*b*/, get_variable_name_t /*variable_name*/, char */*mult_symbol*/);
229 extern char *vect_sprint_as_monome(Pvecteur /*v*/, Pbase /*b*/, get_variable_name_t /*variable_name*/, char */*mult_symbol*/);
230 extern void vect_dump(Pvecteur /*v*/);
231 extern void vect_print(Pvecteur /*v*/, get_variable_name_t /*variable_name*/);
232 extern void vect_fdump(FILE */*f*/, Pvecteur /*v*/);
233 extern void base_fprint(FILE */*f*/, Pbase /*b*/, get_variable_name_t /*variable_name*/);
234 /* reductions.c */
235 extern int vect_size(Pvecteur /*v*/);
236 extern int vect_dimension(Pvecteur /*v*/);
237 extern Value vect_prod_scal(Pvecteur /*v1*/, Pvecteur /*v2*/);
238 extern Value vect_pgcd_all(Pvecteur /*v*/);
239 extern Value vect_pgcd_except(Pvecteur /*v*/, Variable /*var*/);
240 extern Value vect_max0(Pvecteur /*v*/);
241 extern Value vect_min0(Pvecteur /*v*/);
242 extern Value vect_min(Pvecteur /*v*/);
243 extern Value vect_max(Pvecteur /*v*/);
244 extern Value vect_sum(Pvecteur /*v*/);
245 extern bool vect_equal(Pvecteur /*v1*/, Pvecteur /*v2*/);
246 extern bool vect_equal_except(Pvecteur /*v1*/, Pvecteur /*v2*/, Variable /*var*/);
247 extern bool vect_oppos(Pvecteur /*v1*/, Pvecteur /*v2*/);
248 extern bool vect_opposite_except(Pvecteur /*v1*/, Pvecteur /*v2*/, Variable /*var*/);
249 extern int vect_proport(Pvecteur /*v1*/, Pvecteur /*v2*/);
250 extern bool vect_colin_base(Pvecteur /*vec*/, Variable /*var*/);
251 extern bool vect_check(Pvecteur /*cv*/);
252 extern bool vect_consistent_p(Pvecteur /*v*/);
253 extern bool vect_larger_coef_p(Pvecteur /*v*/, Value /*val*/);
254 /* unaires.c */
255 extern void vect_normalize(Pvecteur /*v*/);
256 extern void vect_add_elem(Pvecteur */*pvect*/, Variable /*var*/, Value /*val*/);
257 extern void vect_erase_var(Pvecteur */*ppv*/, Variable /*v*/);
258 extern void vect_chg_coeff(Pvecteur */*ppv*/, Variable /*var*/, Value /*val*/);
259 extern void vect_chg_var(Pvecteur */*ppv*/, Variable /*v_old*/, Variable /*v_new*/);
261 extern Pvecteur vect_del_var(Pvecteur /*v_in*/, Variable /*var*/);
262 extern Value vect_coeff(Variable /*var*/, Pvecteur /*vect*/);
263 extern Value vect_coeff_sum(Pvecteur /*vect*/);
264 extern Pvecteur vect_sign(Pvecteur /*v*/);
265 extern void vect_sort_in_place(Pvecteur */*pv*/, int (* /*compare*/)(Pvecteur *, Pvecteur *));
266 extern Pvecteur vect_sort(Pvecteur /*v*/, int (* /*compare*/)(Pvecteur *, Pvecteur *));
267 extern int vect_compare(Pvecteur */*pv1*/, Pvecteur */*pv2*/);
268 extern void Pvecteur_separate_on_sign(Pvecteur /*v*/, Pvecteur */*pvpos*/, Pvecteur */*pvneg*/);
269 extern bool vect_common_variables_p(Pvecteur /*v1*/, Pvecteur /*v2*/);
270 extern bool vect_contains_variable_p(Pvecteur /*v*/, Variable /*var*/);
271 extern int vect_lexicographic_compare(Pvecteur /*v1*/, Pvecteur /*v2*/, int (* /*compare*/)(Pvecteur *, Pvecteur *));
272 extern int vect_lexicographic_compare2(Pvecteur /*v1*/, Pvecteur /*v2*/, int (* /*compare*/)(Pvecteur *, Pvecteur *));
273 extern int vect_lexicographic_unsafe_compare(Pvecteur /*v1*/, Pvecteur /*v2*/, int (* /*compare*/)(Pvecteur *, Pvecteur *));
274 extern int vect_lexicographic_unsafe_compare2(Pvecteur /*v1*/, Pvecteur /*v2*/, int (* /*compare*/)(Pvecteur *, Pvecteur *));
275 extern int vect_lexicographic_unsafe_compare_generic(Pvecteur /*v1*/, Pvecteur /*v2*/, int (* /*compare*/)(Pvecteur *, Pvecteur *), bool /*is_equation*/);
276 /* base.c */
277 extern Pbase vect_add_variable(Pbase /*b*/, Variable /*v*/);
278 extern Pbase base_add_variable(Pbase /*b*/, Variable /*var*/);
279 extern Pbase make_base_from_vect(Pvecteur /*pv*/);
280 extern Pbase base_remove_variable(Pbase /*b*/, Variable /*v*/);
281 extern bool base_contains_variable_p(Pbase /*b*/, Variable /*v*/);
282 extern Variable base_find_variable(Pbase /*b*/, Variable /*v*/);
283 extern Variable base_find_variable_name(Pbase /*b*/, Variable /*v*/, char *(* /*variable_name*/)(Variable));
284 extern int base_find_variable_rank(Pbase /*b*/, Variable /*v*/, char *(* /*variable_name*/)(Variable));
285 extern Pbase base_reversal(Pbase /*b_in*/);
286 extern Pvecteur vect_rename(Pvecteur /*v*/, Pbase /*b*/, char *(* /*variable_name*/)(Variable));
287 extern Pvecteur vect_rename_variables(Pvecteur /*v*/, bool (* /*renamed_p*/)(Variable), Variable (* /*new_variable*/)(Variable));
288 extern Pvecteur vect_translate(Pvecteur /*v*/, Pbase /*b*/, char *(* /*variable_name*/)(Variable));
289 extern bool vect_in_basis_p(Pvecteur /*v*/, Pbase /*b*/);
290 extern Pvecteur vect_variable_rename(Pvecteur /*v*/, Variable /*v_old*/, Variable /*v_new*/);
291 extern void base_append(Pbase */*pb1*/, Pbase /*b2*/);
292 extern Pbase base_union(Pbase /*b1*/, Pbase /*b2*/);
293 extern Pbase base_intersection(Pbase /*b1*/, Pbase /*b2*/);
294 extern int rank_of_variable(Pbase /*base*/, Variable /*var*/);
295 extern Variable variable_of_rank(Pbase /*base*/, int /*rank*/);
296 extern int search_higher_rank(Pvecteur /*vect*/, Pbase /*base*/);
297 extern Variable search_var_of_higher_rank(Pvecteur /*pvect*/, Pbase /*base*/, Variable /*var*/);
298 extern Pvecteur search_i_element(Pbase /*b*/, int /*i*/);
299 extern Pbase base_normalize(Pbase /*b*/);
300 extern bool base_normalized_p(Pbase /*b*/);
301 extern Pbase base_difference(Pbase /*b1*/, Pbase /*b2*/);
302 extern bool base_included_p(Pbase /*b1*/, Pbase /*b2*/);
303 extern bool bases_strictly_equal_p(Pbase /*b1*/, Pbase /*b2*/);
304 /* error.c */
305 extern void vect_error(char */*name*/, char */*fmt*/, ...);
306 /* private.c */
307 extern Pvecteur vect_chain(Pvecteur /*v_in*/, Variable /*var*/, Value /*coeff*/);
308 extern Pvecteur vect_elem(Pvecteur /*vect*/, Variable /*var*/);
309 extern Pvecteur vect_extract(Pvecteur /*pvec*/, Variable /*var*/);
310 extern Variable vect_first_var(Pvecteur /*pvec*/);
311 extern Pvecteur vect_reversal(Pvecteur /*vect_in*/);
312 /* scalaires.c */
313 extern Pvecteur vect_div(Pvecteur /*v*/, Value /*x*/);
314 extern Pvecteur vect_clean(Pvecteur /*v*/);
315 extern Pvecteur vect_multiply(Pvecteur /*v*/, Value /*x*/);
316 extern void vect_chg_sgn(Pvecteur /*v*/);
317 /* variable.c */
318 extern bool variable_equal(Variable /*v1*/, Variable /*v2*/);
319 extern char *variable_default_name(Variable /*v*/);
320 extern char *variable_dump_name(Variable /*v*/);
321 extern char *(*variable_debug_name)(Variable);
322 extern void init_variable_debug_name(char *(* /*name*/)(Variable));
323 extern void reset_variable_debug_name(void);
324 extern Variable variable_make(char */*name*/);
325 /* hashpointer.c */
326 extern void linear_hashtable_dump(linear_hashtable_pt /*h*/);
329 extern void linear_hashtable_free(linear_hashtable_pt /*h*/);
330 extern void linear_hashtable_put(linear_hashtable_pt /*h*/, void */*k*/, void */*v*/);
331 extern void linear_hashtable_put_once(linear_hashtable_pt /*h*/, void */*k*/, void */*v*/);
332 extern bool linear_hashtable_isin(linear_hashtable_pt /*h*/, void */*k*/);
333 extern bool linear_hashtable_remove(linear_hashtable_pt /*h*/, void */*k*/);
334 extern void *linear_hashtable_get(linear_hashtable_pt /*h*/, void */*k*/);
336 #endif /* vecteur_header_included */
int Value
le type des coefficients dans les vecteurs: Value est defini dans le package arithmetique
Definition: vecteur-local.h:89
Value val
Definition: vecteur-local.h:91
Variable var
Definition: vecteur-local.h:90
struct Svecteur * succ
Definition: vecteur-local.h:92
hidden structure to store the hashtable.
Definition: hashpointer.c:66
void * Variable
arithmetique is a requirement for vecteur, but I do not want to inforce it in all pips files....
Definition: vecteur-local.h:60
void vect_add_elem(Pvecteur *, Variable, Value)
void vect_add_elem(Pvecteur * pvect, Variable var, Value val): addition d'un vecteur colineaire au ve...
Definition: unaires.c:72
Pvecteur vect_make_1D(Value, Variable, Value)
Generate a sparse vector a x + b TCST.
Definition: alloc.c:226
bool bases_strictly_equal_p(Pbase, Pbase)
Make sure that each dimension of b1 is the same dimension in b2.
Definition: base.c:660
bool vect_common_variables_p(Pvecteur, Pvecteur)
bool vect_common_variables_p(Pvecteur v1, v2) BA 19/05/94 input : two vectors.
Definition: unaires.c:397
void vect_fprint_as_monome(FILE *, Pvecteur, Pbase, get_variable_name_t, char *)
void vect_fprint_as_monome(FILE * f, Pvecteur v, Pbase b, char * (*variable_name)(),...
Definition: io.c:201
struct linear_hashtable_st * linear_hashtable_pt
Definition: vecteur.h:198
Pvecteur vect_rename_variables(Pvecteur, bool(*)(Variable), Variable(*)(Variable))
Pvecteur vect_rename_variables(v, renamed_p, new_variable) Pvecteur v; bool (*renamed_p)(Variable); V...
Definition: base.c:281
bool vect_consistent_p(Pvecteur)
To ease retrieval of vect_check()
Definition: reductions.c:557
void base_fprint(FILE *, Pbase, get_variable_name_t)
void base_fprint(FILE * f, Pbase b, char * (*variable_name)()): impression d'une base sur le fichier ...
Definition: io.c:342
Pbase base_intersection(Pbase, Pbase)
Return variables/dimensions present in bases b1 and b2.
Definition: base.c:473
char * variable_default_name(Variable)
char * variable_default_name(Variable v): returns the name of variable v
Definition: variable.c:81
Pvecteur vect_extract(Pvecteur, Variable)
UNUSED - NOT TESTED.
Definition: private.c:126
Pvecteur vect_cl_ofl(Pvecteur, Value, Pvecteur)
Definition: binaires.c:173
bool vect_equal(Pvecteur, Pvecteur)
bool vect_equal(Pvecteur v1, Pvecteur v2): test a egalite de deux vecteurs
Definition: reductions.c:278
void vect_dump(Pvecteur)
void vect_dump(Pvecteur v): print sparse vector v on stderr.
Definition: io.c:304
void init_variable_debug_name(char *(*)(Variable))
Pvecteur vect_elem(Pvecteur, Variable)
PRIVATE: introduit du sharing; never used...
Definition: private.c:91
int vect_lexicographic_unsafe_compare(Pvecteur, Pvecteur, int(*)(Pvecteur *, Pvecteur *))
Definition: unaires.c:464
Variable base_find_variable(Pbase, Variable)
Variable base_find_variable(Pbase b, Variable v): returns variable v if variable v is one of b's elem...
Definition: base.c:155
int vect_lexicographic_compare(Pvecteur, Pvecteur, int(*)(Pvecteur *, Pvecteur *))
qsort() is not safe if the comparison function is not antisymmetric.
Definition: unaires.c:433
Value vect_max0(Pvecteur)
Value vect_max0(Pvecteur v): recherche du coefficient maximum d'un vecteur v; ce coefficient est touj...
Definition: reductions.c:164
Pvecteur vect_chain(Pvecteur, Variable, Value)
private.c
Definition: private.c:69
void vect_chg_sgn(Pvecteur)
void vect_chg_sgn(Pvecteur v): multiplie v par -1
Definition: scalaires.c:151
Value vect_min(Pvecteur)
Value vect_min(Pvecteur v): recherche du coefficient non nul minimum d'un vecteur v; aborte sur le ve...
Definition: reductions.c:208
Variable variable_of_rank(Pbase, int)
Variable variable_of_rank(): this function returns the variable of rank "rank".
Definition: base.c:520
Value vect_prod_scal(Pvecteur, Pvecteur)
Value vect_prod_scal(v1,v2): produit scalaire de v1 et de v2.
Definition: reductions.c:82
Value vect_min0(Pvecteur)
Value vect_min0(Pvecteur v): recherche du coefficient minimum d'un vecteur v; ce coefficient est touj...
Definition: reductions.c:186
struct Svecteur * Pbase
Definition: vecteur.h:115
int vect_size(Pvecteur)
reductions.c
Definition: reductions.c:47
Pbase base_reversal(Pbase)
Pbase base_reversal(Pbase b_in): produces a basis b_out, having the same basis vectors as b_in,...
Definition: base.c:221
Value vect_max(Pvecteur)
Value vect_max(Pvecteur v): recherche du coefficient non nul maximum d'un vecteur v; aborte sur le ve...
Definition: reductions.c:240
Pvecteur vect_del_var(Pvecteur, Variable)
Pvecteur vect_del_var(Pvecteur v_in, Variable var): allocation d'un nouveau vecteur egal a la project...
Definition: unaires.c:206
int base_find_variable_rank(Pbase, Variable, char *(*)(Variable))
bool vect_contains_variable_p(Pvecteur, Variable)
bool vect_contains_variable_p(Pvecteur v, Variable var) BA 19/05/94 input : a vector and a variable o...
Definition: unaires.c:415
Value vect_pgcd_except(Pvecteur, Variable)
Value vect_pgcd_except(Pvecteur v, Variable var): calcul du pgcd de tous les coefficients non nul d'u...
Definition: reductions.c:130
void base_append(Pbase *, Pbase)
appends b2 to b1.
Definition: base.c:384
Pvecteur vect_cl(Pvecteur, Value, Pvecteur)
Definition: binaires.c:181
Pvecteur vect_make_dense(Pbase, Value,...)
Allocate a new vector v whose coefficient are given by the list of values ad whose dimension is given...
Definition: alloc.c:198
void vect_erase_var(Pvecteur *, Variable)
void vect_erase_var(Pvecteur * ppv, Variable v): projection du vecteur *ppv selon la direction v (i....
Definition: unaires.c:106
bool variable_equal(Variable, Variable)
variable.c
Definition: variable.c:62
void linear_hashtable_put(linear_hashtable_pt, void *, void *)
Definition: hashpointer.c:263
Pvecteur vect_reversal(Pvecteur)
Pvecteur vect_reversal(Pvecteur vect_in); produces the reversal vector of the vect_in.
Definition: private.c:237
void vect_fprint(FILE *, Pvecteur, get_variable_name_t)
void vect_fprint(FILE * f, Pvecteur v, char * (*variable_name)()): impression d'un vecteur creux v su...
Definition: io.c:124
Pvecteur vect_clean(Pvecteur)
Pvecteur vect_clean(Pvecteur v): elimination de tous les couples dont le coefficient vaut 0 dans le v...
Definition: scalaires.c:80
bool vect_in_basis_p(Pvecteur, Pbase)
Pvecteur vect_in_basis_p(Pvecteur v, Pbase b): check that all coordinates in v are in b,...
Definition: base.c:342
char * variable_dump_name(Variable)
variable_dump_name() returns an unambiguous name for variable v, based on the pointer used to really ...
Definition: variable.c:96
bool base_contains_variable_p(Pbase, Variable)
bool base_contains_variable_p(Pbase b, Variable v): returns true if variable v is one of b's elements...
Definition: base.c:136
Value vect_coeff(Variable, Pvecteur)
Variable vect_coeff(Variable var, Pvecteur vect): coefficient de coordonnee var du vecteur vect —> So...
Definition: unaires.c:228
void vect_print(Pvecteur, get_variable_name_t)
void vect_print(Pvecteur v, char * (*variable_name)()): impression d'un vecteur creux v sur stdout; l...
Definition: io.c:312
bool vect_opposite_except(Pvecteur, Pvecteur, Variable)
bool vect_opposite_except(Pvecteur v1, Pvecteur v2, Variable var): test a egalite des projections sel...
Definition: reductions.c:399
Pbase vect_copy(Pvecteur)
direct duplication.
Definition: alloc.c:240
char *(* get_variable_name_t)(Variable)
Definition: vecteur.h:70
Pvecteur vect_sign(Pvecteur)
Pvecteur vect_sign(Pvecteur v): application de l'operation signe au vecteur v.
Definition: unaires.c:269
struct Svecteur * Pvecteur
void vect_error(char *, char *,...)
error.c
Definition: error.c:50
Pvecteur vect_translate(Pvecteur, Pbase, char *(*)(Variable))
void vect_chg_coeff(Pvecteur *, Variable, Value)
void vect_chg_coeff(Pvecteur *ppv, Variable var, Value val): mise de la coordonnee var du vecteur *pp...
Definition: unaires.c:143
bool vect_check(Pvecteur)
bool vect_check(Pvecteur v): renvoie true si le vecteur v est coherent avec les specifications du pac...
Definition: reductions.c:529
void reset_variable_debug_name(void)
Definition: variable.c:121
Pbase base_union(Pbase, Pbase)
Pbase base_union(Pbase b1, Pbase b2): compute a new basis containing all elements of b1 and all eleme...
Definition: base.c:428
Variable base_find_variable_name(Pbase, Variable, char *(*)(Variable))
void vect_rm(Pvecteur)
void vect_rm(Pvecteur v): desallocation des couples de v;
Definition: alloc.c:78
bool vect_equal_except(Pvecteur, Pvecteur, Variable)
bool vect_equal_except(Pvecteur v1, Pvecteur v2, Variable var): test a egalite des projections selon ...
Definition: reductions.c:319
Pvecteur search_i_element(Pbase, int)
Pvecteur search_i_element(): recherche du i-ieme couple (var,val) dans la Pbase b.
Definition: base.c:583
bool linear_hashtable_remove(linear_hashtable_pt, void *)
Definition: hashpointer.c:278
int vect_proport(Pvecteur, Pvecteur)
int vect_proport(Pvecteur v1, Pvecteur v2): test de la colinearite de deux vecteurs et de leur direct...
Definition: reductions.c:455
int linear_hashtable_nitems(linear_hashtable_pt)
Definition: hashpointer.c:299
void Pvecteur_separate_on_sign(Pvecteur, Pvecteur *, Pvecteur *)
void Pvecteur_separate_on_sign(v, pvpos, pvneg) Pvecteur v, *pvpos, *pvneg;
Definition: unaires.c:369
linear_hashtable_pt linear_hashtable_make(void)
constructor.
Definition: hashpointer.c:165
Pbase vect_add_variable(Pbase, Variable)
base.c
Definition: base.c:61
Pvecteur vect_make(Pvecteur, Variable, Value,...)
Pvecteur vect_make(v, [var, val,]* 0, val) Pvecteur v; // may be NULL, use assigne anyway Variable va...
Definition: alloc.c:165
void * Variable
arithmetique is a requirement for vecteur, but I do not want to inforce it in all pips files....
Definition: vecteur.h:68
void vect_fdump(FILE *, Pvecteur)
void vect_fdump(FILE * f, Pvecteur v): impression d'un vecteur creux par vect_fprint() avec passage d...
Definition: io.c:320
bool vect_oppos(Pvecteur, Pvecteur)
bool vect_oppos(Pvecteur v1, Pvecteur v2): test de l'opposition de deux vecteurs
Definition: reductions.c:360
Pbase base_dup(Pbase)
Pbase base_dup(Pbase b) Note: this function changes the value of the pointer.
Definition: alloc.c:268
Pbase base_add_variable(Pbase, Variable)
Pbase base_add_variable(Pbase b, Variable v): add variable v as a new dimension to basis b at the end...
Definition: base.c:88
Pbase base_copy(Pbase)
Direct duplication.
Definition: alloc.c:300
bool linear_hashtable_isin(linear_hashtable_pt, void *)
Definition: hashpointer.c:273
void vect_chg_var(Pvecteur *, Variable, Variable)
void vect_chg_var(Pvecteur *ppv, Variable v_old, Variable v_new) replace the variable v_old by v_new
Definition: unaires.c:168
Pbase base_remove_variable(Pbase, Variable)
Pbase base_remove_variable(b, v): remove basis vector relative to v from b; abort if v is not in b;.
Definition: base.c:122
int search_higher_rank(Pvecteur, Pbase)
int search_higher_rank(): this fonction returns the rank of the variable of higher rank in the vecteu...
Definition: base.c:541
Pvecteur vect_dup(Pvecteur)
end of vecteur-local.h
Definition: alloc.c:51
Variable vect_first_var(Pvecteur)
PRIVATE: marquage du couple var_val comme visite par remplacement de var par -var dans le couple (OBS...
Definition: private.c:227
bool vect_colin_base(Pvecteur, Variable)
bool vect_colin_base(Pvecteur vec, Variable var): renvoie true si --> --> vec = k var
Definition: reductions.c:508
void vect_normalize(Pvecteur)
unaires.c
Definition: unaires.c:59
Value vect_coeff_sum(Pvecteur)
Value vect_coeff_sum(Pvecteur vect): coefficient sum de tout les val de ce vecteur (devrait etre dans...
Definition: unaires.c:246
void linear_hashtable_free(linear_hashtable_pt)
destructor
Definition: hashpointer.c:189
int vect_dimension(Pvecteur)
int vect_dimension(Pvecteur v): calcul du nombre de composantes non nulles et non constantes d'un vec...
Definition: reductions.c:64
void vect_fprint_as_dense(FILE *, Pvecteur, Pbase)
void vect_fprint_as_dense(FILE * f, Pvecteur v, Pbase b):
Definition: io.c:159
bool vect_larger_coef_p(Pvecteur, Value)
Definition: reductions.c:564
bool linear_hashtable_coherent_p(linear_hashtable_pt)
check hashtable coherency
Definition: hashpointer.c:128
Pbase make_base_from_vect(Pvecteur)
Definition: base.c:109
Variable variable_make(char *)
Variable variable_make(char * name): defines a new variable of a given name.
Definition: variable.c:129
Pvecteur vect_add(Pvecteur, Pvecteur)
binaires.c
Definition: binaires.c:53
int vect_lexicographic_compare2(Pvecteur, Pvecteur, int(*)(Pvecteur *, Pvecteur *))
Version for inequalities.
Definition: unaires.c:449
Pvecteur vect_sort(Pvecteur, int(*)(Pvecteur *, Pvecteur *))
Value vect_pgcd_all(Pvecteur)
Value vect_pgcd(Pvecteur v): calcul du pgcd de tous les coefficients non nul d'un vecteur v.
Definition: reductions.c:108
Pvecteur vect_cl2_ofl(Value, Pvecteur, Value, Pvecteur)
Definition: binaires.c:238
Pvecteur vect_substract(Pvecteur, Pvecteur)
Pvecteur vect_substract(Pvecteur v1, Pvecteur v2): allocation d'un vecteur v dont la valeur est la di...
Definition: binaires.c:75
int vect_lexicographic_unsafe_compare_generic(Pvecteur, Pvecteur, int(*)(Pvecteur *, Pvecteur *), bool)
Value vect_sum(Pvecteur)
Value vect_sum(Pvecteur v): somme des coefficients d'un vecteur (i.e.
Definition: reductions.c:261
int vect_compare(Pvecteur *, Pvecteur *)
for qsort, returns:
Definition: unaires.c:352
void linear_hashtable_put_once(linear_hashtable_pt, void *, void *)
Definition: hashpointer.c:268
Pbase base_normalize(Pbase)
Definition: base.c:594
Pvecteur vect_cl_ofl_ctrl(Pvecteur, Value, Pvecteur, int)
Pvecteur vect_cl_ofl_ctrl(Pvecteur v, Value lambda, Pvecteur u, int ofl_ctrl): etape d'acculumulation...
Definition: binaires.c:128
int rank_of_variable(Pbase, Variable)
this function returns the rank of the variable var in the base 0 encodes TCST, but I do not know why,...
Definition: base.c:497
Pvecteur vect_cl2_ofl_ctrl(Value, Pvecteur, Value, Pvecteur, int)
Pvecteur vect_cl2_ofl(Value x1, Pvecteur v1, Value x2, Pvecteur v2): allocation d'un vecteur v dont l...
Definition: binaires.c:204
Pvecteur vect_read(Pbase *)
io.c
Definition: io.c:65
Pvecteur vect_div(Pvecteur, Value)
scalaires.c
Definition: scalaires.c:52
void vect_sort_in_place(Pvecteur *, int(*)(Pvecteur *, Pvecteur *))
Pvecteur vect_substitute_dimension(Pvecteur, Variable, Pvecteur)
Pvecteur vect_substitute_dimension(Pvecteur v, Variable i, Pvecteur s)
Definition: binaires.c:99
int vect_lexicographic_unsafe_compare2(Pvecteur, Pvecteur, int(*)(Pvecteur *, Pvecteur *))
Definition: unaires.c:474
Variable search_var_of_higher_rank(Pvecteur, Pbase, Variable)
this function returns the variable of higher rank, after the variable var, in the vecteur pvect
Definition: base.c:561
Pvecteur vect_multiply(Pvecteur, Value)
Pvecteur vect_multiply(Pvecteur v, Value x): multiplication du vecteur v par le scalaire x,...
Definition: scalaires.c:123
Pvecteur vect_subst(Variable, Pvecteur, Pvecteur)
Pvecteur vect_subst(Variable v, Pvecteur v1, Pvecteur v2): calcul d'un vecteur v3 tel que l'intersect...
Definition: binaires.c:286
Pvecteur vect_rename(Pvecteur, Pbase, char *(*)(Variable))
Variable vect_one_coeff_if_any(Pvecteur)
Definition: unaires.c:182
struct Svecteur Svecteur
le type des coefficients dans les vecteurs: Value est defini dans le package arithmetique
Pvecteur vect_cl2(Value, Pvecteur, Value, Pvecteur)
Definition: binaires.c:247
char * vect_sprint_as_monome(Pvecteur, Pbase, get_variable_name_t, char *)
char *vect_sprint_as_monome(Pvecteur v, Pbase b, char * (*variable_name)(), char *mult_symbol): Retou...
Definition: io.c:217
Pbase base_difference(Pbase, Pbase)
Pbase base_difference(Pbase b1, Pbase b2): allocate b; b = b1 - b2 – with the set meaning return b;.
Definition: base.c:621
void dbg_vect_rm(Pvecteur, char *)
bool base_included_p(Pbase, Pbase)
Pbase base_included_p(Pbase b1, Pbase b2): include_p = b1 is included in b2 – with the set meaning re...
Definition: base.c:640
void * linear_hashtable_get(linear_hashtable_pt, void *)
Definition: hashpointer.c:293
void linear_hashtable_dump(linear_hashtable_pt)
hashpointer.c
Definition: hashpointer.c:122
Pvecteur vect_new(Variable, Value)
Pvecteur vect_new(Variable var,Value coeff): allocation d'un vecteur colineaire au vecteur de base va...
Definition: alloc.c:110
Pvecteur vect_variable_rename(Pvecteur, Variable, Variable)
Pvecteur vect_variable_rename(Pvecteur v, Variable v_old, Variable v_new): rename the potential coord...
Definition: base.c:366
bool base_normalized_p(Pbase)
Definition: base.c:604