6 #ifndef vecteur_header_included
7 #define vecteur_header_included
70 typedef char * (*get_variable_name_t)(
Variable);
72 #define VARIABLE_UNDEFINED ((Variable) 0)
73 #define VARIABLE_UNDEFINED_P(v) ((v)==VARIABLE_UNDEFINED)
74 #define VARIABLE_DEFINED_P(v) ((v)!=VARIABLE_UNDEFINED)
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)
127 #define PlinX Pvecteur
128 #define NONEXPLIN ((PlinX)-1)
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)
139 #define TCST ((Variable) 0)
140 #define term_cst(varval) ((varval)->var == TCST)
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)
186 #if (defined(LINEAR_NO_OVERFLOW_CONTROL))
188 #define FWD_OFL_CTRL 0
189 #define NO_OFL_CTRL 0
192 #define FWD_OFL_CTRL 1
193 #define NO_OFL_CTRL 0
321 extern char *(*variable_debug_name)(
Variable);
le type des coefficients dans les vecteurs: Value est defini dans le package arithmetique
hidden structure to store the hashtable.
void * Variable
arithmetique is a requirement for vecteur, but I do not want to inforce it in all pips files....
void vect_add_elem(Pvecteur *, Variable, Value)
void vect_add_elem(Pvecteur * pvect, Variable var, Value val): addition d'un vecteur colineaire au ve...
Pvecteur vect_make_1D(Value, Variable, Value)
Generate a sparse vector a x + b TCST.
bool bases_strictly_equal_p(Pbase, Pbase)
Make sure that each dimension of b1 is the same dimension in b2.
bool vect_common_variables_p(Pvecteur, Pvecteur)
bool vect_common_variables_p(Pvecteur v1, v2) BA 19/05/94 input : two vectors.
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)(),...
struct linear_hashtable_st * linear_hashtable_pt
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...
bool vect_consistent_p(Pvecteur)
To ease retrieval of vect_check()
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 ...
Pbase base_intersection(Pbase, Pbase)
Return variables/dimensions present in bases b1 and b2.
char * variable_default_name(Variable)
char * variable_default_name(Variable v): returns the name of variable v
Pvecteur vect_extract(Pvecteur, Variable)
UNUSED - NOT TESTED.
Pvecteur vect_cl_ofl(Pvecteur, Value, Pvecteur)
bool vect_equal(Pvecteur, Pvecteur)
bool vect_equal(Pvecteur v1, Pvecteur v2): test a egalite de deux vecteurs
void vect_dump(Pvecteur)
void vect_dump(Pvecteur v): print sparse vector v on stderr.
void init_variable_debug_name(char *(*)(Variable))
Pvecteur vect_elem(Pvecteur, Variable)
PRIVATE: introduit du sharing; never used...
int vect_lexicographic_unsafe_compare(Pvecteur, Pvecteur, int(*)(Pvecteur *, Pvecteur *))
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...
int vect_lexicographic_compare(Pvecteur, Pvecteur, int(*)(Pvecteur *, Pvecteur *))
qsort() is not safe if the comparison function is not antisymmetric.
Value vect_max0(Pvecteur)
Value vect_max0(Pvecteur v): recherche du coefficient maximum d'un vecteur v; ce coefficient est touj...
Pvecteur vect_chain(Pvecteur, Variable, Value)
private.c
void vect_chg_sgn(Pvecteur)
void vect_chg_sgn(Pvecteur v): multiplie v par -1
Value vect_min(Pvecteur)
Value vect_min(Pvecteur v): recherche du coefficient non nul minimum d'un vecteur v; aborte sur le ve...
Variable variable_of_rank(Pbase, int)
Variable variable_of_rank(): this function returns the variable of rank "rank".
Value vect_prod_scal(Pvecteur, Pvecteur)
Value vect_prod_scal(v1,v2): produit scalaire de v1 et de v2.
Value vect_min0(Pvecteur)
Value vect_min0(Pvecteur v): recherche du coefficient minimum d'un vecteur v; ce coefficient est touj...
int vect_size(Pvecteur)
reductions.c
Pbase base_reversal(Pbase)
Pbase base_reversal(Pbase b_in): produces a basis b_out, having the same basis vectors as b_in,...
Value vect_max(Pvecteur)
Value vect_max(Pvecteur v): recherche du coefficient non nul maximum d'un vecteur v; aborte sur le ve...
Pvecteur vect_del_var(Pvecteur, Variable)
Pvecteur vect_del_var(Pvecteur v_in, Variable var): allocation d'un nouveau vecteur egal a la project...
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...
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...
void base_append(Pbase *, Pbase)
appends b2 to b1.
Pvecteur vect_cl(Pvecteur, Value, Pvecteur)
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...
void vect_erase_var(Pvecteur *, Variable)
void vect_erase_var(Pvecteur * ppv, Variable v): projection du vecteur *ppv selon la direction v (i....
bool variable_equal(Variable, Variable)
variable.c
void linear_hashtable_put(linear_hashtable_pt, void *, void *)
Pvecteur vect_reversal(Pvecteur)
Pvecteur vect_reversal(Pvecteur vect_in); produces the reversal vector of the vect_in.
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...
Pvecteur vect_clean(Pvecteur)
Pvecteur vect_clean(Pvecteur v): elimination de tous les couples dont le coefficient vaut 0 dans le v...
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,...
char * variable_dump_name(Variable)
variable_dump_name() returns an unambiguous name for variable v, based on the pointer used to really ...
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...
Value vect_coeff(Variable, Pvecteur)
Variable vect_coeff(Variable var, Pvecteur vect): coefficient de coordonnee var du vecteur vect —> So...
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...
bool vect_opposite_except(Pvecteur, Pvecteur, Variable)
bool vect_opposite_except(Pvecteur v1, Pvecteur v2, Variable var): test a egalite des projections sel...
Pbase vect_copy(Pvecteur)
direct duplication.
char *(* get_variable_name_t)(Variable)
Pvecteur vect_sign(Pvecteur)
Pvecteur vect_sign(Pvecteur v): application de l'operation signe au vecteur v.
struct Svecteur * Pvecteur
void vect_error(char *, char *,...)
error.c
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...
bool vect_check(Pvecteur)
bool vect_check(Pvecteur v): renvoie true si le vecteur v est coherent avec les specifications du pac...
void reset_variable_debug_name(void)
Pbase base_union(Pbase, Pbase)
Pbase base_union(Pbase b1, Pbase b2): compute a new basis containing all elements of b1 and all eleme...
Variable base_find_variable_name(Pbase, Variable, char *(*)(Variable))
void vect_rm(Pvecteur)
void vect_rm(Pvecteur v): desallocation des couples de v;
bool vect_equal_except(Pvecteur, Pvecteur, Variable)
bool vect_equal_except(Pvecteur v1, Pvecteur v2, Variable var): test a egalite des projections selon ...
Pvecteur search_i_element(Pbase, int)
Pvecteur search_i_element(): recherche du i-ieme couple (var,val) dans la Pbase b.
bool linear_hashtable_remove(linear_hashtable_pt, void *)
int vect_proport(Pvecteur, Pvecteur)
int vect_proport(Pvecteur v1, Pvecteur v2): test de la colinearite de deux vecteurs et de leur direct...
int linear_hashtable_nitems(linear_hashtable_pt)
void Pvecteur_separate_on_sign(Pvecteur, Pvecteur *, Pvecteur *)
void Pvecteur_separate_on_sign(v, pvpos, pvneg) Pvecteur v, *pvpos, *pvneg;
linear_hashtable_pt linear_hashtable_make(void)
constructor.
Pbase vect_add_variable(Pbase, Variable)
base.c
Pvecteur vect_make(Pvecteur, Variable, Value,...)
Pvecteur vect_make(v, [var, val,]* 0, val) Pvecteur v; // may be NULL, use assigne anyway Variable va...
void * Variable
arithmetique is a requirement for vecteur, but I do not want to inforce it in all pips files....
void vect_fdump(FILE *, Pvecteur)
void vect_fdump(FILE * f, Pvecteur v): impression d'un vecteur creux par vect_fprint() avec passage d...
bool vect_oppos(Pvecteur, Pvecteur)
bool vect_oppos(Pvecteur v1, Pvecteur v2): test de l'opposition de deux vecteurs
Pbase base_dup(Pbase)
Pbase base_dup(Pbase b) Note: this function changes the value of the pointer.
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...
Pbase base_copy(Pbase)
Direct duplication.
bool linear_hashtable_isin(linear_hashtable_pt, void *)
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
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;.
int search_higher_rank(Pvecteur, Pbase)
int search_higher_rank(): this fonction returns the rank of the variable of higher rank in the vecteu...
Pvecteur vect_dup(Pvecteur)
end of vecteur-local.h
Variable vect_first_var(Pvecteur)
PRIVATE: marquage du couple var_val comme visite par remplacement de var par -var dans le couple (OBS...
bool vect_colin_base(Pvecteur, Variable)
bool vect_colin_base(Pvecteur vec, Variable var): renvoie true si --> --> vec = k var
void vect_normalize(Pvecteur)
unaires.c
Value vect_coeff_sum(Pvecteur)
Value vect_coeff_sum(Pvecteur vect): coefficient sum de tout les val de ce vecteur (devrait etre dans...
void linear_hashtable_free(linear_hashtable_pt)
destructor
int vect_dimension(Pvecteur)
int vect_dimension(Pvecteur v): calcul du nombre de composantes non nulles et non constantes d'un vec...
void vect_fprint_as_dense(FILE *, Pvecteur, Pbase)
void vect_fprint_as_dense(FILE * f, Pvecteur v, Pbase b):
bool vect_larger_coef_p(Pvecteur, Value)
bool linear_hashtable_coherent_p(linear_hashtable_pt)
check hashtable coherency
Pbase make_base_from_vect(Pvecteur)
Variable variable_make(char *)
Variable variable_make(char * name): defines a new variable of a given name.
Pvecteur vect_add(Pvecteur, Pvecteur)
binaires.c
int vect_lexicographic_compare2(Pvecteur, Pvecteur, int(*)(Pvecteur *, Pvecteur *))
Version for inequalities.
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.
Pvecteur vect_cl2_ofl(Value, Pvecteur, Value, Pvecteur)
Pvecteur vect_substract(Pvecteur, Pvecteur)
Pvecteur vect_substract(Pvecteur v1, Pvecteur v2): allocation d'un vecteur v dont la valeur est la di...
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.
int vect_compare(Pvecteur *, Pvecteur *)
for qsort, returns:
void linear_hashtable_put_once(linear_hashtable_pt, void *, void *)
Pbase base_normalize(Pbase)
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...
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,...
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...
Pvecteur vect_read(Pbase *)
io.c
Pvecteur vect_div(Pvecteur, Value)
scalaires.c
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)
int vect_lexicographic_unsafe_compare2(Pvecteur, Pvecteur, int(*)(Pvecteur *, Pvecteur *))
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
Pvecteur vect_multiply(Pvecteur, Value)
Pvecteur vect_multiply(Pvecteur v, Value x): multiplication du vecteur v par le scalaire x,...
Pvecteur vect_subst(Variable, Pvecteur, Pvecteur)
Pvecteur vect_subst(Variable v, Pvecteur v1, Pvecteur v2): calcul d'un vecteur v3 tel que l'intersect...
Pvecteur vect_rename(Pvecteur, Pbase, char *(*)(Variable))
Variable vect_one_coeff_if_any(Pvecteur)
struct Svecteur Svecteur
le type des coefficients dans les vecteurs: Value est defini dans le package arithmetique
Pvecteur vect_cl2(Value, Pvecteur, Value, Pvecteur)
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...
Pbase base_difference(Pbase, Pbase)
Pbase base_difference(Pbase b1, Pbase b2): allocate b; b = b1 - b2 – with the set meaning return b;.
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...
void * linear_hashtable_get(linear_hashtable_pt, void *)
void linear_hashtable_dump(linear_hashtable_pt)
hashpointer.c
Pvecteur vect_new(Variable, Value)
Pvecteur vect_new(Variable var,Value coeff): allocation d'un vecteur colineaire au vecteur de base va...
Pvecteur vect_variable_rename(Pvecteur, Variable, Variable)
Pvecteur vect_variable_rename(Pvecteur v, Variable v_old, Variable v_new): rename the potential coord...
bool base_normalized_p(Pbase)