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)(pw: multi->u.p[i]); |
27 | el = FN(EL,coalesce)(pw: el); |
28 | if (!el) |
29 | return FN(MULTI(BASE),free)(multi); |
30 | FN(EL,free)(pw: multi->u.p[i]); |
31 | multi->u.p[i] = el; |
32 | } |
33 | |
34 | return multi; |
35 | } |
36 | |