The coefficients of any existentially quantified variables appear
between those of the set variables and those of the parameters.
+=head3 Extended C<PolyLib> format
+
+The extended C<PolyLib> format is nearly identical to the
+C<PolyLib> format. The only difference is that the line
+containing the number of rows and columns of a constraint matrix
+also contains four additional numbers:
+the number of output dimensions, the number of input dimensions,
+the number of local dimensions (i.e., the number of existentially
+quantified variables) and the number of parameters.
+For sets, the number of ``output'' dimensions is equal
+to the number of set dimensions, while the number of ``input''
+dimensions is zero.
+
=head3 Input
#include <isl_set.h>
__isl_take isl_printer *p, const char *suffix);
The C<output_format> may be either C<ISL_FORMAT_ISL>, C<ISL_FORMAT_OMEGA>,
-C<ISL_FORMAT_POLYLIB> or C<ISL_FORMAT_LATEX> and defaults to C<ISL_FORMAT_ISL>.
+C<ISL_FORMAT_POLYLIB>, C<ISL_FORMAT_EXT_POLYLIB> or C<ISL_FORMAT_LATEX>
+and defaults to C<ISL_FORMAT_ISL>.
Each line in the output is indented by C<indent> spaces
(default: 0), prefixed by C<prefix> and suffixed by C<suffix>.
In the C<PolyLib> format output,
}
static __isl_give isl_printer *isl_basic_map_print_polylib(
- __isl_keep isl_basic_map *bmap, __isl_take isl_printer *p)
+ __isl_keep isl_basic_map *bmap, __isl_take isl_printer *p, int ext)
{
unsigned total = isl_basic_map_total_dim(bmap);
p = isl_printer_start_line(p);
p = isl_printer_print_int(p, bmap->n_eq + bmap->n_ineq);
p = isl_printer_print_str(p, " ");
p = isl_printer_print_int(p, 1 + total + 1);
+ if (ext) {
+ p = isl_printer_print_str(p, " ");
+ p = isl_printer_print_int(p,
+ isl_basic_map_dim(bmap, isl_dim_out));
+ p = isl_printer_print_str(p, " ");
+ p = isl_printer_print_int(p,
+ isl_basic_map_dim(bmap, isl_dim_in));
+ p = isl_printer_print_str(p, " ");
+ p = isl_printer_print_int(p,
+ isl_basic_map_dim(bmap, isl_dim_div));
+ p = isl_printer_print_str(p, " ");
+ p = isl_printer_print_int(p,
+ isl_basic_map_dim(bmap, isl_dim_param));
+ }
p = isl_printer_end_line(p);
return print_constraints_polylib(bmap, p);
}
static __isl_give isl_printer *isl_basic_set_print_polylib(
- __isl_keep isl_basic_set *bset, __isl_take isl_printer *p)
+ __isl_keep isl_basic_set *bset, __isl_take isl_printer *p, int ext)
{
- return isl_basic_map_print_polylib((struct isl_basic_map *)bset, p);
+ return isl_basic_map_print_polylib((struct isl_basic_map *)bset, p, ext);
}
static __isl_give isl_printer *isl_map_print_polylib(__isl_keep isl_map *map,
- __isl_take isl_printer *p)
+ __isl_take isl_printer *p, int ext)
{
int i;
for (i = 0; i < map->n; ++i) {
p = isl_printer_start_line(p);
p = isl_printer_end_line(p);
- p = isl_basic_map_print_polylib(map->p[i], p);
+ p = isl_basic_map_print_polylib(map->p[i], p, ext);
}
return p;
}
static __isl_give isl_printer *isl_set_print_polylib(__isl_keep isl_set *set,
- __isl_take isl_printer *p)
+ __isl_take isl_printer *p, int ext)
{
- return isl_map_print_polylib((struct isl_map *)set, p);
+ return isl_map_print_polylib((struct isl_map *)set, p, ext);
}
static int count_same_name(__isl_keep isl_dim *dim,
if (p->output_format == ISL_FORMAT_ISL)
return isl_basic_set_print_isl(bset, p, 0);
else if (p->output_format == ISL_FORMAT_POLYLIB)
- return isl_basic_set_print_polylib(bset, p);
+ return isl_basic_set_print_polylib(bset, p, 0);
+ else if (p->output_format == ISL_FORMAT_EXT_POLYLIB)
+ return isl_basic_set_print_polylib(bset, p, 1);
else if (p->output_format == ISL_FORMAT_POLYLIB_CONSTRAINTS)
return bset_print_constraints_polylib(bset, p);
else if (p->output_format == ISL_FORMAT_OMEGA)
if (p->output_format == ISL_FORMAT_ISL)
return isl_map_print_isl((isl_map *)set, p, 1);
else if (p->output_format == ISL_FORMAT_POLYLIB)
- return isl_set_print_polylib(set, p);
+ return isl_set_print_polylib(set, p, 0);
+ else if (p->output_format == ISL_FORMAT_EXT_POLYLIB)
+ return isl_set_print_polylib(set, p, 1);
else if (p->output_format == ISL_FORMAT_OMEGA)
return isl_set_print_omega(set, p);
else if (p->output_format == ISL_FORMAT_LATEX)
if (p->output_format == ISL_FORMAT_ISL)
return isl_map_print_isl(map, p, 0);
else if (p->output_format == ISL_FORMAT_POLYLIB)
- return isl_map_print_polylib(map, p);
+ return isl_map_print_polylib(map, p, 0);
+ else if (p->output_format == ISL_FORMAT_EXT_POLYLIB)
+ return isl_map_print_polylib(map, p, 1);
else if (p->output_format == ISL_FORMAT_OMEGA)
return isl_map_print_omega(map, p);
else if (p->output_format == ISL_FORMAT_LATEX)