Home | History | Annotate | Line # | Download | only in dist
      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