isl_pw_print_templ.c revision 1.1 1 1.1 mrg /*
2 1.1 mrg * Copyright 2011 Sven Verdoolaege
3 1.1 mrg *
4 1.1 mrg * Use of this software is governed by the MIT license
5 1.1 mrg *
6 1.1 mrg * Written by Sven Verdoolaege.
7 1.1 mrg */
8 1.1 mrg
9 1.1 mrg #undef EL
10 1.1 mrg #define EL CAT(isl_,BASE)
11 1.1 mrg #undef PW
12 1.1 mrg #define PW CAT(isl_pw_,BASE)
13 1.1 mrg
14 1.1 mrg /* Print the body of a piecewise expression, i.e., a semicolon delimited
15 1.1 mrg * sequence of expressions, each followed by constraints.
16 1.1 mrg */
17 1.1 mrg static __isl_give isl_printer *FN(print_body_pw,BASE)(
18 1.1 mrg __isl_take isl_printer *p, __isl_keep PW *pw)
19 1.1 mrg {
20 1.1 mrg int i;
21 1.1 mrg
22 1.1 mrg if (!pw)
23 1.1 mrg return isl_printer_free(p);
24 1.1 mrg
25 1.1 mrg for (i = 0; i < pw->n; ++i) {
26 1.1 mrg EL *el;
27 1.1 mrg isl_space *space;
28 1.1 mrg
29 1.1 mrg if (i)
30 1.1 mrg p = isl_printer_print_str(p, "; ");
31 1.1 mrg el = FN(PW,peek_base_at)(pw, i);
32 1.1 mrg p = FN(print_body,BASE)(p, el);
33 1.1 mrg space = FN(EL,get_domain_space)(el);
34 1.1 mrg p = print_disjuncts(set_to_map(pw->p[i].set), space, p, 0);
35 1.1 mrg isl_space_free(space);
36 1.1 mrg }
37 1.1 mrg return p;
38 1.1 mrg }
39 1.1 mrg
40 1.1 mrg /* Print a piecewise expression in isl format.
41 1.1 mrg */
42 1.1 mrg static __isl_give isl_printer *FN(FN(print_pw,BASE),isl)(
43 1.1 mrg __isl_take isl_printer *p, __isl_keep PW *pw)
44 1.1 mrg {
45 1.1 mrg struct isl_print_space_data data = { 0 };
46 1.1 mrg
47 1.1 mrg if (!pw)
48 1.1 mrg return isl_printer_free(p);
49 1.1 mrg
50 1.1 mrg p = print_param_tuple(p, pw->dim, &data);
51 1.1 mrg p = isl_printer_print_str(p, "{ ");
52 1.1 mrg p = FN(print_body_pw,BASE)(p, pw);
53 1.1 mrg p = isl_printer_print_str(p, " }");
54 1.1 mrg return p;
55 1.1 mrg }
56