PIPS
solpip.c File Reference
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "genC.h"
#include "misc.h"
#include "text.h"
#include "text-util.h"
#include "ri.h"
#include "ri-util.h"
#include "paf_ri.h"
#include "pip.h"
+ Include dependency graph for solpip.c:

Go to the source code of this file.

Data Structures

struct  baseaux
 
struct  pileaux
 
struct  pilepredicat
 
struct  pilequast
 

Macros

#define PREMIERE_VAR1_BASE   premiere_var1 == 0
 Name : solpip.c Package : pip Author : F. More...
 
#define RESET_PREMIERE_VAR1   premiere_var1 = 0;
 
#define SET_PREMIERE_VAR1   premiere_var1 = 1;
 
#define PREMIERE_VAR_BASE   premiere_var == 0
 
#define RESET_PREMIERE_VAR   premiere_var = 0;
 
#define SET_PREMIERE_VAR   premiere_var = 1;
 
#define OLD_VAR(x)   x->var==NULL
 
#define MY_MIN   0
 
#define MY_MAX   1
 
#define VARSUPP   "Variable_pour_max_en_min_q"
 

Typedefs

typedef struct baseaux baseaux
 
typedef struct baseauxPbaseaux
 
typedef struct pileaux pileaux
 
typedef struct pileauxPpileaux
 
typedef struct pilepredicat pilepredicat
 
typedef struct pilepredicatPpilepredicat
 
typedef struct pilequast pilequast
 
typedef struct pilequastPpilequast
 

Functions

void ajoute_constante (int ent)
 Name: ajoute_constante
More...
 
void retire_par_de_pile ()
 Name: retire_par_de_pile. More...
 
void init_quast ()
 Name: init_quast. More...
 
void creer_quast_value ()
 Name: creer_quast_value
More...
 
void creer_true_quast ()
 Name: creer_true_quast. More...
 
void creer_predicat ()
 Name: creer_predicat. More...
 
void fait_quast ()
 Name: fait_quast. More...
 
void fait_quast_value ()
 Name: fait_quast_value. More...
 
void init_liste_vecteur ()
 Name: init_liste_vecteur. More...
 
void init_vecteur ()
 Name: init_vecteur. More...
 
void ecrit_coeff1 (int ent)
 Name: ecrit_coeff1. More...
 
void ecrit_resultat ()
 TEMPORAIRE
More...
 
void creer_Psysteme ()
 Name: creer_Psysteme. More...
 
void init_new_base ()
 Name: init_new_base. More...
 
entity creer_nom_entite (char *module_name)
 Name: creer_nom_entite. More...
 
void ajoute_new_var (int ent, int rang)
 Name: ajoute_new_var. More...
 
void ecrit_liste_vecteur ()
 Name: ecrit_liste_vecteur. More...
 
void ecrit_une_var_neg (int ent)
 Name: ecrit_une_var_neg. More...
 
void ecrit_une_var (int ent)
 Name: ecrire_une_var. More...
 
void ecrit_coeff_neg2 (int ent)
 Name: ecrit_coeff_neg2. More...
 
void ecrit_coeff2 (int ent)
 Name: ecrire_coeff2 . More...
 

Variables

list newparms_act
 
list solution_act
 
static Ppilepredicat predicate_act
 
expression expression_act
 
quast quast_false
 
quast_value quast_value_act
 
conditional conditional_act
 
static Ppilequast quast_true
 
static Ppileaux pile
 
static Pbaseaux new_base_ref
 
static Pbaseaux new_base_aux
 
Pvecteur vect_act
 
Pvecteur vect_aux
 
Pvecteur vect_var_aux
 
Psysteme psyst_act
 
int aux
 
int premiere_var
 
int premiere_var1
 
int compteur_de_var
 

Macro Definition Documentation

◆ MY_MAX

#define MY_MAX   1

Definition at line 61 of file solpip.c.

◆ MY_MIN

#define MY_MIN   0

Definition at line 60 of file solpip.c.

◆ OLD_VAR

#define OLD_VAR (   x)    x->var==NULL

Definition at line 59 of file solpip.c.

◆ PREMIERE_VAR1_BASE

#define PREMIERE_VAR1_BASE   premiere_var1 == 0

Name : solpip.c Package : pip Author : F.

Dumontet Date : july 93 Historic :

Documents:

Comments :

Definition at line 53 of file solpip.c.

◆ PREMIERE_VAR_BASE

#define PREMIERE_VAR_BASE   premiere_var == 0

Definition at line 56 of file solpip.c.

◆ RESET_PREMIERE_VAR

#define RESET_PREMIERE_VAR   premiere_var = 0;

Definition at line 57 of file solpip.c.

◆ RESET_PREMIERE_VAR1

#define RESET_PREMIERE_VAR1   premiere_var1 = 0;

Definition at line 54 of file solpip.c.

◆ SET_PREMIERE_VAR

#define SET_PREMIERE_VAR   premiere_var = 1;

Definition at line 58 of file solpip.c.

◆ SET_PREMIERE_VAR1

#define SET_PREMIERE_VAR1   premiere_var1 = 1;

Definition at line 55 of file solpip.c.

◆ VARSUPP

#define VARSUPP   "Variable_pour_max_en_min_q"

Definition at line 62 of file solpip.c.

Typedef Documentation

◆ baseaux

typedef struct baseaux baseaux

◆ Pbaseaux

typedef struct baseaux* Pbaseaux

◆ pileaux

