PIPS
contrainte-local.h
Go to the documentation of this file.
1 /*
2 
3  $Id: contrainte-local.h 1641 2016-03-02 08:20:19Z coelho $
4 
5  Copyright 1989-2016 MINES ParisTech
6 
7  This file is part of Linear/C3 Library.
8 
9  Linear/C3 Library is free software: you can redistribute it and/or modify it
10  under the terms of the GNU Lesser General Public License as published by
11  the Free Software Foundation, either version 3 of the License, or
12  any later version.
13 
14  Linear/C3 Library is distributed in the hope that it will be useful, but WITHOUT ANY
15  WARRANTY; without even the implied warranty of MERCHANTABILITY or
16  FITNESS FOR A PARTICULAR PURPOSE.
17 
18  See the GNU Lesser General Public License for more details.
19 
20  You should have received a copy of the GNU Lesser General Public License
21  along with Linear/C3 Library. If not, see <http://www.gnu.org/licenses/>.
22 
23 */
24 
25 /* package sur les contraintes.
26  *
27  * Une contrainte est une egalite ou une inegalite. Elle est representee
28  * par un vecteur dont une coordonnee particuliere, TCST, represente
29  * le terme constant.
30  *
31  * Les contraintes sont stockees sous forme de membres gauches, ce qui
32  * n'est utile a savoir que pour les inegalites:
33  *
34  * sum a x + b <= 0
35  * i i i
36  * ou b est le terme constant.
37  *
38  * Les tableaux de saturations sont calcules en fonction de polyedre
39  * (systeme generateur ou systeme de contraintes) et leurs dimensions
40  * sont inconnues au niveau des contraintes. Ils sont ignores la
41  * plupart du temps.
42  *
43  * Les contraintes sont traitees sous forme de liste de contraintes
44  * (systeme d'egalites ou systeme d'inegalites) et possedent un champ
45  * de chainage. Certaines des fonctions portent sur des listes de
46  * contraintes et non sur des contraintes. Cette double semantique
47  * complique beaucoup les choses.
48  *
49  * Le pointeur NULL represente implicitement l'une des contraintes toujours
50  * faisables, 0 == 0 ou 0 <= 0. Au moins, la plupart du temps... car
51  * il represente la valeur CONTRAINTE_UNDEFINED dans les routines de gestion
52  * memoire.
53  *
54  * Il vaut mieux utiliser la macro CONTRAINTE_NULLE_P() qui verifie que
55  * le vecteur associe est le VECTEUR_NUL.
56  *
57  * Les contraintes trivialement faisables et infaisables sont representees
58  * par un unique terme constant: 0 == k, 0 <= k, 0 <= -k (k positif).
59  * Il existe deux fonctions pour les tester.
60  *
61  * Autres packages a inclure:
62  * - types.h
63  * - boolean.h
64  * - vecteur.h
65  *
66  * Malik Imadache, Corinne Ancourt, Neil Butler, Francois Irigoin
67  *
68  * Bugs:
69  * - melange de la notion de chainage et de la notion de terme constant
70  * - definition directe de TCST: on ne peut pas decider dynamiquement
71  * de la variable representant le terme constant
72  * - definition de TCST au niveau contrainte, alors que TCST doit etre
73  * utilise au niveau vecteur (cf. macro term_cst())
74  *
75  * Modifications:
76  * - passage du terme constant a gauche (FI, 24/11/89)
77  * - deplacement de la definition du terme constant TCST et de la macro
78  * term_cst dans le package vecteur (PB, 06/06/90)
79  */
80 
81 #ifndef CONTRAINTE
82 
83 /* constante associee a la structure de donnees "contrainte" */
84 #define CONTRAINTE 1005
85 
86 typedef struct Scontrainte {
87  int *eq_sat;
88  int *s_sat,*r_sat;
90  struct Scontrainte *succ;
92 
94 
96 
97 /* MACROS ET CONSTANTES */
98 
99 #define egalite_print(eg) egalite_fprint(stdout,eg)
100 /* FI: this macro requires an additional parameter or a default value
101  as third parameter of inegalite_fprint() */
102 #define inegalite_print(ineg) inegalite_fprint(stdout,ineg)
103 
104 /* passage au champ vecteur d'une contrainte "a la Newgen" */
105 #define contrainte_vecteur(c) ((c)->vecteur)
106 
107 #define contrainte_succ(c) ((c)->succ)
108 
109 /* contrainte nulle (non contrainte 0 == 0 ou 0 <= 0) */
110 #define CONTRAINTE_NULLE_P(c) (VECTEUR_NUL_P(contrainte_vecteur(c)))
111 
112 #define CONTRAINTE_UNDEFINED ((Pcontrainte) NULL)
113 
114 #define CONTRAINTE_UNDEFINED_P(c) ((c)==CONTRAINTE_UNDEFINED)
115 
116 /* int COEFF_CST(Pcontrainte c): terme constant d'une contrainte */
117 #define COEFF_CST(c) vect_coeff(TCST,(c)->vecteur)
118 
119 /* the standard xxx_rm does not return a value */
120 #define contrainte_rm(c) (void) contrainte_free(c)
121 
122 #define VERSION_FINALE
123 #ifndef VERSION_FINALE
124 #define CONTRAINTE_RM(rd,f) dbg_contrainte_rm(rd,f)
125 #else
126 #define CONTRAINTE_RM(rd,f) contrainte_rm(rd)
127 #endif
128 
129 
130 #endif /* CONTRAINTE */
struct Scontrainte Scontrainte
Scontrainte Segalite
Scontrainte * Pinegalite
Scontrainte Sinegalite
struct Scontrainte * Pcontrainte
Scontrainte * Pegalite
Pvecteur vecteur
struct Scontrainte * succ
le type des coefficients dans les vecteurs: Value est defini dans le package arithmetique
Definition: vecteur-local.h:89