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