Lines Matching refs:multi
10 * when the multi expression may have an explicit domain.
15 __isl_give MULTI(BASE) *FN(MULTI(BASE),cow)(__isl_take MULTI(BASE) *multi);
17 /* Does "multi" have an explicit domain?
19 * An explicit domain is only available if "multi" is zero-dimensional.
21 static int FN(MULTI(BASE),has_explicit_domain)(__isl_keep MULTI(BASE) *multi)
23 return multi && multi->n == 0;
26 /* Check that "multi" has an explicit domain.
28 static isl_stat FN(MULTI(BASE),check_has_explicit_domain)(
29 __isl_keep MULTI(BASE) *multi)
31 if (!multi)
33 if (!FN(MULTI(BASE),has_explicit_domain)(multi))
34 isl_die(FN(MULTI(BASE),get_ctx)(multi), isl_error_internal,
40 /* Return the explicit domain of "multi", assuming it has one.
42 static __isl_keep DOM *FN(MULTI(BASE),peek_explicit_domain)(
43 __isl_keep MULTI(BASE) *multi)
45 if (FN(MULTI(BASE),check_has_explicit_domain)(multi) < 0)
47 return multi->u.dom;
50 /* Return a copy of the explicit domain of "multi", assuming it has one.
52 static __isl_give DOM *FN(MULTI(BASE),get_explicit_domain)(
53 __isl_keep MULTI(BASE) *multi)
55 return FN(DOM,copy)(FN(MULTI(BASE),peek_explicit_domain)(multi));
58 /* Replace the explicit domain of "multi" by "dom", assuming it has one.
60 static __isl_give MULTI(BASE) *FN(MULTI(BASE),set_explicit_domain)(
61 __isl_take MULTI(BASE) *multi, __isl_take DOM *dom)
63 if (FN(MULTI(BASE),check_has_explicit_domain)(multi) < 0)
65 multi = FN(MULTI(BASE),cow)(multi);
66 if (!multi || !dom)
68 FN(DOM,free)(multi->u.dom);
69 multi->u.dom = dom;
70 if (!multi->u.dom)
71 return FN(MULTI(BASE),free)(multi);
72 return multi;
74 FN(MULTI(BASE),free)(multi);
86 static __isl_give MULTI(BASE) *FN(MULTI(BASE),intersect_explicit_domain)(
87 __isl_take MULTI(BASE) *dst, __isl_keep MULTI(BASE) *src)
92 dom = FN(MULTI(BASE),peek_explicit_domain)(src);
95 return FN(MULTI(BASE),free)(dst);
99 dst = FN(MULTI(BASE),intersect_domain)(dst, dom);
104 dst = FN(MULTI(BASE),intersect_params)(dst, params);
112 static __isl_give MULTI(BASE) *FN(MULTI(BASE),copy_explicit_domain)(
113 __isl_take MULTI(BASE) *dst, __isl_keep MULTI(BASE) *src)
117 dom = FN(MULTI(BASE),get_explicit_domain)(src);
118 dst = FN(MULTI(BASE),set_explicit_domain)(dst, dom);
123 /* Align the parameters of the explicit domain of "multi" to those of "space".
125 static __isl_give MULTI(BASE) *FN(MULTI(BASE),align_explicit_domain_params)(
126 __isl_take MULTI(BASE) *multi, __isl_take isl_space *space)
130 dom = FN(MULTI(BASE),get_explicit_domain)(multi);
132 multi = FN(MULTI(BASE),set_explicit_domain)(multi, dom);
134 return multi;
137 /* Replace the space of the explicit domain of "multi" by "space",
140 static __isl_give MULTI(BASE) *FN(MULTI(BASE),reset_explicit_domain_space)(
141 __isl_take MULTI(BASE) *multi, __isl_take isl_space *space)
145 dom = FN(MULTI(BASE),get_explicit_domain)(multi);
147 multi = FN(MULTI(BASE),set_explicit_domain)(multi, dom);
149 return multi;
152 /* Free the explicit domain of "multi".
154 static void FN(MULTI(BASE),free_explicit_domain)(__isl_keep MULTI(BASE) *multi)
156 if (FN(MULTI(BASE),check_has_explicit_domain)(multi) < 0)
158 FN(DOM,free)(multi->u.dom);
163 static isl_bool FN(MULTI(BASE),equal_explicit_domain)(
164 __isl_keep MULTI(BASE) *multi1, __isl_keep MULTI(BASE) *multi2)
169 if (FN(MULTI(BASE),check_has_explicit_domain)(multi1) < 0 ||
170 FN(MULTI(BASE),check_has_explicit_domain)(multi2) < 0)
172 dom1 = FN(MULTI(BASE),get_explicit_domain)(multi1);
173 dom2 = FN(MULTI(BASE),get_explicit_domain)(multi2);
181 static isl_stat FN(MULTI(BASE),check_explicit_domain)(
182 __isl_keep MULTI(BASE) *multi) __attribute__ ((unused));
184 /* Debugging function to check that the explicit domain of "multi"
187 isl_stat FN(MULTI(BASE),check_explicit_domain)(__isl_keep MULTI(BASE) *multi)
192 if (FN(MULTI(BASE),check_has_explicit_domain)(multi) < 0)
194 space1 = isl_space_domain(isl_space_copy(multi->space));
195 space2 = FN(DOM,get_space)(multi->u.dom);
202 isl_die(FN(MULTI(BASE),get_ctx)(multi), isl_error_internal,