Currently, each cell corresponds to a (possibly reduced) chamber
in the chamber decomposition. If we want to allow other kinds
of cells, e.g., triangulations of chambers, then we need to
store the vertex ids inside the individual cells.
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
- v = cell->vertices->c[cell->id].vertices[n - 1 - i];
+ v = cell->ids[n - 1 - i];
return vertex_is_integral(cell->vertices->v[v].vertex);
}
return vertex_is_integral(cell->vertices->v[v].vertex);
}
isl_set *dom;
nvar = isl_qpolynomial_dim(poly, isl_dim_set) - 1;
isl_set *dom;
nvar = isl_qpolynomial_dim(poly, isl_dim_set) - 1;
- n_vertices = cell->vertices->c[cell->id].n_vertices;
+ n_vertices = cell->n_vertices;
subs = isl_alloc_array(data->poly->dim->ctx, isl_qpolynomial *,
1 + nvar);
subs = isl_alloc_array(data->poly->dim->ctx, isl_qpolynomial *,
1 + nvar);
c = isl_qpolynomial_var(isl_dim_copy(dim_dst), isl_dim_set,
1 + nvar + i);
for (j = 0; j < nvar; ++j) {
c = isl_qpolynomial_var(isl_dim_copy(dim_dst), isl_dim_set,
1 + nvar + i);
for (j = 0; j < nvar; ++j) {
- int k = cell->vertices->c[cell->id].vertices[i];
isl_qpolynomial *v;
v = vertex_coordinate(cell->vertices->v[k].vertex, j,
isl_dim_copy(dim_param));
isl_qpolynomial *v;
v = vertex_coordinate(cell->vertices->v[k].vertex, j,
isl_dim_copy(dim_param));
__isl_give isl_basic_set *isl_cell_get_domain(__isl_keep isl_cell *cell)
{
__isl_give isl_basic_set *isl_cell_get_domain(__isl_keep isl_cell *cell)
{
- struct isl_chamber *c;
-
- if (!cell)
- return NULL;
-
- c = &cell->vertices->c[cell->id];
-
- return isl_basic_set_copy(c->dom);
+ return cell ? isl_basic_set_copy(cell->dom) : NULL;
}
static __isl_give isl_cell *isl_cell_alloc(__isl_take isl_vertices *vertices,
__isl_take isl_basic_set *dom, int id)
{
}
static __isl_give isl_cell *isl_cell_alloc(__isl_take isl_vertices *vertices,
__isl_take isl_basic_set *dom, int id)
{
+ int i;
+ isl_cell *cell = NULL;
if (!vertices || !dom)
goto error;
if (!vertices || !dom)
goto error;
- cell = isl_alloc_type(dom->ctx, isl_cell);
+ cell = isl_calloc_type(dom->ctx, isl_cell);
+ cell->n_vertices = vertices->c[id].n_vertices;
+ cell->ids = isl_alloc_array(dom->ctx, int, cell->n_vertices);
+ if (!cell->ids)
+ goto error;
+ for (i = 0; i < cell->n_vertices; ++i)
+ cell->ids[i] = vertices->c[id].vertices[i];
cell->vertices = vertices;
cell->dom = dom;
cell->vertices = vertices;
cell->dom = dom;
isl_vertices_free(vertices);
isl_basic_set_free(dom);
return NULL;
isl_vertices_free(vertices);
isl_basic_set_free(dom);
return NULL;
return;
isl_vertices_free(cell->vertices);
return;
isl_vertices_free(cell->vertices);
isl_basic_set_free(cell->dom);
free(cell);
}
isl_basic_set_free(cell->dom);
free(cell);
}
{
int i;
isl_vertex *vertex;
{
int i;
isl_vertex *vertex;
- c = &cell->vertices->c[cell->id];
-
- if (c->n_vertices == 0)
+ if (cell->n_vertices == 0)
- for (i = 0; i < c->n_vertices; ++i) {
+ for (i = 0; i < cell->n_vertices; ++i) {
int r;
vertex = isl_vertex_alloc(isl_vertices_copy(cell->vertices),
int r;
vertex = isl_vertex_alloc(isl_vertices_copy(cell->vertices),
+ int n_vertices;
+ int *ids;
isl_vertices *vertices;
isl_basic_set *dom;
isl_vertices *vertices;
isl_basic_set *dom;
};
struct isl_external_vertex {
};
struct isl_external_vertex {