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