isl_tab_basic_map_partial_lexopt*: separate out intersection
[isl.git] / isl_multi_apply_explicit_domain_templ.c
blob094329862f5ff18a869635361bd98f4cb4b1ec26
1 /*
2 * Copyright 2017 Sven Verdoolaege
4 * Use of this software is governed by the MIT license
6 * Written by Sven Verdoolaege.
7 */
9 /* Transform the explicit domain of "multi" by applying "fn_domain" or
10 * "fn_params" to it with extra argument "domain".
11 * In particular, if the explicit domain is a parameter set,
12 * then apply "fn_params". Otherwise, apply "fn_domain".
14 * The parameters of "multi" and "domain" are assumed to have been aligned.
16 static __isl_give MULTI(BASE) *FN(FN(MULTI(BASE),apply_domain),APPLY_DOMBASE)(
17 __isl_take MULTI(BASE) *multi, __isl_take APPLY_DOM *domain,
18 __isl_give DOM *(*fn_domain)(DOM *domain, __isl_take APPLY_DOM *set),
19 __isl_give DOM *(*fn_params)(DOM *domain, __isl_take APPLY_DOM *set))
21 isl_bool is_params;
22 DOM *multi_dom;
24 multi_dom = FN(MULTI(BASE),get_explicit_domain)(multi);
25 is_params = FN(DOM,is_params)(multi_dom);
26 if (is_params < 0) {
27 FN(APPLY_DOM,free)(domain);
28 multi_dom = FN(DOM,free)(multi_dom);
29 } else if (!is_params) {
30 multi_dom = fn_domain(multi_dom, domain);
31 } else {
32 multi_dom = fn_params(multi_dom, domain);
34 multi = FN(MULTI(BASE),set_explicit_domain)(multi, multi_dom);
35 return multi;
38 #include <isl_multi_apply_templ.c>