1#include <isl/set.h>
2#include <isl/vertices.h>
3
4#if defined(__cplusplus)
5extern "C" {
6#endif
7
8struct isl_morph;
9
10/* A parametric vertex.  "vertex" contains the actual description
11 * of the vertex as a singleton parametric set.  "dom" is the projection
12 * of "vertex" onto the parameter space, i.e., the activity domain
13 * of the vertex.
14 */
15struct isl_vertex {
16	isl_basic_set *dom;
17	isl_basic_set *vertex;
18};
19
20/* A chamber in the chamber decomposition.  The indices of the "n_vertices"
21 * active vertices are stored in "vertices".
22 */
23struct isl_chamber {
24	int n_vertices;
25	int *vertices;
26	isl_basic_set *dom;
27};
28
29struct isl_vertices {
30	int ref;
31
32	/* The rational basic set spanned by the vertices. */
33	isl_basic_set *bset;
34
35	int n_vertices;
36	struct isl_vertex *v;
37
38	int n_chambers;
39	struct isl_chamber *c;
40};
41
42struct isl_cell {
43	int n_vertices;
44	int *ids;
45	isl_vertices *vertices;
46	isl_basic_set *dom;
47};
48
49struct isl_external_vertex {
50	isl_vertices *vertices;
51	int id;
52};
53
54int isl_vertices_foreach_disjoint_cell(__isl_keep isl_vertices *vertices,
55	int (*fn)(__isl_take isl_cell *cell, void *user), void *user);
56int isl_cell_foreach_simplex(__isl_take isl_cell *cell,
57	int (*fn)(__isl_take isl_cell *simplex, void *user), void *user);
58
59__isl_give isl_vertices *isl_morph_vertices(__isl_take struct isl_morph *morph,
60	__isl_take isl_vertices *vertices);
61
62#if defined(__cplusplus)
63}
64#endif
65