PIPS
private.c File Reference
#include <stdio.h>
#include "linear_assert.h"
#include "boolean.h"
#include "arithmetique.h"
#include "vecteur.h"
+ Include dependency graph for private.c:

Go to the source code of this file.

Functions

Pvecteur vect_chain (Pvecteur v_in, Variable var, Value coeff)
 package vecteur routines internes au package More...
 
Pvecteur vect_elem (Pvecteur vect, Variable var)
 PRIVATE: introduit du sharing; never used... More...
 
Pvecteur vect_extract (Pvecteur pvec, Variable var)
 UNUSED - NOT TESTED. More...
 
Variable vect_first_var (Pvecteur pvec)
 PRIVATE: marquage du couple var_val comme visite par remplacement de var par -var dans le couple (OBSOLETE) More...
 
Pvecteur vect_reversal (Pvecteur vect_in)
 Pvecteur vect_reversal(Pvecteur vect_in); produces the reversal vector of the vect_in. More...
 

Function Documentation

◆ vect_chain()

Pvecteur vect_chain ( Pvecteur  v_in,
Variable  var,
Value  coeff 
)

package vecteur routines internes au package

private.c

INTLIBRARY PRIVATE: introduit du sharing, ne garantit pas l'unicite de chaque composante

Pvecteur vect_chain(Pvecteur v_in, Variable var, Value coeff): ajout d'un vecteur colineaire au vecteur de base var et de coefficient coeff au vecteur v_in; si la composante var de v_in etait nulle:

si <v_in . evar> == 0 alors -—> allocate v_out; -—> —> --> v_out = v_in + coeff var; —> destroy v_in; sinon chaos!

v_in ne doit plus etre utilise ulterieurement; l'utilisation standard est donc: v = vect_chain(v,var,coeff);

Pour preserver la coherence des vecteurs, l'utilisateur doit appeler vect_add_elem(v,var,coeff) qui teste l'existence d'un coefficient var nul dans v avant de creer un nouveau couple (var,coeff)

On pourrait preferer le passage d'un Pvecteur * comme premier argument et un return void.

very expensive for EDF... FC/CA 06/07/2000. useless?

assert(vect_coeff(var, v_in)==0);

Parameters
v_in_in
varar
coeffoeff

Definition at line 69 of file private.c.

73 {
74  Pvecteur v_out;
75 
76  /* very expensive for EDF... FC/CA 06/07/2000. useless? */
77  /* assert(vect_coeff(var, v_in)==0); */
78 
79  v_out = vect_new(var, coeff);
80  v_out->succ = v_in;
81 
82  return (v_out);
83 }
le type des coefficients dans les vecteurs: Value est defini dans le package arithmetique
Definition: vecteur-local.h:89
struct Svecteur * succ
Definition: vecteur-local.h:92
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 Svecteur::succ, and vect_new().

Referenced by base_append(), base_union(), sc_to_minimal_basis(), vect_add_elem(), vect_chg_coeff(), and vect_dup().

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

◆ vect_elem()

Pvecteur vect_elem ( Pvecteur  vect,
Variable  var 
)

PRIVATE: introduit du sharing; never used...

Pvecteur vect_elem(Pvecteur vect, Variable var): retourne la valeur du pointeur vers le couple correspondant a la variable var dans le vecteur vect, s'il existe ou NULL sinon.

Parameters
vectect
varar

Definition at line 91 of file private.c.

94 {
95  for( ;vect!=NULL;vect=vect->succ) {
96  if (var_of(vect)==var) {
97  return(vect);
98  }
99  }
100  return (NULL);
101 }
#define var_of(varval)

References var_of.

◆ vect_extract()

Pvecteur vect_extract ( Pvecteur  pvec,
Variable  var 
)

UNUSED - NOT TESTED.

Pvecteur vect_extract(Pvecteur pvec, Variable var): fonction qui extrait le couple (variable,coefficient) du vecteur et renvoie l'adresse d'un nouveau vecteur vers ce couple. On a donc un effet de bord sur pvec (qui est impossible a assurer dans tous les cas) et un retour de valeur

—> —> —> --> --> pvec := pvec - <pvec . var> var; -—> allocate pvec1; -—> —> --> --> return(pvec1 := <pvec . var> var);

