4 #include "isl_map_private.h"
5 #include "isl_input_omega.h"
7 static char *next_line(FILE *input, char *line, unsigned len)
12 if (!(p = fgets(line, len, input)))
14 while (isspace(*p) && *p != '\n')
16 } while (*p == '#' || *p == '\n');
21 static struct isl_basic_set *isl_basic_set_read_from_file_polylib(
22 struct isl_ctx *ctx, FILE *input)
24 struct isl_basic_set *bset = NULL;
26 unsigned n_row, n_col;
32 isl_assert(ctx, next_line(input, line, sizeof(line)), return NULL);
33 isl_assert(ctx, sscanf(line, "%u %u", &n_row, &n_col) == 2, return NULL);
34 isl_assert(ctx, n_col >= 2, return NULL);
36 bset = isl_basic_set_alloc(ctx, 0, dim, 0, n_row, n_row);
39 for (i = 0; i < n_row; ++i) {
46 p = next_line(input, line, sizeof(line));
47 isl_assert(ctx, p, goto error);
48 n = sscanf(p, "%u%n", &type, &offset);
49 isl_assert(ctx, n != 0, goto error);
51 isl_assert(ctx, type == 0 || type == 1, goto error);
53 k = isl_basic_set_alloc_equality(ctx, bset);
56 k = isl_basic_set_alloc_inequality(ctx, bset);
59 isl_assert(ctx, k >= 0, goto error);
60 for (j = 0; j < dim; ++j) {
61 n = sscanf(p, "%s%n", val, &offset);
62 isl_assert(ctx, n != 0, goto error);
63 isl_int_read(c[1+j], val);
66 n = sscanf(p, "%s%n", val, &offset);
67 isl_assert(ctx, n != 0, goto error);
68 isl_int_read(c[0], val);
70 bset = isl_basic_set_simplify(ctx, bset);
71 bset = isl_basic_set_finalize(ctx, bset);
74 isl_basic_set_free(ctx, bset);
78 static struct isl_set *isl_set_read_from_file_polylib(
79 struct isl_ctx *ctx, FILE *input)
81 struct isl_set *set = NULL;
86 isl_assert(ctx, next_line(input, line, sizeof(line)), return NULL);
87 isl_assert(ctx, sscanf(line, "%u", &n) == 1, return NULL);
89 set = isl_set_alloc(ctx, 0, 0, n, 0);
94 for (i = 0; i < n; ++i) {
95 set->p[i] = isl_basic_set_read_from_file_polylib(ctx, input);
100 set->dim = set->p[0]->dim;
101 for (i = 1; i < n; ++i)
102 isl_assert(ctx, set->dim == set->p[i]->dim, goto error);
105 isl_set_free(ctx, set);
109 struct isl_basic_set *isl_basic_set_read_from_file(struct isl_ctx *ctx,
110 FILE *input, unsigned input_format)
112 if (input_format == ISL_FORMAT_POLYLIB)
113 return isl_basic_set_read_from_file_polylib(ctx, input);
114 else if (input_format == ISL_FORMAT_OMEGA)
115 return isl_basic_set_read_from_file_omega(ctx, input);
117 isl_assert(ctx, 0, return NULL);
120 struct isl_basic_map *isl_basic_map_read_from_file(struct isl_ctx *ctx,
121 FILE *input, unsigned input_format)
123 if (input_format == ISL_FORMAT_OMEGA)
124 return isl_basic_map_read_from_file_omega(ctx, input);
126 isl_assert(ctx, 0, return NULL);
129 struct isl_set *isl_set_read_from_file(struct isl_ctx *ctx,
130 FILE *input, unsigned input_format)
132 if (input_format == ISL_FORMAT_POLYLIB)
133 return isl_set_read_from_file_polylib(ctx, input);
135 isl_assert(ctx, 0, return NULL);