Line data Source code
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 0 : __isl_give MULTI(BASE) *FN(MULTI(BASE),coalesce)(__isl_take MULTI(BASE) *multi)
19 : {
20 : int i;
21 :
22 0 : if (!multi)
23 0 : return NULL;
24 :
25 0 : for (i = 0; i < multi->n; ++i) {
26 0 : EL *el = FN(EL,copy)(multi->u.p[i]);
27 0 : el = FN(EL,coalesce)(el);
28 0 : if (!el)
29 0 : return FN(MULTI(BASE),free)(multi);
30 0 : FN(EL,free)(multi->u.p[i]);
31 0 : multi->u.p[i] = el;
32 : }
33 :
34 0 : return multi;
35 : }
|