lattice_point.cc: add ceiling function
[barvinok.git] / lattice_point.h
blob1a113acf4622bd6042200499f37e8005f3424e81
1 #ifndef LATTICE_POINT_H
2 #define LATTICE_POINT_H
4 #include <gmp.h>
5 #include <barvinok/polylib.h>
7 #if defined(__cplusplus)
8 extern "C" {
9 #endif
11 evalue *fractional_part(Value *coef, Value denom, int nvar, Polyhedron *PD);
12 evalue *ceiling(Value *coef, Value denom, int nvar, Polyhedron *PD);
14 #if defined(__cplusplus)
16 #endif
18 #if defined(__cplusplus)
20 #include <NTL/vec_ZZ.h>
21 #include <NTL/mat_ZZ.h>
23 #ifdef NTL_STD_CXX
24 using namespace NTL;
25 #endif
27 struct barvinok_options;
29 evalue *multi_monom(vec_ZZ& p);
30 int normal_mod(Value *coef, int len, Value *m);
31 void lattice_point_fixed(Value *vertex, Value *vertex_res,
32 Matrix *Rays, Matrix *Rays_res,
33 Value *point);
34 void lattice_points_fixed(Value *vertex, Value *vertex_res,
35 Matrix *Rays, Matrix *Rays_res, Matrix *points,
36 unsigned long det);
37 void lattice_point(Param_Vertices *V, const mat_ZZ& rays, vec_ZZ& num,
38 evalue **E_vertex, barvinok_options *options);
40 /* This structure encodes the power of the term in a rational generating function.
42 * Either E == NULL or constant = 0
43 * If E != NULL, then the power is E
44 * If E == NULL, then the power is constant
46 struct term_info {
47 evalue **E;
48 vec_ZZ constant;
51 void lattice_point(Param_Vertices* V, const mat_ZZ& rays, vec_ZZ& lambda,
52 term_info* term, unsigned long det,
53 barvinok_options *options);
55 #endif
57 #endif