typedef struct pileaux pileaux

◆ pilepredicat

typedef struct pilepredicat pilepredicat

◆ pilequast

typedef struct pilequast pilequast

◆ Ppileaux

typedef struct pileaux* Ppileaux

◆ Ppilepredicat

typedef struct pilepredicat * Ppilepredicat

◆ Ppilequast

typedef struct pilequast * Ppilequast

Function Documentation

◆ ajoute_constante()

void ajoute_constante ( int  ent)

Name: ajoute_constante


Parameters: ent : entier, valeur de la constante cree.
Side effect : expression_act: est modifie, il lui est ajoute une
constante.
Result: void.
Aims: ajouter une constante a expression_act:
expression_act= expression_act+ent.
Author: F Dumontet.
Date of last change:


Definition at line 127 of file solpip.c.

131 {
132  if (expression_act == NULL)
133  {
135  return;
136  }
137 
138  if (ent>=0)
140  int_to_expression( ent ));
141  else
143  int_to_expression( -ent ));
144 
145  return;
146 }
#define MINUS_OPERATOR_NAME
#define PLUS_OPERATOR_NAME
expression int_to_expression(_int i)
transform an int into an expression and generate the corresponding entity if necessary; it is not cle...
Definition: expression.c:1188
expression make_op_exp(char *op_name, expression exp1, expression exp2)
================================================================
Definition: expression.c:2012
expression expression_act
Definition: solpip.c:94

References expression_act, int_to_expression(), make_op_exp(), MINUS_OPERATOR_NAME, and PLUS_OPERATOR_NAME.

Referenced by ecrit_coeff2(), ecrit_coeff_neg2(), ecrit_une_var(), and ecrit_une_var_neg().

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

◆ ajoute_new_var()

void ajoute_new_var ( int  ent,
int  rang 
)

Name: ajoute_new_var.



Parameters: ent: valeur du diviseur.
rang: position de la nouvelle variable dans le vecteur.
Side effect: new_base_ref: lorsque la nouvelle variable est ajoutee en tete de la base, recoit la nouvelle base modifiee.
pile: ajout du nouveau parametre sur la pile pour la gestion
de la localite de ces variables.
newparms_act: ajout du nouveau parametre a la liste.
Result: void.
Aims: ajouter un nouveau parametre dans la nouvelle base. Les piles de
gestion de la localite et de reference entre "entite" et "expression" sont mises a jour.
Author: F Dumontet.
Date of last change:


Definition at line 715 of file solpip.c.

719 {
720 
721 
722  Pbaseaux new_var, new_base_aux1 = new_base_ref ;
723  expression expr;
724  Ppileaux new_pile;
725  entity enti_act;
726  var_val var_val_act;
727  int aux;
728 
730  int_to_expression( ent ));
731  for (aux=0; aux<(rang-1) ; aux++)
732  { new_base_aux1 = new_base_aux1->succ;}
733 
734  new_var=(Pbaseaux) malloc(sizeof(baseaux));
735  new_var->var = expr;
736 
738  new_var->ent = enti_act;
739 
740  var_val_act = make_var_val(enti_act, expr);
741  newparms_act = CONS(VAR_VAL,var_val_act,newparms_act);
742  new_pile = (Ppileaux) malloc(sizeof(pileaux));
743  new_pile->act = new_var;
744  new_pile->succ = pile;
745 
746  if ( rang > 0)
747  {
748  new_var->succ = new_base_aux1->succ;
749  new_base_aux1->succ = new_var;
750  new_pile->pred = new_base_aux1;
751  }
752  else
753  {
754  new_var->succ = new_base_ref;
755  new_base_ref = new_var;
756  new_pile->pred = NULL;
757  }
758  pile = new_pile;
759  return ;
760 }
var_val make_var_val(entity a1, expression a2)
Definition: paf_ri.c:697
void * malloc(YYSIZE_T)
#define CONS(_t_, _i_, _l_)
List element cell constructor (insert an element at the beginning of a list)
Definition: newgen_list.h:150
#define TOP_LEVEL_MODULE_NAME
Module containing the global variables in Fortran and C.
Definition: naming-local.h:101
#define VAR_VAL(x)
VAR_VAL.
Definition: paf_ri.h:763
#define DIVIDE_OPERATOR_NAME
return(s1)
struct baseaux * Pbaseaux
int aux
Definition: solpip.c:104
static Pbaseaux new_base_ref
Definition: solpip.c:100
list newparms_act
Definition: solpip.c:91
entity creer_nom_entite(char *module_name)
Name: creer_nom_entite.
Definition: solpip.c:657
static Ppileaux pile
Definition: solpip.c:99
struct pileaux * Ppileaux
Definition: solpip.c:66
expression var
Definition: solpip.c:67
entity ent
Definition: solpip.c:68
struct baseaux * succ
Definition: solpip.c:69
Definition: solpip.c:73
struct pileaux * succ
Definition: solpip.c:76
Pbaseaux act
Definition: solpip.c:75
Pbaseaux pred
Definition: solpip.c:74

References pileaux::act, aux, CONS, creer_nom_entite(), DIVIDE_OPERATOR_NAME, baseaux::ent, expression_act, int_to_expression(), make_op_exp(), make_var_val(), malloc(), new_base_ref, newparms_act, pile, pileaux::pred, return(), baseaux::succ, pileaux::succ, TOP_LEVEL_MODULE_NAME, baseaux::var, and VAR_VAL.

