1 /* 2 * Copyright 2013 Ecole Normale Superieure 3 * 4 * Use of this software is governed by the MIT license 5 * 6 * Written by Sven Verdoolaege, 7 * Ecole Normale Superieure, 45 rue d'Ulm, 75230 Paris, France 8 */ 9 10 #include <isl_multi_macro.h> 11 12 /* Coalesce the elements of "multi". 13 * 14 * Note that such coalescing does not change the meaning of "multi" 15 * so there is no need to cow. We do need to be careful not to 16 * destroy any other copies of "multi" in case of failure. 17 */ MULTI(BASE)18__isl_give MULTI(BASE) *FN(MULTI(BASE),coalesce)(__isl_take MULTI(BASE) *multi) 19 { 20 int i; 21 22 if (!multi) 23 return NULL; 24 25 for (i = 0; i < multi->n; ++i) { 26 EL *el = FN(EL,copy)(multi->u.p[i]); 27 el = FN(EL,coalesce)(el); 28 if (!el) 29 return FN(MULTI(BASE),free)(multi); 30 FN(EL,free)(multi->u.p[i]); 31 multi->u.p[i] = el; 32 } 33 34 return multi; 35 } 36