Notes:

  • ca ne peut pas marcher si var apparait dans le premier couple du vecteur car on n'a pas moyen de changer pvec, vu la passage par valeur; il faudrait donc soit changer le type de la procedure et passer un Pvecteur *, soit autoriser les couples de valeur 0;
  • cette fonction n'est utile que si elle diminue le nombre d'allocations; elle commence malencontreusement par un vect_dup inconditionnel.

le couple interessant se trouve en tete

Sinon, c'est le vecteur 0

Parameters
pvecvec
varar

Definition at line 126 of file private.c.

129 {
130  Pvecteur pvec1 = vect_dup(pvec);
131  Pvecteur var_val = pvec1;
132  Pvecteur var_pred = pvec1;
133 
134  if (var_val != NULL) {
135  if ( var_of(var_pred)== var) {
136  /* le couple interessant se trouve en tete */
137  pvec1 = var_pred->succ;
138  var_pred->succ = NULL;
139  return (var_pred);
140  }
141  else {
142  for(var_val=(var_val->succ);var_val!=NULL;var_pred = var_val,
143  var_val=var_val->succ) {
144  if (var_of(var_val)==var) {
145  var_pred->succ = var_val->succ;
146  var_val->succ = NULL;
147  return(var_val);
148  }
149  }
150 
151  }
152  }
153 
154  /* Sinon, c'est le vecteur 0 */
155  return (NULL);
156 }
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 Svecteur::succ, var_of, and vect_dup().

+ Here is the call graph for this function:

◆ vect_first_var()

Variable vect_first_var ( Pvecteur  pvec)

PRIVATE: marquage du couple var_val comme visite par remplacement de var par -var dans le couple (OBSOLETE)

Value vect_coeff_m(Variable var, Pvecteur vect)

static Value vect_coeff_m(var,vect) Variable var; Pvecteur vect; { for (; vect != NULL ; vect = vect->succ) if (var_of(vect) == var) { marquer(vect); return(val_of(vect)); } return(0); } PRIVATE Pvecteur vect_tri_old(Pvecteur pvec): allocation d'un vecteur prenant une valeur egale a celle de pvec mais dont les couples (variable,valeur) sont tries dans "l'ordre croissant" des vecteurs de base (i.e. des variables) Variable vect_first_var(Pvecteur pvec) retourne la premiere variable (au sens CAR) du vecteur pvec routine sale mais qui permet d'iterer sur les variables formant un vecteur ou une base. 20/06/90 PB

Parameters
pvecvec

Definition at line 227 of file private.c.

229 {
230  return(pvec->var);
231 }
Variable var
Definition: vecteur-local.h:90

Referenced by is_inferior_monome(), and pvecteur_to_polynome().

+ Here is the caller graph for this function:

◆ vect_reversal()

Pvecteur vect_reversal ( Pvecteur  vect_in)

Pvecteur vect_reversal(Pvecteur vect_in); produces the reversal vector of the vect_in.

vect_in is not killed.
12/09/91, YY

Parameters
vect_inect_in

Definition at line 237 of file private.c.

239 {
240  Pvecteur pv;
241  Pvecteur vect_out = VECTEUR_NUL;
242 
243  for(pv=vect_in; !VECTEUR_NUL_P(pv); pv=pv->succ)
244  vect_add_elem(&vect_out, vecteur_var(pv), vecteur_val(pv));
245  return (vect_out);
246 }
#define vecteur_val(v)
#define vecteur_var(v)
#define VECTEUR_NUL
DEFINITION DU VECTEUR NUL.
#define VECTEUR_NUL_P(v)
void vect_add_elem(Pvecteur *pvect, Variable var, Value val)
void vect_add_elem(Pvecteur * pvect, Variable var, Value val): addition d'un vecteur colineaire au ve...
Definition: unaires.c:72

References Svecteur::succ, vect_add_elem(), VECTEUR_NUL, VECTEUR_NUL_P, vecteur_val, and vecteur_var.

Referenced by adg_list_to_vect(), contrainte_reversal(), vect_add_first(), vect_gen_read(), and xml_LoopOffset().

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