1 #include <barvinok/barvinok.h>
2 #include <barvinok/util.h>
5 /* The input of this example program is similar to that of ehrhart_union
6 * in the PolyLib distribution, the difference being that the number of
7 * polytopes in the union needs to specified explicitly.
8 * The input starts with this number, followed by this number of
9 * polytopes in combined data and parameter space, a context polytope
10 * in parameter space and (optionally) the names of the parameters.
11 * All polytopes are in PolyLib notation.
14 #ifdef HAVE_GROWING_CHERNIKOVA
15 #define MAXRAYS POL_NO_DUAL
22 #define getopt_long(a,b,c,d,e) getopt(a,b,c)
25 struct option options
[] = {
26 { "series", no_argument
, 0, 's' },
27 { "version", no_argument
, 0, 'V' },
32 int main(int argc
, char **argv
)
35 Polyhedron
*C
, *D
= NULL
;
42 while ((c
= getopt_long(argc
, argv
, "sV", options
, &ind
)) != -1) {
48 printf(barvinok_version());
55 while ((*s
=='#') || (sscanf(s
, "%d", &npol
)<1))
58 for (i
= 0; i
< npol
; ++i
) {
61 P
= Constraints2Polyhedron(M
, MAXRAYS
);
63 D
= DomainConcat(P
, D
);
66 C
= Constraints2Polyhedron(M
, MAXRAYS
);
68 Polyhedron_Print(stdout
, P_VALUE_FMT
, D
);
69 Polyhedron_Print(stdout
, P_VALUE_FMT
, C
);
70 param_name
= Read_ParamNames(stdin
, C
->Dimension
);
73 gf
= barvinok_enumerate_union_series(D
, C
, MAXRAYS
);
74 gf
->print(std::cout
, C
->Dimension
, param_name
);
79 EP
= barvinok_enumerate_union(D
, C
, MAXRAYS
);
80 print_evalue(stdout
, EP
, param_name
);
84 Free_ParamNames(param_name
, C
->Dimension
);