Referenced by integer_sol_edit(), and new_sol_edit().

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

◆ creer_nom_entite()

entity creer_nom_entite ( char *  module_name)

Name: creer_nom_entite.



Parameters: module_name: le nom du module?? TOP_LEVEL_MODULE_NAME.
Side effect: compteur_de_var: incrementation de 1.
Result: une "entite" dont le nom est cree automatiquement.
Aims: creer automatiquement des "entites" ayant pour nom nvarxxx.
Author: F Dumontet.
Date of last change:


Definition at line 657 of file solpip.c.

661 {
662 extern int compteur_de_var;
663  string full_name;
664  char *name;
665  char *num;
666  entity e ;
667  basic b ;
668 
669  compteur_de_var++;
670  num = (char*) malloc(64);
671  name= (char*) malloc(70);
672  (void) sprintf( name, "nvar%d" , compteur_de_var);
673  (void) sprintf((char *) (num), "%d", compteur_de_var);
674 
675  debug(8,"make_scalar_integer_entity", "begin name=%s, module_name=%s\n",
676  name, module_name);
677 
679  e = make_entity((char *) strdup(full_name),
683 
684  b = make_basic(is_basic_int, 4);
685 
687 
688  return (e);
689 }
basic make_basic(enum basic_utype tag, void *val)
Definition: ri.c:155
static int num
Definition: bourdoncle.c:137
struct _newgen_struct_type_ * type
const char * module_name(const char *s)
Return the module part of an entity name.
Definition: entity_names.c:296
#define NIL
The empty list (nil in Lisp)
Definition: newgen_list.h:47
#define full_name(dir, name)
Definition: compile.c:414
void debug(const int the_expected_debug_level, const char *calling_function_name, const char *a_message_format,...)
ARARGS0.
Definition: debug.c:189
#define MODULE_SEP_STRING
Definition: naming-local.h:30
string concatenate(const char *,...)
Return the concatenation of the given strings.
Definition: string.c:183
#define make_entity(n, t, s, i)
type MakeTypeVariable(basic, cons *)
BEGIN_EOLE.
Definition: type.c:116
#define value_undefined
Definition: ri.h:3016
@ is_basic_int
Definition: ri.h:571
#define type_undefined
Definition: ri.h:2883
#define entity_type(x)
Definition: ri.h:2792
#define storage_undefined
Definition: ri.h:2476
char * strdup()
int compteur_de_var
Definition: solpip.c:104

References compteur_de_var, concatenate(), debug(), entity_type, full_name, is_basic_int, make_basic(), make_entity, MakeTypeVariable(), malloc(), module_name(), MODULE_SEP_STRING, NIL, num, storage_undefined, strdup(), type_undefined, and value_undefined.

Referenced by ajoute_new_var().

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

◆ creer_predicat()

void creer_predicat ( )

Name: creer_predicat.



Parameters:
Side effect: predicat_act: recoit le "predicat" cree sur le haut de la
pile.
Result: void.
Aims: creer un "predicat" a partir d'un "Psysteme", ce "predicat" est mis
sur le haut de la pile des "predicats".
Author: F Dumontet.
Date of last change:


Definition at line 296 of file solpip.c.

298 {
299 
300 
301  Ppilepredicat new_predicate;
302 
303  new_predicate = (Ppilepredicat)malloc(sizeof(pilepredicat));
304  if (psyst_act != NULL) {
305  psyst_act->base = NULL;
307  }
308  new_predicate->x = make_predicate ( (char *) psyst_act);
309  new_predicate->succ = predicate_act;
310  predicate_act = new_predicate;
311 }
predicate make_predicate(Psysteme a1)
Definition: ri.c:1820
void sc_creer_base(Psysteme ps)
void sc_creer_base(Psysteme ps): initialisation des parametres dimension et base d'un systeme lineair...
Definition: sc_alloc.c:129
Psysteme psyst_act
Definition: solpip.c:103
static Ppilepredicat predicate_act
Definition: solpip.c:93
struct pilepredicat * Ppilepredicat
Pbase base
Definition: sc-local.h:75
predicate x
Definition: solpip.c:81
struct pilepredicat * succ
Definition: solpip.c:82

References Ssysteme::base, make_predicate(), malloc(), predicate_act, psyst_act, sc_creer_base(), pilepredicat::succ, and pilepredicat::x.

Referenced by integer_sol_edit(), new_sol_edit(), and rational_sol_edit().

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

◆ creer_Psysteme()

void creer_Psysteme ( )

Name: creer_Psysteme.



Parameters:
Side effect: psyst_act: recoit le "Psysteme" cree.
vect_aux: pointe sur le premier parametre de la base initiale.
new_base_aux: pointe sur le premier parametre de la base
contenant des les newparms.
Result: void.
Aims: initialiser le psysteme et les variables permettant de le construire. Author: F Dumontet.
Date of last change:


a changer par base_ref

Definition at line 558 of file solpip.c.

560 {
561 
562 extern Psysteme psyst_act;
563 extern Pvecteur vect_aux;
564  Psysteme p_syst;
565 
566  p_syst = sc_new();
567  p_syst->dimension = 0;
568  p_syst->nb_ineq = 1;
569  p_syst->inegalites = contrainte_new();
570  psyst_act = p_syst;
571  vect_aux = (Pvecteur) old_base;/* a changer par base_ref*/
573 
574 }
Pcontrainte contrainte_new(void)
package contrainte - allocations et desallocations
Definition: alloc.c:47
Pbase old_base
Base of the parameters.
Definition: pip.c:102
Psysteme sc_new(void)
Psysteme sc_new(): alloue un systeme vide, initialise tous les champs avec des valeurs nulles,...
Definition: sc_alloc.c:55
static Pbaseaux new_base_aux
Definition: solpip.c:101
Pvecteur vect_aux
Definition: solpip.c:102
Pcontrainte inegalites
Definition: sc-local.h:71
int dimension
Definition: sc-local.h:74
int nb_ineq
Definition: sc-local.h:73
le type des coefficients dans les vecteurs: Value est defini dans le package arithmetique
Definition: vecteur-local.h:89
struct Svecteur * Pvecteur

References contrainte_new(), Ssysteme::dimension, Ssysteme::inegalites, Ssysteme::nb_ineq, new_base_aux, new_base_ref, old_base, psyst_act, sc_new(), and vect_aux.

Referenced by integer_sol_edit(), new_sol_edit(), and rational_sol_edit().

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

◆ creer_quast_value()

void creer_quast_value ( )

Name: creer_quast_value


Parameters:
Side effect: quast_value_act: recoit le "quast_value" cree.
Result: void.
Aims: creer un "quast_value" a partir d'une "solution".
Author: F. Dumontet
Date of last change:


Definition at line 232 of file solpip.c.

234 {
236 
237  if ( solution_act != NIL)
239  make_quast_leaf((char *) solution_act,
241  else
243 }
quast_value make_quast_value(enum quast_value_utype tag, void *val)
Definition: paf_ri.c:565
quast_leaf make_quast_leaf(list a1, leaf_label a2)
Definition: paf_ri.c:474
#define quast_value_undefined
Definition: paf_ri.h:639
@ is_quast_value_quast_leaf
Definition: paf_ri.h:654
#define leaf_label_undefined
Definition: paf_ri.h:427
quast_value quast_value_act
Definition: solpip.c:96
list solution_act
Definition: solpip.c:92

References is_quast_value_quast_leaf, leaf_label_undefined, make_quast_leaf(), make_quast_value(), NIL, quast_value_act, quast_value_undefined, and solution_act.

Referenced by integer_sol_edit(), new_sol_edit(), and rational_sol_edit().

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

◆ creer_true_quast()

void creer_true_quast ( )

Name: creer_true_quast.



Parameters:
Side effect: quast_true: recoit le true "quast_cree" sur le haut de la
pile.
Result: void.
Aims: conserver le "true_quast" d'un IF dans la pile des "true_quast".
Author: F Dumontet.
Date of last change:


Definition at line 264 of file solpip.c.

266 {
267 
268  Ppilequast new_quast;
269 
270  new_quast = (Ppilequast)malloc(sizeof(pilequast));
271  new_quast->succ = quast_true;
272  new_quast->q = quast_act;
273  quast_true = new_quast;
274 }
quast quast_act
Global variables
Definition: pip.c:101
static Ppilequast quast_true
Definition: solpip.c:98
struct pilequast * Ppilequast
struct pilequast * succ
Definition: solpip.c:88
quast q
Definition: solpip.c:87

References malloc(), pilequast::q, quast_act, quast_true, and pilequast::succ.

Referenced by integer_sol_edit(), new_sol_edit(), and rational_sol_edit().

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

◆ ecrit_coeff1()

void ecrit_coeff1 ( int  ent)

Name: ecrit_coeff1.



Parameters: ent: entier, coefficient de la variable pointee par
"new_base_aux", a entrer dans le "Psysteme".
Side effect: psyst_act: le "Psysteme" resultat avec une variable en plus
(dans la "base" et dans le "vecteur"). NON !!
vect_aux: pointe sur la variable suivante a traiter.
new_base_aux: pointe sur la variable suivante a traiter.
Result: void.
Aims: ajouter le coefficient et sa variable correspondante dans le
Psysteme a produire.
Author: F Dumontet.
Date of last change:


ect_add_elem(&psyst_act->base, TCST, (value) 1);

Definition at line 474 of file solpip.c.

476 {
477  extern Psysteme psyst_act;
478  extern Pvecteur vect_aux;
479 
480  if ((ind_min_max == MY_MAX) && (vect_aux != NULL) &&
481  (vect_aux->var != NULL) &&
482  (strcmp(entity_local_name((entity) vect_aux->var), VARSUPP) == 0)) {
485  return;
486  }
487  if (new_base_aux == NULL) {
488  /*vect_add_elem(&psyst_act->base, TCST, (value) 1);*/
490  (Value) -ent);
491  return;
492  }
493 
494  if (new_base_aux->var == NULL) {
497  (Value) -ent);
499  psyst_act->dimension++;
500  }
501  else {
503  (Variable) new_base_aux->ent, (Value) 1);
505  (Variable) new_base_aux->ent, (Value) -ent);
506  }
507 
509 }
int Value
int ind_min_max
Definition: pip.c:103
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
#define MY_MAX
Definition: solpip.c:61
#define VARSUPP
Definition: solpip.c:62
Pvecteur vecteur
Variable var
Definition: vecteur-local.h:90
struct Svecteur * succ
Definition: vecteur-local.h:92
#define TCST
VARIABLE REPRESENTANT LE TERME CONSTANT.
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 *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 Ssysteme::base, Ssysteme::dimension, baseaux::ent, entity_local_name(), ind_min_max, Ssysteme::inegalites, MY_MAX, new_base_aux, psyst_act, Svecteur::succ, baseaux::succ, TCST, Svecteur::var, baseaux::var, VARSUPP, vect_add_elem(), vect_aux, and Scontrainte::vecteur.

