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