#include <ctype.h>
#include <stdio.h>
#include <isl_set.h>
+#include "isl_dim.h"
#include "isl_map_private.h"
+#include "isl_input_omega.h"
static char *next_line(FILE *input, char *line, unsigned len)
{
return p;
}
-struct isl_basic_set *isl_basic_set_read_from_file(struct isl_ctx *ctx,
- FILE *input, unsigned input_format)
+static struct isl_basic_set *isl_basic_set_read_from_file_polylib(
+ struct isl_ctx *ctx, FILE *input, unsigned nparam)
{
struct isl_basic_set *bset = NULL;
int i, j;
char val[1024];
char *p;
- isl_assert(ctx, input_format == ISL_FORMAT_POLYLIB, return NULL);
isl_assert(ctx, next_line(input, line, sizeof(line)), return NULL);
isl_assert(ctx, sscanf(line, "%u %u", &n_row, &n_col) == 2, return NULL);
isl_assert(ctx, n_col >= 2, return NULL);
- dim = n_col - 2;
- bset = isl_basic_set_alloc(ctx, 0, dim, 0, n_row, n_row);
+ dim = n_col - 2 - nparam;
+ bset = isl_basic_set_alloc(ctx, nparam, dim, 0, n_row, n_row);
if (!bset)
return NULL;
for (i = 0; i < n_row; ++i) {
p += offset;
isl_assert(ctx, type == 0 || type == 1, goto error);
if (type == 0) {
- k = isl_basic_set_alloc_equality(ctx, bset);
+ k = isl_basic_set_alloc_equality(bset);
c = bset->eq[k];
} else {
- k = isl_basic_set_alloc_inequality(ctx, bset);
+ k = isl_basic_set_alloc_inequality(bset);
c = bset->ineq[k];
}
isl_assert(ctx, k >= 0, goto error);
for (j = 0; j < dim; ++j) {
n = sscanf(p, "%s%n", val, &offset);
isl_assert(ctx, n != 0, goto error);
+ isl_int_read(c[1+nparam+j], val);
+ p += offset;
+ }
+ for (j = 0; j < nparam; ++j) {
+ n = sscanf(p, "%s%n", val, &offset);
+ isl_assert(ctx, n != 0, goto error);
isl_int_read(c[1+j], val);
p += offset;
}
isl_assert(ctx, n != 0, goto error);
isl_int_read(c[0], val);
}
- bset = isl_basic_set_simplify(ctx, bset);
- bset = isl_basic_set_finalize(ctx, bset);
+ bset = isl_basic_set_simplify(bset);
+ bset = isl_basic_set_finalize(bset);
return bset;
error:
- isl_basic_set_free(ctx, bset);
+ isl_basic_set_free(bset);
+ return NULL;
+}
+
+static struct isl_set *isl_set_read_from_file_polylib(
+ struct isl_ctx *ctx, FILE *input, unsigned nparam)
+{
+ struct isl_set *set = NULL;
+ char line[1024];
+ int i;
+ unsigned n;
+
+ isl_assert(ctx, next_line(input, line, sizeof(line)), return NULL);
+ isl_assert(ctx, sscanf(line, "%u", &n) == 1, return NULL);
+
+ set = isl_set_alloc(ctx, nparam, 0, n, 0);
+ if (!set)
+ return NULL;
+ if (n == 0)
+ return set;
+ for (i = 0; i < n; ++i) {
+ set->p[i] = isl_basic_set_read_from_file_polylib(ctx, input,
+ nparam);
+ if (!set->p[i])
+ goto error;
+ }
+ set->n = n;
+ isl_dim_free(set->dim);
+ set->dim = isl_dim_copy(set->p[0]->dim);
+ for (i = 1; i < n; ++i)
+ isl_assert(ctx, isl_dim_equal(set->dim, set->p[i]->dim),
+ goto error);
+ return set;
+error:
+ isl_set_free(set);
+ return NULL;
+}
+
+struct isl_basic_set *isl_basic_set_read_from_file(struct isl_ctx *ctx,
+ FILE *input, unsigned nparam, unsigned input_format)
+{
+ if (input_format == ISL_FORMAT_POLYLIB)
+ return isl_basic_set_read_from_file_polylib(ctx, input, nparam);
+ else if (input_format == ISL_FORMAT_OMEGA) {
+ isl_assert(ctx, nparam == 0, return NULL);
+ return isl_basic_set_read_from_file_omega(ctx, input);
+ } else
+ isl_assert(ctx, 0, return NULL);
+}
+
+struct isl_basic_set *isl_basic_set_read_from_str(struct isl_ctx *ctx,
+ const char *str, unsigned nparam, unsigned input_format)
+{
+ if (input_format == ISL_FORMAT_OMEGA) {
+ isl_assert(ctx, nparam == 0, return NULL);
+ return isl_basic_set_read_from_str_omega(ctx, str);
+ } else
+ isl_assert(ctx, 0, return NULL);
+}
+
+struct isl_basic_map *isl_basic_map_read_from_file(struct isl_ctx *ctx,
+ FILE *input, unsigned nparam, unsigned input_format)
+{
+ if (input_format == ISL_FORMAT_OMEGA)
+ return isl_basic_map_read_from_file_omega(ctx, input);
+ else
+ isl_assert(ctx, 0, return NULL);
+}
+
+struct isl_set *isl_set_read_from_file(struct isl_ctx *ctx,
+ FILE *input, unsigned nparam, unsigned input_format)
+{
+ if (input_format == ISL_FORMAT_POLYLIB)
+ return isl_set_read_from_file_polylib(ctx, input, nparam);
+ else
+ isl_assert(ctx, 0, return NULL);
+}
+
+static struct isl_vec *isl_vec_read_from_file_polylib(struct isl_ctx *ctx,
+ FILE *input)
+{
+ struct isl_vec *vec = NULL;
+ char line[1024];
+ char val[1024];
+ char *p;
+ unsigned size;
+ int j;
+ int n;
+ int offset;
+
+ isl_assert(ctx, next_line(input, line, sizeof(line)), return NULL);
+ isl_assert(ctx, sscanf(line, "%u", &size) == 1, return NULL);
+
+ vec = isl_vec_alloc(ctx, size);
+
+ p = next_line(input, line, sizeof(line));
+ isl_assert(ctx, p, goto error);
+
+ for (j = 0; j < size; ++j) {
+ n = sscanf(p, "%s%n", val, &offset);
+ isl_assert(ctx, n != 0, goto error);
+ isl_int_read(vec->el[j], val);
+ p += offset;
+ }
+
+ return vec;
+error:
+ isl_vec_free(vec);
return NULL;
}
+
+struct isl_vec *isl_vec_read_from_file(struct isl_ctx *ctx,
+ FILE *input, unsigned input_format)
+{
+ if (input_format == ISL_FORMAT_POLYLIB)
+ return isl_vec_read_from_file_polylib(ctx, input);
+ else
+ isl_assert(ctx, 0, return NULL);
+}