1/* 2 * Copyright 2017 Sven Verdoolaege 3 * 4 * Use of this software is governed by the MIT license 5 * 6 * Written by Sven Verdoolaege. 7 */ 8 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". 13 * 14 * The parameters of "multi" and "domain" are assumed to have been aligned. 15 */ 16static __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)) 20{ 21 isl_bool is_params; 22 DOM *multi_dom; 23 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); 33 } 34 multi = FN(MULTI(BASE),set_explicit_domain)(multi, multi_dom); 35 return multi; 36} 37 38#include <isl_multi_apply_templ.c> 39