add isl_basic_set_print and isl_set_print for printing in PolyLib format
[platform/upstream/isl.git] / isl_output.c
1 #include <isl_set.h>
2
3 static void print_constraint_polylib(struct isl_basic_set *bset,
4         int ineq, int n,
5         FILE *out, int indent, const char *prefix, const char *suffix)
6 {
7         int i;
8         isl_int *c = ineq ? bset->ineq[n] : bset->eq[n];
9
10         fprintf(out, "%*s%s", indent, "", prefix ? prefix : "");
11         fprintf(out, "%d", ineq);
12         for (i = 0; i < bset->dim; ++i) {
13                 fprintf(out, " ");
14                 isl_int_print(out, c[1+bset->nparam+i], 5);
15         }
16         for (i = 0; i < bset->n_div; ++i) {
17                 fprintf(out, " ");
18                 isl_int_print(out, c[1+bset->nparam+bset->dim+i], 5);
19         }
20         for (i = 0; i < bset->nparam; ++i) {
21                 fprintf(out, " ");
22                 isl_int_print(out, c[1+i], 5);
23         }
24         fprintf(out, " ");
25         isl_int_print(out, c[0], 5);
26         fprintf(out, "%s\n", suffix ? suffix : "");
27 }
28
29 static void print_constraints_polylib(struct isl_basic_set *bset,
30         FILE *out, int indent, const char *prefix, const char *suffix)
31 {
32         int i;
33
34         for (i = 0; i < bset->n_eq; ++i)
35                 print_constraint_polylib(bset, 0, i, out,
36                                         indent, prefix, suffix);
37         for (i = 0; i < bset->n_ineq; ++i)
38                 print_constraint_polylib(bset, 1, i, out,
39                                         indent, prefix, suffix);
40 }
41
42 static void isl_basic_set_print_polylib(struct isl_basic_set *bset, FILE *out,
43         int indent, const char *prefix, const char *suffix)
44 {
45         unsigned total = bset->nparam + bset->dim + bset->n_div;
46         fprintf(out, "%*s%s", indent, "", prefix ? prefix : "");
47         fprintf(out, "%d %d", bset->n_eq + bset->n_ineq, 1 + total + 1);
48         fprintf(out, "%s\n", suffix ? suffix : "");
49         print_constraints_polylib(bset, out, indent, prefix, suffix);
50 }
51
52 static void isl_set_print_polylib(struct isl_set *set, FILE *out, int indent)
53 {
54         int i;
55
56         fprintf(out, "%*s", indent, "");
57         fprintf(out, "%d\n", set->n);
58         for (i = 0; i < set->n; ++i) {
59                 fprintf(out, "\n");
60                 isl_basic_set_print_polylib(set->p[i], out, indent, NULL, NULL);
61         }
62 }
63
64 void isl_basic_set_print(struct isl_basic_set *bset, FILE *out, int indent,
65         const char *prefix, const char *suffix, unsigned output_format)
66 {
67         if (!bset)
68                 return;
69         if (output_format == ISL_FORMAT_POLYLIB)
70                 isl_basic_set_print_polylib(bset, out, indent, prefix, suffix);
71         else if (output_format == ISL_FORMAT_POLYLIB_CONSTRAINTS)
72                 print_constraints_polylib(bset, out, indent, prefix, suffix);
73         else
74                 isl_assert(bset->ctx, 0, return);
75 }
76
77 void isl_set_print(struct isl_set *set, FILE *out, int indent,
78         unsigned output_format)
79 {
80         if (!set)
81                 return;
82         if (output_format == ISL_FORMAT_POLYLIB)
83                 isl_set_print_polylib(set, out, indent);
84         else
85                 isl_assert(set->ctx, 0, return);
86 }