return 1;
}
-__isl_give isl_multi_aff *isl_multi_aff_drop_dims(__isl_take isl_multi_aff *maff,
- enum isl_dim_type type, unsigned first, unsigned n)
-{
- int i;
-
- maff = isl_multi_aff_cow(maff);
- if (!maff)
- return NULL;
-
- maff->space = isl_space_drop_dims(maff->space, type, first, n);
- if (!maff->space)
- return isl_multi_aff_free(maff);
-
- if (type == isl_dim_out) {
- for (i = 0; i < n; ++i)
- isl_aff_free(maff->p[first + i]);
- for (i = first; i + n < maff->n; ++i)
- maff->p[i] = maff->p[i + n];
- maff->n -= n;
- return maff;
- }
-
- for (i = 0; i < maff->n; ++i) {
- maff->p[i] = isl_aff_drop_dims(maff->p[i], type, first, n);
- if (!maff->p[i])
- return isl_multi_aff_free(maff);
- }
-
- return maff;
-}
-
/* Return the set of domain elements where "ma1" is lexicographically
* smaller than or equal to "ma2".
*/
return multi;
}
+
+__isl_give MULTI(BASE) *FN(MULTI(BASE),drop_dims)(
+ __isl_take MULTI(BASE) *multi,
+ enum isl_dim_type type, unsigned first, unsigned n)
+{
+ int i;
+ unsigned dim;
+
+ multi = FN(MULTI(BASE),cow)(multi);
+ if (!multi)
+ return NULL;
+
+ dim = FN(MULTI(BASE),dim)(multi, type);
+ if (first + n > dim || first + n < first)
+ isl_die(FN(MULTI(BASE),get_ctx)(multi), isl_error_invalid,
+ "index out of bounds",
+ return FN(MULTI(BASE),cow)(multi));
+
+ multi->space = isl_space_drop_dims(multi->space, type, first, n);
+ if (!multi->space)
+ return FN(MULTI(BASE),cow)(multi);
+
+ if (type == isl_dim_out) {
+ for (i = 0; i < n; ++i)
+ FN(EL,free)(multi->p[first + i]);
+ for (i = first; i + n < multi->n; ++i)
+ multi->p[i] = multi->p[i + n];
+ multi->n -= n;
+
+ return multi;
+ }
+
+ for (i = 0; i < multi->n; ++i) {
+ multi->p[i] = FN(EL,drop_dims)(multi->p[i], type, first, n);
+ if (!multi->p[i])
+ return FN(MULTI(BASE),cow)(multi);
+ }
+
+ return multi;
+}