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
, unsigned nparam
)
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
);
35 dim
= n_col
- 2 - nparam
;
36 bset
= isl_basic_set_alloc(ctx
, nparam
, 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(bset
);
56 k
= isl_basic_set_alloc_inequality(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+nparam
+j
], val
);
66 for (j
= 0; j
< nparam
; ++j
) {
67 n
= sscanf(p
, "%s%n", val
, &offset
);
68 isl_assert(ctx
, n
!= 0, goto error
);
69 isl_int_read(c
[1+j
], val
);
72 n
= sscanf(p
, "%s%n", val
, &offset
);
73 isl_assert(ctx
, n
!= 0, goto error
);
74 isl_int_read(c
[0], val
);
76 bset
= isl_basic_set_simplify(bset
);
77 bset
= isl_basic_set_finalize(bset
);
80 isl_basic_set_free(bset
);
84 static struct isl_set
*isl_set_read_from_file_polylib(
85 struct isl_ctx
*ctx
, FILE *input
, unsigned nparam
)
87 struct isl_set
*set
= NULL
;
92 isl_assert(ctx
, next_line(input
, line
, sizeof(line
)), return NULL
);
93 isl_assert(ctx
, sscanf(line
, "%u", &n
) == 1, return NULL
);
95 set
= isl_set_alloc(ctx
, nparam
, 0, n
, 0);
100 for (i
= 0; i
< n
; ++i
) {
101 set
->p
[i
] = isl_basic_set_read_from_file_polylib(ctx
, input
,
107 set
->dim
= set
->p
[0]->dim
;
108 for (i
= 1; i
< n
; ++i
)
109 isl_assert(ctx
, set
->dim
== set
->p
[i
]->dim
, goto error
);
116 struct isl_basic_set
*isl_basic_set_read_from_file(struct isl_ctx
*ctx
,
117 FILE *input
, unsigned nparam
, unsigned input_format
)
119 if (input_format
== ISL_FORMAT_POLYLIB
)
120 return isl_basic_set_read_from_file_polylib(ctx
, input
, nparam
);
121 else if (input_format
== ISL_FORMAT_OMEGA
) {
122 isl_assert(ctx
, nparam
== 0, return NULL
);
123 return isl_basic_set_read_from_file_omega(ctx
, input
);
125 isl_assert(ctx
, 0, return NULL
);
128 struct isl_basic_map
*isl_basic_map_read_from_file(struct isl_ctx
*ctx
,
129 FILE *input
, unsigned nparam
, unsigned input_format
)
131 if (input_format
== ISL_FORMAT_OMEGA
)
132 return isl_basic_map_read_from_file_omega(ctx
, input
);
134 isl_assert(ctx
, 0, return NULL
);
137 struct isl_set
*isl_set_read_from_file(struct isl_ctx
*ctx
,
138 FILE *input
, unsigned nparam
, unsigned input_format
)
140 if (input_format
== ISL_FORMAT_POLYLIB
)
141 return isl_set_read_from_file_polylib(ctx
, input
, nparam
);
143 isl_assert(ctx
, 0, return NULL
);