| 1 | #include <isl/space.h> |
| 2 | |
| 3 | #include <isl_multi_macro.h> |
| 4 | |
| 5 | /* A multiple expression with base expressions of type EL. |
| 6 | * |
| 7 | * "space" is the space in which the multiple expression lives. |
| 8 | * "n" is the number of base expression and is equal |
| 9 | * to the output or set dimension of "space". |
| 10 | * "p" is an array of size "n" of base expressions. |
| 11 | * The array is only accessible when n > 0. |
| 12 | * "dom" is the explicit domain, if present |
| 13 | * The explicit domain is only accessible when n == 0. |
| 14 | */ |
| 15 | struct MULTI(BASE) { |
| 16 | int ref; |
| 17 | isl_space *space; |
| 18 | |
| 19 | int n; |
| 20 | struct { |
| 21 | #ifdef EXPLICIT_DOMAIN |
| 22 | DOM *dom; |
| 23 | #endif |
| 24 | EL *p[1]; |
| 25 | } u; |
| 26 | }; |
| 27 | |
| 28 | __isl_give MULTI(BASE) *CAT(MULTI(BASE),_alloc)(__isl_take isl_space *space); |
| 29 | __isl_keep isl_space *FN(MULTI(BASE),peek_space)(__isl_keep MULTI(BASE) *multi); |
| 30 | |
| 31 | #ifdef EXPLICIT_DOMAIN |
| 32 | isl_bool CAT(MULTI(BASE),_has_non_trivial_domain)( |
| 33 | __isl_keep MULTI(BASE) *multi); |
| 34 | #endif |
| 35 | |