Referenced by integer_sol_edit(), new_sol_edit(), and rational_sol_edit().

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

◆ ecrit_coeff2()

void ecrit_coeff2 ( int  ent)

Name: ecrire_coeff2 .



Parameters: ent: valeur du parametre.
Side effect: new_base_aux, vect_aux: pointent sur le prochain parametre
respectivement dans les bases initiale et actuelle.
expression_act: l'expression obtenue.
premiere_ver: mis a set.
Result: void.
Aims: ajouter un parametre et son coefficient a une "expression"
correspondant a un vecteur. Les pointeurs de base sont actualises .
Author: F Dumontet.
Date of last change:


Definition at line 1070 of file solpip.c.

1073 {
1074 extern int ind_min_max;
1075  int garde_min_max = MY_MIN;
1076 
1077  if (ind_min_max == MY_MAX)
1078  garde_min_max = MY_MAX;
1079  ind_min_max = MY_MIN;
1080  if (new_base_aux == NULL)
1081  ajoute_constante ( ent );
1082  else
1083  ecrit_une_var( ent );
1084  if (garde_min_max == MY_MAX)
1085  ind_min_max = MY_MAX;
1086 }
void ecrit_une_var(int ent)
Name: ecrire_une_var.
Definition: solpip.c:823
#define MY_MIN
Definition: solpip.c:60
void ajoute_constante(int ent)
Name: ajoute_constante
Definition: solpip.c:127

