evalue.c: reorder_terms: fix typo
[barvinok.git] / barvinok / util.h
blob39db816226d58d5e0b06ccd055b8b3f07872ca00
1 #ifndef UTIL_H
2 #define UTIL_H
4 #include <barvinok/polylib.h>
6 #if defined(__cplusplus)
7 extern "C" {
8 #endif
10 #include <barvinok/evalue.h>
12 #ifdef POL_NO_DUAL
13 #define emptyQ2(P) \
14 ((F_ISSET(P, POL_INEQUALITIES) && P->NbEq > P->Dimension) || \
15 (F_ISSET(P, POL_POINTS) && P->NbRays == 0))
16 #define POL_HAS(P,f) (F_ISSET(P, f))
17 #define POL_SET(P,f) (F_SET(P, f))
19 #define POL_UNSET(flags,f) do { \
20 if (POL_ISSET(flags, POL_HIGH_BIT)) \
21 flags = (flags & ~(f)) | POL_HIGH_BIT; \
22 } while(0)
23 #else
24 #define POL_NO_DUAL 0
25 #define emptyQ2(P) emptyQ(P)
26 #define POL_ENSURE_FACETS(P) /* nothing */
27 #define POL_ENSURE_VERTICES(P) /* nothing */
28 #define POL_INEQUALITIES 0
29 #define POL_POINTS 0
30 #define POL_FACETS 0
31 #define POL_VERTICES 0
32 #define POL_VALID 0
33 #define POL_HAS(P,f) (1)
34 #define POL_SET(P,f) /* nothing */
36 #define POL_UNSET(P,f) /* nothing */
37 #endif
39 #ifndef POL_INTEGER
40 #define POL_INTEGER 0
41 #endif
43 struct barvinok_options;
45 void value_lcm(const Value i, const Value j, Value* lcm);
46 int random_int(int max);
47 Polyhedron *Polyhedron_Read(unsigned MaxRays);
48 Polyhedron* Polyhedron_Polar(Polyhedron *P, unsigned NbMaxRays);
49 void Polyhedron_Polarize(Polyhedron *P);
50 Polyhedron* supporting_cone(Polyhedron *P, int v);
51 unsigned char *supporting_constraints(Polyhedron *P, Param_Vertices *v, int *n);
52 Polyhedron* supporting_cone_p(Polyhedron *P, Param_Vertices *v);
53 Polyhedron* triangulate_cone(Polyhedron *P, unsigned NbMaxCons);
54 Polyhedron* triangulate_cone_with_options(Polyhedron *P,
55 struct barvinok_options *options);
56 void check_triangulization(Polyhedron *P, Polyhedron *T);
57 Polyhedron *remove_equalities(Polyhedron *P, unsigned MaxRays);
58 Polyhedron *remove_equalities_p(Polyhedron *P, unsigned nvar, Matrix **factor,
59 unsigned MaxRays);
60 void manual_count(Polyhedron *P, Value* result);
61 Polyhedron* Polyhedron_Factor(Polyhedron *P, unsigned nparam, Matrix **T,
62 unsigned NbMaxRays);
63 void Line_Length(Polyhedron *P, Value *len);
64 struct barvinok_options;
65 evalue* ParamLine_Length(Polyhedron *P, Polyhedron *C,
66 struct barvinok_options *options);
67 void Extended_Euclid(Value a, Value b, Value *x, Value *y, Value *g);
68 int unimodular_complete(Matrix *M, int row);
69 Bool isIdentity(Matrix *M);
70 void Param_Polyhedron_Print(FILE* DST, Param_Polyhedron *PP, char **param_names);
71 void Enumeration_Print(FILE *Dst, Enumeration *en, char **params);
72 void Enumeration_Free(Enumeration *en);
73 void Enumeration_mod2table(Enumeration *en, unsigned nparam);
74 size_t Enumeration_size(Enumeration *en);
75 void Free_ParamNames(char **params, int m);
76 int DomainIncludes(Polyhedron *Pol1, Polyhedron *Pol2);
77 #ifndef HAVE_DOMAINCONSTRAINTSIMPLIFY
78 int ConstraintSimplify(Value *old, Value *n, int len, Value* v);
79 Polyhedron *DomainConstraintSimplify(Polyhedron *P, unsigned MaxRays);
80 #endif
81 int line_minmax(Polyhedron *I, Value *min, Value *max);
82 void count_points_e (int pos, Polyhedron *P, int exist, int nparam,
83 Value *context, Value *res);
84 int DomainContains(Polyhedron *P, Value *list_args, int len,
85 unsigned MaxRays, int set);
86 Polyhedron* Polyhedron_Project(Polyhedron *P, int dim);
87 Polyhedron *DomainConcat(Polyhedron *head, Polyhedron *tail);
89 /* only defined if PolyLib has RankingConstraints */
90 evalue *barvinok_lexsmaller_ev(Polyhedron *P, Polyhedron *D, unsigned dim,
91 Polyhedron *C, unsigned MaxRays);
92 Enumeration *barvinok_lexsmaller(Polyhedron *P, Polyhedron *D, unsigned dim,
93 Polyhedron *C, unsigned MaxRays);
95 Matrix *align_matrix(Matrix *M, int nrows);
97 char **util_generate_names(int n, char *prefix);
98 void util_free_names(int n, char **names);
99 void Polyhedron_pprint(FILE *out, Polyhedron *P, int dim, int nparam,
100 char **iter_names, char **param_names);
102 Polyhedron *Cone_over_Polyhedron(Polyhedron *P);
104 Matrix *compress_variables(Matrix *Equalities, unsigned nparam);
105 Matrix *left_inverse(Matrix *M, Matrix **Eq);
107 int Polyhedron_has_revlex_positive_rays(Polyhedron *P, unsigned nparam);
108 int Polyhedron_is_unbounded(Polyhedron *P, unsigned nparam, unsigned MaxRays);
110 void Vector_Oppose(Value *p1, Value *p2, unsigned len);
111 void Matrix_Transposition(Matrix *M);
113 typedef void (*for_each_lower_upper_bound_fn)(Matrix *, Value *, Value *, void *);
114 void for_each_lower_upper_bound(Polyhedron *P, for_each_lower_upper_bound_fn fn,
115 void *cb_data);
117 const char *barvinok_version();
119 #if defined(__cplusplus)
121 #endif
123 #endif