4 #include <barvinok/set.h>
7 #include <NTL/vec_ZZ.h>
8 #include <NTL/mat_ZZ.h>
9 #include <barvinok/polylib.h>
10 #include <barvinok/evalue.h>
11 #include <barvinok/NTL_QQ.h>
12 #include <barvinok/options.h>
17 struct __short_rat_n
{
18 /* rows of power/columns of coeff: terms in numerator */
22 struct __short_rat_d
{
23 /* rows: factors in denominator */
26 void add(const short_rat
*rat
);
27 QQ
coefficient(Value
* params
, barvinok_options
*options
) const;
29 short_rat(const short_rat
& r
);
31 short_rat(const QQ
& c
, const vec_ZZ
& num
, const mat_ZZ
& den
);
32 short_rat(const vec_QQ
& c
, const mat_ZZ
& num
, const mat_ZZ
& den
);
34 void print(std::ostream
& os
, unsigned int nparam
,
35 const char **param_name
) const;
38 struct short_rat_lex_smaller_denominator
{
39 bool operator()(const short_rat
* r1
, const short_rat
* r2
) const;
42 typedef std::set
<short_rat
*, short_rat_lex_smaller_denominator
> short_rat_list
;
48 void add(const QQ
& c
, const vec_ZZ
& num
, const mat_ZZ
& den
);
49 void add(short_rat
*r
);
51 void add(const QQ
& c
, const gen_fun
*gf
, barvinok_options
*options
);
52 void substitute(Matrix
*CP
);
53 gen_fun
*Hadamard_product(const gen_fun
*gf
, barvinok_options
*options
);
54 void add_union(gen_fun
*gf
, barvinok_options
*options
);
55 void shift(const vec_ZZ
& offset
);
56 void divide(const vec_ZZ
& power
);
57 void print(std::ostream
& os
, unsigned int nparam
,
58 const char **param_name
) const;
59 static gen_fun
*read(std::istream
& is
, barvinok_options
*options
);
60 operator evalue
*() const;
61 ZZ
coefficient(Value
* params
, barvinok_options
*options
) const;
62 void coefficient(Value
* params
, Value
* c
) const;
63 gen_fun
*summate(int nvar
, barvinok_options
*options
) const;
64 bool summate(Value
*sum
) const;
67 gen_fun(const gen_fun
*gf
) {
69 context
= Polyhedron_Copy(gf
->context
);
73 gen_fun(Polyhedron
*C
) : context(C
) {}
75 for (short_rat_list::iterator i
= term
.begin(); i
!= term
.end(); ++i
)
80 Polyhedron_Free(context
);
84 void extend_context(const gen_fun
*gf
, barvinok_options
*options
);
85 void add(const QQ
& c
, const gen_fun
*gf
);
88 std::ostream
& operator<< (std::ostream
& os
, const gen_fun
& gf
);