References ajoute_constante(), ecrit_une_var(), ind_min_max, MY_MAX, MY_MIN, and new_base_aux.

Referenced by integer_sol_edit(), and new_sol_edit().

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

◆ ecrit_coeff_neg2()

void ecrit_coeff_neg2 ( int  ent)

Name: ecrit_coeff_neg2.



Parameters: ent: valeur du parametre.
Side effect: new_base_aux, vect_aux: pointent sur le prochain parametre
respectivement dans les bases initiale et actuelle.
expression_act: l'expression obtenue.
premiere_ver: mis a set.
Result: void.
Aims: ajouter un parametre et son coefficient a une "expression"
correspondant a un vecteur. Les pointeurs de base sont actualises .
Author: F Dumontet.
Date of last change:


Definition at line 1028 of file solpip.c.

1031 {
1032 
1033 extern int ind_min_max;
1034  int garde_min_max = MY_MIN;
1035 
1036 
1037  if (ind_min_max == MY_MAX)
1038  garde_min_max = MY_MAX;
1039  ind_min_max = MY_MIN;
1040  if (new_base_aux == NULL)
1041  ajoute_constante ( -ent );
1042  else
1043  ecrit_une_var_neg( ent );
1044  if (garde_min_max == MY_MAX)
1045  ind_min_max = MY_MAX;
1046 }
void ecrit_une_var_neg(int ent)
Name: ecrit_une_var_neg.
Definition: solpip.c:935

References ajoute_constante(), ecrit_une_var_neg(), ind_min_max, MY_MAX, MY_MIN, and new_base_aux.

Referenced by integer_sol_edit(), and new_sol_edit().

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

◆ ecrit_liste_vecteur()

void ecrit_liste_vecteur ( )

Name: ecrit_liste_vecteur.



Parameters:
Side effect: solution_act: ajout d'un "vecteur" a la "liste de vecteurs".
vect_var_aux: passe a la variable suivante.
Result: void.
Aims: mettre dans la "liste de vecteur" "l'expression" correspondant a un
"vecteur".
Author: F Dumontet.
Date of last change:


Definition at line 783 of file solpip.c.

786 {
787 extern Pvecteur vect_var_aux;
788 
789  if ( vect_var_aux == NULL )
790  return;
791 
794  return;
795 }
list gen_nconc(list cp1, list cp2)
physically concatenates CP1 and CP2 but do not duplicates the elements
Definition: list.c:344
#define EXPRESSION(x)
EXPRESSION.
Definition: ri.h:1217
Pvecteur vect_var_aux
Definition: solpip.c:102

References CONS, EXPRESSION, expression_act, gen_nconc(), NIL, solution_act, Svecteur::succ, and vect_var_aux.

Referenced by integer_sol_edit(), new_sol_edit(), and rational_sol_edit().

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

◆ ecrit_resultat()

void ecrit_resultat ( )

TEMPORAIRE


Name:
Parameters:
Side effect:
Result:
Aims:
Author: F Dumontet.
Date of last change:


Definition at line 529 of file solpip.c.

531 {
532  write_quast(stdout,quast_act);
533 }
void write_quast(FILE *f, quast p)
Definition: paf_ri.c:510

References quast_act, and write_quast().

+ Here is the call graph for this function:

◆ ecrit_une_var()

void ecrit_une_var ( int  ent)

Name: ecrire_une_var.



Parameters: ent: valeur du parametre.
Side effect: new_base_aux, vect_aux: pointent sur le prochain parametre
respectivement dans les bases initiale et actuelle.
expression_act: l'expression obtenue.
premiere_ver: mis a set.
Result: void.
Aims: ajouter un parametre et son coefficient a une "expression"
correspondant a un vecteur. Les pointeurs de base sont actualises .
Author: F Dumontet.
Date of last change:


Definition at line 823 of file solpip.c.

