2 * Copyright 2008-2009 Katholieke Universiteit Leuven
4 * Use of this software is governed by the GNU LGPLv2.1 license
6 * Written by Sven Verdoolaege, K.U.Leuven, Departement
7 * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium
14 #include "isl_map_private.h"
15 #include "isl_input_omega.h"
17 static char *next_line(FILE *input
, char *line
, unsigned len
)
22 if (!(p
= fgets(line
, len
, input
)))
24 while (isspace(*p
) && *p
!= '\n')
26 } while (*p
== '#' || *p
== '\n');
31 static struct isl_basic_set
*isl_basic_set_read_from_file_polylib(
32 struct isl_ctx
*ctx
, FILE *input
, unsigned nparam
)
34 struct isl_basic_set
*bset
= NULL
;
36 unsigned n_row
, n_col
;
42 isl_assert(ctx
, next_line(input
, line
, sizeof(line
)), return NULL
);
43 isl_assert(ctx
, sscanf(line
, "%u %u", &n_row
, &n_col
) == 2, return NULL
);
44 isl_assert(ctx
, n_col
>= 2, return NULL
);
45 dim
= n_col
- 2 - nparam
;
46 bset
= isl_basic_set_alloc(ctx
, nparam
, dim
, 0, n_row
, n_row
);
49 for (i
= 0; i
< n_row
; ++i
) {
56 p
= next_line(input
, line
, sizeof(line
));
57 isl_assert(ctx
, p
, goto error
);
58 n
= sscanf(p
, "%u%n", &type
, &offset
);
59 isl_assert(ctx
, n
!= 0, goto error
);
61 isl_assert(ctx
, type
== 0 || type
== 1, goto error
);
63 k
= isl_basic_set_alloc_equality(bset
);
66 k
= isl_basic_set_alloc_inequality(bset
);
69 isl_assert(ctx
, k
>= 0, goto error
);
70 for (j
= 0; j
< dim
; ++j
) {
71 n
= sscanf(p
, "%s%n", val
, &offset
);
72 isl_assert(ctx
, n
!= 0, goto error
);
73 isl_int_read(c
[1+nparam
+j
], val
);
76 for (j
= 0; j
< nparam
; ++j
) {
77 n
= sscanf(p
, "%s%n", val
, &offset
);
78 isl_assert(ctx
, n
!= 0, goto error
);
79 isl_int_read(c
[1+j
], val
);
82 n
= sscanf(p
, "%s%n", val
, &offset
);
83 isl_assert(ctx
, n
!= 0, goto error
);
84 isl_int_read(c
[0], val
);
86 bset
= isl_basic_set_simplify(bset
);
87 bset
= isl_basic_set_finalize(bset
);
90 isl_basic_set_free(bset
);
94 static struct isl_set
*isl_set_read_from_file_polylib(
95 struct isl_ctx
*ctx
, FILE *input
, unsigned nparam
)
97 struct isl_set
*set
= NULL
;
102 isl_assert(ctx
, next_line(input
, line
, sizeof(line
)), return NULL
);
103 isl_assert(ctx
, sscanf(line
, "%u", &n
) == 1, return NULL
);
105 set
= isl_set_alloc(ctx
, nparam
, 0, n
, 0);
110 for (i
= 0; i
< n
; ++i
) {
111 set
->p
[i
] = isl_basic_set_read_from_file_polylib(ctx
, input
,
117 isl_dim_free(set
->dim
);
118 set
->dim
= isl_dim_copy(set
->p
[0]->dim
);
119 for (i
= 1; i
< n
; ++i
)
120 isl_assert(ctx
, isl_dim_equal(set
->dim
, set
->p
[i
]->dim
),
128 struct isl_basic_set
*isl_basic_set_read_from_file(struct isl_ctx
*ctx
,
129 FILE *input
, unsigned nparam
, unsigned input_format
)
131 if (input_format
== ISL_FORMAT_POLYLIB
)
132 return isl_basic_set_read_from_file_polylib(ctx
, input
, nparam
);
133 else if (input_format
== ISL_FORMAT_OMEGA
) {
134 isl_assert(ctx
, nparam
== 0, return NULL
);
135 return isl_basic_set_read_from_file_omega(ctx
, input
);
137 isl_assert(ctx
, 0, return NULL
);
140 struct isl_basic_set
*isl_basic_set_read_from_str(struct isl_ctx
*ctx
,
141 const char *str
, unsigned nparam
, unsigned input_format
)
143 if (input_format
== ISL_FORMAT_OMEGA
) {
144 isl_assert(ctx
, nparam
== 0, return NULL
);
145 return isl_basic_set_read_from_str_omega(ctx
, str
);
147 isl_assert(ctx
, 0, return NULL
);
150 struct isl_basic_map
*isl_basic_map_read_from_file(struct isl_ctx
*ctx
,
151 FILE *input
, unsigned nparam
, unsigned input_format
)
153 if (input_format
== ISL_FORMAT_OMEGA
)
154 return isl_basic_map_read_from_file_omega(ctx
, input
);
156 isl_assert(ctx
, 0, return NULL
);
159 struct isl_set
*isl_set_read_from_file(struct isl_ctx
*ctx
,
160 FILE *input
, unsigned nparam
, unsigned input_format
)
162 if (input_format
== ISL_FORMAT_POLYLIB
)
163 return isl_set_read_from_file_polylib(ctx
, input
, nparam
);
165 isl_assert(ctx
, 0, return NULL
);
168 static struct isl_vec
*isl_vec_read_from_file_polylib(struct isl_ctx
*ctx
,
171 struct isl_vec
*vec
= NULL
;
180 isl_assert(ctx
, next_line(input
, line
, sizeof(line
)), return NULL
);
181 isl_assert(ctx
, sscanf(line
, "%u", &size
) == 1, return NULL
);
183 vec
= isl_vec_alloc(ctx
, size
);
185 p
= next_line(input
, line
, sizeof(line
));
186 isl_assert(ctx
, p
, goto error
);
188 for (j
= 0; j
< size
; ++j
) {
189 n
= sscanf(p
, "%s%n", val
, &offset
);
190 isl_assert(ctx
, n
!= 0, goto error
);
191 isl_int_read(vec
->el
[j
], val
);
201 struct isl_vec
*isl_vec_read_from_file(struct isl_ctx
*ctx
,
202 FILE *input
, unsigned input_format
)
204 if (input_format
== ISL_FORMAT_POLYLIB
)
205 return isl_vec_read_from_file_polylib(ctx
, input
);
207 isl_assert(ctx
, 0, return NULL
);