1 1.1 mrg /* 2 1.1 mrg * Copyright 2011 Sven Verdoolaege 3 1.1 mrg * Copyright 2012-2013 Ecole Normale Superieure 4 1.1 mrg * 5 1.1 mrg * Use of this software is governed by the MIT license 6 1.1 mrg * 7 1.1 mrg * Written by Sven Verdoolaege, 8 1.1 mrg * Ecole Normale Superieure, 45 rue dUlm, 75230 Paris, France 9 1.1 mrg */ 10 1.1 mrg 11 1.1 mrg #include <isl_multi_macro.h> 12 1.1 mrg 13 1.1 mrg /* Transform the elements of "multi" by applying "fn" to them 14 1.1 mrg * with extra argument "set". 15 1.1 mrg * If "multi" has an explicit domain, then apply "fn_domain" or 16 1.1 mrg * "fn_params" to this explicit domain instead. 17 1.1 mrg * In particular, if the explicit domain is a parameter set, 18 1.1 mrg * then apply "fn_params". Otherwise, apply "fn_domain". 19 1.1 mrg */ 20 1.1 mrg static __isl_give MULTI(BASE) *FN(FN(MULTI(BASE),apply),APPLY_DOMBASE)( 21 1.1 mrg __isl_take MULTI(BASE) *multi, __isl_take APPLY_DOM *set, 22 1.1 mrg __isl_give EL *(*fn)(EL *el, __isl_take APPLY_DOM *set), 23 1.1 mrg __isl_give DOM *(*fn_domain)(DOM *domain, __isl_take APPLY_DOM *set), 24 1.1 mrg __isl_give DOM *(*fn_params)(DOM *domain, __isl_take APPLY_DOM *set)) 25 1.1 mrg { 26 1.1 mrg isl_size n; 27 1.1 mrg int i; 28 1.1 mrg 29 1.1 mrg FN(FN(MULTI(BASE),align_params),APPLY_DOMBASE)(&multi, &set); 30 1.1 mrg 31 1.1 mrg if (FN(MULTI(BASE),has_explicit_domain)(multi)) 32 1.1 mrg return FN(FN(MULTI(BASE),apply_domain),APPLY_DOMBASE)(multi, 33 1.1 mrg set, fn_domain, fn_params); 34 1.1 mrg 35 1.1 mrg n = FN(MULTI(BASE),size)(multi); 36 1.1 mrg if (n < 0 || !set) 37 1.1 mrg goto error; 38 1.1 mrg 39 1.1 mrg for (i = 0; i < n; ++i) { 40 1.1 mrg EL *el; 41 1.1 mrg 42 1.1 mrg el = FN(MULTI(BASE),take_at)(multi, i); 43 1.1 mrg el = fn(el, FN(APPLY_DOM,copy)(set)); 44 1.1 mrg multi = FN(MULTI(BASE),restore_at)(multi, i, el); 45 1.1 mrg } 46 1.1 mrg 47 1.1 mrg FN(APPLY_DOM,free)(set); 48 1.1 mrg return multi; 49 1.1 mrg error: 50 1.1 mrg FN(APPLY_DOM,free)(set); 51 1.1 mrg FN(MULTI(BASE),free)(multi); 52 1.1 mrg return NULL; 53 1.1 mrg } 54