827 {
828 
829 extern Pvecteur vect_aux;
831 extern int premiere_var;
832  expression e_act = expression_act;
833  Pbaseaux p_base1 = new_base_aux;
834 
835  if (ind_min_max == MY_MAX)
836  {
837  if ((vect_aux != NULL) && (vect_aux->var != NULL) &&\
838  (strcmp(entity_local_name((entity) vect_aux->var), VARSUPP) == 0))
839  {
840  ent = 0;
841  }
842  else
843  {
844  if ( (p_base1 == NULL) || (OLD_VAR(p_base1)) )
845  {
846  ent = -ent;
847  }
848  else
849  {
850  ecrit_une_var_neg (ent);
851  return;
852  }
853  }
854  }
855 
856  if ((p_base1 == NULL) || ((vect_aux != NULL)&&(vect_aux->var == TCST)))
857  {
858  ajoute_constante( ent );
859  return;
860  }
861 
862  if ( ent == 0 )
863  {
864  if (OLD_VAR(p_base1))
867  return;
868  }
869 
870 
871 
872  if ( PREMIERE_VAR_BASE )
873  {
874  if ( OLD_VAR(p_base1) )
875  {
877  (entity) vect_aux->var);
878 
880  }
881  else
882  {
884  int_to_expression( ent ),
885  (expression) p_base1->var);
886  }
888  }
889  else
890  {
891  if ( OLD_VAR(p_base1) )
892  {
895  (entity) vect_aux->var));
896 
898  }
899  else
900  {
903  int_to_expression( ent ),
904  (expression) p_base1->var));
905  }
906  }
908 
909  return ;
910 }
#define MULTIPLY_OPERATOR_NAME
expression make_factor_expression(int coeff, entity vari)
Some functions to generate expressions from vectors and constraint systems.
Definition: expression.c:1631
int premiere_var
Definition: solpip.c:104
#define PREMIERE_VAR_BASE
Definition: solpip.c:56
#define OLD_VAR(x)
Definition: solpip.c:59
#define SET_PREMIERE_VAR
Definition: solpip.c:58

References ajoute_constante(), ecrit_une_var_neg(), entity_local_name(), expression_act, ind_min_max, int_to_expression(), make_factor_expression(), make_op_exp(), MULTIPLY_OPERATOR_NAME, MY_MAX, new_base_aux, OLD_VAR, PLUS_OPERATOR_NAME, premiere_var, PREMIERE_VAR_BASE, return(), SET_PREMIERE_VAR, Svecteur::succ, baseaux::succ, TCST, Svecteur::var, baseaux::var, VARSUPP, and vect_aux.

Referenced by ecrit_coeff2(), ecrit_une_var_neg(), integer_sol_edit(), new_sol_edit(), and rational_sol_edit().

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

◆ ecrit_une_var_neg()

void ecrit_une_var_neg ( int  ent)

Name: ecrit_une_var_neg.



Parameters: ent: valeur du parametre negatif.
Side effect: new_base_aux, vect_aux: pointent sur le prochain parametre
respectivement dans les bases initiale et actuelle.
expression_act: l'expression obtenue.
premiere_ver: mis a set.
Result: void.
Aims: ajouter un parametre et son coefficient a une "expression"
correspondant a un vecteur. Les pointeurs de base sont actualises .
Author: F Dumontet.
Date of last change:


Definition at line 935 of file solpip.c.

939 {
940 
941 
943 extern int premiere_var;
944 extern int ind_min_max;
945  expression e_act = expression_act;
946  Pbaseaux p_base1 = new_base_aux;
947 
948 
949  if (ind_min_max == MY_MAX)
950  {
951  if ((vect_aux != NULL) && (vect_aux->var != NULL) &&\
952  (strcmp(entity_local_name((entity) vect_aux->var), VARSUPP) == 0))
953  {
954  ent = 0;
955  }
956  else
957  {
959  ecrit_une_var(ent);
961  return;
962  }
963  }
964 
965  if ((p_base1 == NULL) || ((vect_aux != NULL)&&(vect_aux->var == TCST)))
966  {
967  ajoute_constante( -ent );
968  return;
969  }
970 
971  if ( OLD_VAR(p_base1) )
972  {
973  ecrit_une_var(-ent);
974  return;
975  }
976  else
977  {
983  entity_domain),\
984  int_to_expression( ent ));
985 
986  if ( PREMIERE_VAR_BASE )
987  {
990  (expression) p_base1->var);
992  }
993  else
994  {
998  (expression) p_base1->var));
999  }
1000  }
1002  return;
1003 }
string make_entity_fullname(const char *module_name, const char *local_name)
END_EOLE.
Definition: entity_names.c:230
void * gen_find_tabulated(const char *, int)
Definition: tabulated.c:218
#define UNARY_MINUS_OPERATOR_NAME
expression MakeUnaryCall(entity f, expression a)
Creates a call expression to a function with one argument.
Definition: expression.c:342
#define entity_domain
newgen_syntax_domain_defined
Definition: ri.h:410

References ajoute_constante(), ecrit_une_var(), entity_domain, entity_local_name(), expression_act, gen_find_tabulated(), ind_min_max, int_to_expression(), make_entity_fullname(), make_op_exp(), MakeUnaryCall(), MULTIPLY_OPERATOR_NAME, MY_MAX, MY_MIN, new_base_aux, OLD_VAR, PLUS_OPERATOR_NAME, premiere_var, PREMIERE_VAR_BASE, SET_PREMIERE_VAR, baseaux::succ, TCST, TOP_LEVEL_MODULE_NAME, UNARY_MINUS_OPERATOR_NAME, Svecteur::var, baseaux::var, VARSUPP, and vect_aux.

