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