iscc: add "cross_range" operation
[barvinok.git] / lattice_width.h
blob21b3c0ba3020cd8799e8de74c2db7af633fe5ad2
1 #include <isl/polynomial.h>
2 #include <isl/union_set.h>
3 #include <barvinok/polylib.h>
5 #if defined(__cplusplus)
6 extern "C" {
7 #endif
9 struct barvinok_options;
11 struct width_direction {
12 Vector *width; /* The lattice width, a vector of length n+2.
13 * width[n] is the constant term
14 * width[n+1] is the denominator
16 Vector *dir; /* The direction in which width is obtained */
17 Polyhedron *domain; /* Chamber where this width is minimal */
20 struct width_direction_array {
21 int n; /* Number of elements (used) in wd array */
22 int alloc; /* Number of elements allocated in wd array */
23 struct width_direction *wd;
26 evalue *Polyhedron_Lattice_Width(Polyhedron *P, Polyhedron *C,
27 struct barvinok_options *options);
29 struct width_direction_array *
30 Polyhedron_Lattice_Width_Directions(Polyhedron *P, Polyhedron *C,
31 struct barvinok_options *options);
32 void free_width_direction_array(struct width_direction_array *dirs);
34 __isl_give isl_pw_qpolynomial *isl_basic_set_lattice_width(
35 __isl_take isl_basic_set *bset);
36 __isl_give isl_pw_qpolynomial *isl_set_lattice_width(__isl_take isl_set *set);
37 __isl_give isl_union_pw_qpolynomial *isl_union_set_lattice_width(
38 __isl_take isl_union_set *uset);
40 #if defined(__cplusplus)
42 #endif