Referenced by ecrit_coeff_neg2(), ecrit_une_var(), integer_sol_edit(), new_sol_edit(), and rational_sol_edit().

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

◆ fait_quast()

void fait_quast ( )

Name: fait_quast.



Parameters:
Side effect: quast_false: recoit le second "quast" d'un IF.
quast_act: idem.
Result: void.
Aims: creer un "quast" a partir d'un "quast_value" et d'un "newparms".
Author: F Dumontet.
Date of last change:


Definition at line 331 of file solpip.c.

332 {
333 extern quast quast_false, quast_act;
334  list newparms_aux;
335 
336  newparms_aux = gen_append(newparms_act,NIL);
337  quast_act = make_quast ((char *) quast_value_act,\
338  (char *) newparms_aux);
340 }
quast make_quast(quast_value a1, list a2)
Definition: paf_ri.c:516
list gen_append(list l1, const list l2)
Definition: list.c:471
quast quast_false
Definition: solpip.c:95
The structure used to build lists in NewGen.
Definition: newgen_list.h:41

References gen_append(), make_quast(), newparms_act, NIL, quast_act, quast_false, and quast_value_act.

Referenced by integer_sol_edit(), new_sol_edit(), and rational_sol_edit().

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

◆ fait_quast_value()

void fait_quast_value ( )

Name: fait_quast_value.



Parameters:
Side effect: quast_value_act: recoit le "quast_value" cree.
quast_true: on depile un element.
predicate_act: on depile un element.
conditional_act: recoit le "conditional" cree.
Result: void.
Aims: creer un "quast_value" a partir d'un "predicat", d'un "true_quast",
d'un "false_quast". le" true_quast" et le" predicat" sont consommes
et donc retires de leur pile respective.
Author: F Dumontet.
Date of last change:


Definition at line 365 of file solpip.c.

366 {
367 
370  Ppilepredicat old_predicate = predicate_act;
371  Ppilequast old_quast = quast_true;
372 
376  (char *) conditional_act);
378  free(old_predicate);
380  free(old_quast);
381 }
conditional make_conditional(predicate a1, quast a2, quast a3)
Definition: paf_ri.c:138
void free(void *)
@ is_quast_value_conditional
Definition: paf_ri.h:655
conditional conditional_act
Definition: solpip.c:97

References conditional_act, free(), is_quast_value_conditional, make_conditional(), make_quast_value(), predicate_act, pilequast::q, quast_false, quast_true, quast_value_act, pilepredicat::succ, pilequast::succ, and pilepredicat::x.

Referenced by integer_sol_edit(), new_sol_edit(), and rational_sol_edit().

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

◆ init_liste_vecteur()

void init_liste_vecteur ( )

Name: init_liste_vecteur.



Parameters:
Side effect: vect_var_aux: initialisation, pointe sur le debut de la base
des variables (au sens Psysteme) initiales du probleme.
solution_act: mise a vide de la file.
Result: void.
Aims: initialiser les variables necessaires a la construction d'une
"liste de vecteurs".
Author: F Dumontet.
Date of last change:


Definition at line 405 of file solpip.c.

406 {
407 
408 extern Pvecteur vect_var_aux;
409 
411  solution_act = NIL;
412 
413 }
Pbase base_var_ref
Tag for MIN or MAX resolution.
Definition: pip.c:102

References base_var_ref, NIL, solution_act, and vect_var_aux.

Referenced by integer_sol_edit(), new_sol_edit(), and rational_sol_edit().

+ Here is the caller graph for this function:

◆ init_new_base()

void init_new_base ( )

Name: init_new_base.



Parameters:
Side effect: new_base_ref: recoit la nouvelle base initialisee.
compteur de var: initialisation a 0.
newparms: initialisation de la liste a vide.
Result: void.
Aims: creer a partir de la base initiale , la nouvelle base contenant aussi les "newparms". Comme il s'agit de l'initialisation, il n'y a pas de "newparms" donc tous les champs "var" sont a NULL. Les autres "var"
permettant la construction future de cette base sont initialisees.
Author: F Dumontet.
Date of last change:
_ jan 5th 94, AP, new_base_ref MUST be initialized to NULL (when base_ref is empty)


Definition at line 601 of file solpip.c.

603 {
604 
605 extern int compteur_de_var;
606  Pbaseaux new_base_aux1 = (Pbaseaux) NULL, bbase_aux;
607  Pvecteur vect_aux1 = (Pvecteur) base_ref;
608  int premiere_var;
609 
610  compteur_de_var=0;
612  newparms_act = NIL;
613  new_base_ref = NULL;
614 
615  for ( ;vect_aux1 != NULL ; vect_aux1 =vect_aux1->succ)
616  {
617  bbase_aux = (Pbaseaux) malloc(sizeof(baseaux));
618  bbase_aux->var = NULL;
619  bbase_aux->ent = NULL;
620  bbase_aux->succ = NULL;
621 
622  if ( PREMIERE_VAR_BASE )
623  {
624  new_base_ref = bbase_aux;
625  new_base_aux1 = bbase_aux;
627  }
628  else
629  {
630  new_base_aux1->succ = bbase_aux;
631  new_base_aux1 = new_base_aux1->succ;
632  }
633  }
634 
635  return;
636 
637 }
Pbase base_ref
Base of the unknowns.
Definition: pip.c:102
#define RESET_PREMIERE_VAR
Definition: solpip.c:57

