minor changes to CloogConstraint abstraction
[cloog.git] / include / cloog / constraints.h
blob621fee394c8a02d6efce9d765a79afe37a21e15e
2 /**-------------------------------------------------------------------**
3 ** CLooG **
4 **-------------------------------------------------------------------**
5 ** constraints.h **
6 **-------------------------------------------------------------------**
7 ** First version: april 17th 2005 **
8 **-------------------------------------------------------------------**/
11 /******************************************************************************
12 * CLooG : the Chunky Loop Generator (experimental) *
13 ******************************************************************************
14 * *
15 * Copyright (C) 2005 Cedric Bastoul *
16 * *
17 * This is free software; you can redistribute it and/or modify it under the *
18 * terms of the GNU General Public License as published by the Free Software *
19 * Foundation; either version 2 of the License, or (at your option) any later *
20 * version. *
21 * *
22 * This software is distributed in the hope that it will be useful, but *
23 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *
24 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License *
25 * for more details. *
26 * *
27 * You should have received a copy of the GNU General Public License along *
28 * with software; if not, write to the Free Software Foundation, Inc., *
29 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
30 * *
31 * CLooG, the Chunky Loop Generator *
32 * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr *
33 * *
34 ******************************************************************************/
37 #ifndef CLOOG_CONSTRAINTS_H
38 #define CLOOG_CONSTRAINTS_H
40 #if defined(CLOOG_POLYLIB)
41 #include <cloog/polylib/matrix.h>
42 #elif defined(CLOOG_ISL)
43 #include <cloog/isl/matrix.h>
44 #else
45 struct cloogconstraintset;
46 typedef struct cloogconstraintset CloogConstraintSet;
47 struct cloogequalities;
48 typedef struct cloogequalities CloogEqualities;
49 #endif
51 #if defined(__cplusplus)
52 extern "C"
54 #endif
56 /******************************************************************************
57 * Equalities spreading functions *
58 ******************************************************************************/
59 CloogEqualities *cloog_equal_alloc(int n, int nb_levels,
60 int nb_parameters);
61 void cloog_equal_free(CloogEqualities *equal);
62 int cloog_equal_count(CloogEqualities *equal);
63 int cloog_equal_type(CloogEqualities *equal, int level);
64 void cloog_equal_del(CloogEqualities *equal, int level);
65 int cloog_equal_total_dimension(CloogEqualities *equal);
67 /******************************************************************************
68 * Processing functions *
69 ******************************************************************************/
70 void cloog_constraint_set_normalize(CloogConstraintSet *, int);
71 void cloog_constraint_set_free(CloogConstraintSet *);
72 int cloog_constraint_set_contains_level(CloogConstraintSet *constraints,
73 int level, int nb_parameters);
74 int cloog_constraint_set_total_dimension(CloogConstraintSet *constraints);
75 CloogConstraintSet *cloog_constraint_set_copy(CloogConstraintSet *);
76 CloogConstraintSet *cloog_constraint_set_simplify(CloogConstraintSet *, CloogEqualities *, int, int);
78 #if defined(CLOOG_POLYLIB) || defined(CLOOG_ISL)
80 CloogConstraint cloog_constraint_first(CloogConstraintSet *constraints);
81 int cloog_constraint_is_valid(CloogConstraint constraint);
82 CloogConstraint cloog_constraint_next(CloogConstraint constraint);
83 CloogConstraint cloog_constraint_copy(CloogConstraint constraint);
84 void cloog_constraint_release(CloogConstraint constraint);
85 CloogConstraint cloog_constraint_invalid(void);
86 int cloog_constraint_total_dimension(CloogConstraint constraint);
88 CloogConstraint cloog_equal_constraint(CloogEqualities *equal, int j);
89 void cloog_equal_add(CloogEqualities *equal,
90 CloogConstraintSet *constraints,
91 int level, CloogConstraint line, int nb_par);
93 CloogConstraint cloog_constraint_set_defining_equality(
94 CloogConstraintSet *constraints, int level);
95 CloogConstraint cloog_constraint_set_defining_inequalities(
96 CloogConstraintSet *constraints,
97 int level, CloogConstraint *lower, int nb_parameters);
98 int cloog_constraint_involves(CloogConstraint constraint, int v);
99 int cloog_constraint_is_lower_bound(CloogConstraint constraint, int v);
100 int cloog_constraint_is_upper_bound(CloogConstraint constraint, int v);
101 int cloog_constraint_is_equality(CloogConstraint constraint);
102 void cloog_constraint_constant_get(CloogConstraint constraint,
103 cloog_int_t *val);
104 void cloog_constraint_coefficient_get(CloogConstraint constraint,
105 int var, cloog_int_t *val);
106 void cloog_constraint_coefficient_set(CloogConstraint constraint,
107 int var, cloog_int_t val);
108 void cloog_constraint_clear(CloogConstraint constraint);
109 void cloog_constraint_copy_coefficients(CloogConstraint constraint,
110 cloog_int_t *dst);
112 #endif
114 #if defined(__cplusplus)
116 #endif
117 #endif /* define _H */