References base_ref, compteur_de_var, malloc(), new_base_ref, newparms_act, NIL, premiere_var, PREMIERE_VAR_BASE, RESET_PREMIERE_VAR, SET_PREMIERE_VAR, Svecteur::succ, and baseaux::succ.

Referenced by pip_solve(), and pip_solve_min_with_big().

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

◆ init_quast()

void init_quast ( )

Name: init_quast.



Parameters:
Side effect: expression_act: remis a 0.
solution_act: remis a 0.
Result: void
Aims: initialiser les variables necessaires a la creation d'un "quast".
Author: F. Dumontet.
Date of last change:


Definition at line 205 of file solpip.c.

207 {
209 
210  expression_act = NULL;
211  solution_act = NIL;
212 }

References expression_act, NIL, and solution_act.

Referenced by integer_sol_edit(), new_sol_edit(), and rational_sol_edit().

+ Here is the caller graph for this function:

◆ init_vecteur()

void init_vecteur ( )

Name: init_vecteur.



Parameters:
Side effect: expression_act: mise a vide.
new_base_aux: pointe sur le premier element de la base locale c a d celle qui contient les "newparms".
vect_aux: pointe sur la base initiale des parametres du pb.
premiere_var: positionne a RESET.
Result: void.
Aims: initialiser les variables necessaires a l'ecriture d'un "vecteur"
sous forme d'une "expression".
Author: F Dumontet.
Date of last change:


Definition at line 438 of file solpip.c.

439 {
440 
442 extern Pvecteur vect_aux;
443 extern int premiere_var;
444 
445  expression_act = NULL;
449 }

References base_ref, expression_act, new_base_aux, new_base_ref, premiere_var, RESET_PREMIERE_VAR, and vect_aux.

Referenced by integer_sol_edit(), new_sol_edit(), and rational_sol_edit().

+ Here is the caller graph for this function:

◆ retire_par_de_pile()

void retire_par_de_pile ( )

Name: retire_par_de_pile.



Parameters:
Side effect: new_base_ref: on en retire le dernier "newparm" ajoute.
newparms_act: on retire le premier element de la liste.
pile: on retire l'element du haut de la pile de gestion de
localite des "newparms".
Result: void.
Aims: retirer les parametres crees par le newparm correspondant:gestion de la localite.
Author: F Dumontet.
Date of last change:


Definition at line 168 of file solpip.c.

170 {
171 
172  Ppileaux pile1 = pile;
173 
175  if (pile->pred != NULL)
176  pile->pred->succ = pile->act->succ;
177  else
179 
180 
181  pile = pile->succ;
182  free( pile1 );
183 }
#define CDR(pcons)
Get the list less its first element.
Definition: newgen_list.h:111

References pileaux::act, CDR, free(), new_base_ref, newparms_act, pile, pileaux::pred, baseaux::succ, and pileaux::succ.

Referenced by integer_sol_edit(), and new_sol_edit().

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

Variable Documentation

◆ aux

◆ compteur_de_var

int compteur_de_var

Definition at line 104 of file solpip.c.

Referenced by creer_nom_entite(), and init_new_base().

◆ conditional_act

conditional conditional_act

Definition at line 97 of file solpip.c.

Referenced by fait_quast_value().

◆ expression_act

◆ new_base_aux

◆ new_base_ref

Pbaseaux new_base_ref
static

◆ newparms_act

list newparms_act

Definition at line 91 of file solpip.c.

Referenced by ajoute_new_var(), fait_quast(), init_new_base(), and retire_par_de_pile().

◆ pile

Ppileaux pile
static

Definition at line 99 of file solpip.c.

Referenced by ajoute_new_var(), and retire_par_de_pile().

◆ predicate_act

Ppilepredicat predicate_act
static

Definition at line 93 of file solpip.c.

Referenced by creer_predicat(), and fait_quast_value().

◆ premiere_var

int premiere_var

Definition at line 104 of file solpip.c.

Referenced by ecrit_une_var(), ecrit_une_var_neg(), init_new_base(), and init_vecteur().

◆ premiere_var1

int premiere_var1

Definition at line 104 of file solpip.c.

◆ psyst_act

Psysteme psyst_act

Definition at line 103 of file solpip.c.

Referenced by creer_predicat(), creer_Psysteme(), and ecrit_coeff1().

◆ quast_false

quast quast_false

Definition at line 95 of file solpip.c.

Referenced by fait_quast(), and fait_quast_value().

◆ quast_true

Ppilequast quast_true
static

Definition at line 98 of file solpip.c.

Referenced by creer_true_quast(), and fait_quast_value().

◆ quast_value_act

quast_value quast_value_act

Definition at line 96 of file solpip.c.

Referenced by creer_quast_value(), fait_quast(), and fait_quast_value().

◆ solution_act

list solution_act

Definition at line 92 of file solpip.c.

Referenced by creer_quast_value(), ecrit_liste_vecteur(), init_liste_vecteur(), and init_quast().

◆ vect_act

Pvecteur vect_act

Definition at line 102 of file solpip.c.

◆ vect_aux

◆ vect_var_aux

Pvecteur vect_var_aux

Definition at line 102 of file solpip.c.

Referenced by ecrit_liste_vecteur(), and init_liste_vecteur().