bmap->dim->nparam == bset->dim->nparam;
}
+isl_ctx *isl_map_get_ctx(__isl_keep isl_map *map)
+{
+ return map ? map->ctx : NULL;
+}
+
struct isl_dim *isl_basic_map_get_dim(struct isl_basic_map *bmap)
{
if (!bmap)
return (struct isl_set *)isl_map_underlying_set((struct isl_map *)set);
}
+static __isl_give isl_basic_map *isl_basic_map_reset_dim(
+ __isl_take isl_basic_map *bmap, __isl_take isl_dim *dim)
+{
+ bmap = isl_basic_map_cow(bmap);
+ if (!bmap || !dim)
+ goto error;
+
+ isl_dim_free(bmap->dim);
+ bmap->dim = dim;
+
+ return bmap;
+error:
+ isl_basic_map_free(bmap);
+ isl_dim_free(dim);
+ return NULL;
+}
+
+static __isl_give isl_basic_set *isl_basic_set_reset_dim(
+ __isl_take isl_basic_set *bset, __isl_take isl_dim *dim)
+{
+ return (isl_basic_set *)isl_basic_map_reset_dim((isl_basic_map *)bset,
+ dim);
+}
+
+__isl_give isl_map *isl_map_reset_dim(__isl_take isl_map *map,
+ __isl_take isl_dim *dim)
+{
+ int i;
+
+ map = isl_map_cow(map);
+ if (!map || !dim)
+ goto error;
+
+ for (i = 0; i < map->n; ++i) {
+ map->p[i] = isl_basic_map_reset_dim(map->p[i],
+ isl_dim_copy(dim));
+ if (!map->p[i])
+ goto error;
+ }
+ isl_dim_free(map->dim);
+ map->dim = dim;
+
+ return map;
+error:
+ isl_map_free(map);
+ isl_dim_free(dim);
+ return NULL;
+}
+
+__isl_give isl_set *isl_set_reset_dim(__isl_take isl_set *set,
+ __isl_take isl_dim *dim)
+{
+ return (struct isl_set *) isl_map_reset_dim((struct isl_map *)set, dim);
+}
+
struct isl_basic_set *isl_basic_map_domain(struct isl_basic_map *bmap)
{
+ isl_dim *dim;
struct isl_basic_set *domain;
unsigned n_in;
unsigned n_out;
+
if (!bmap)
return NULL;
+ dim = isl_dim_domain(isl_basic_map_get_dim(bmap));
+
n_in = isl_basic_map_n_in(bmap);
n_out = isl_basic_map_n_out(bmap);
domain = isl_basic_set_from_basic_map(bmap);
- return isl_basic_set_project_out(domain, isl_dim_set, n_in, n_out);
+ domain = isl_basic_set_project_out(domain, isl_dim_set, n_in, n_out);
+
+ domain = isl_basic_set_reset_dim(domain, dim);
+
+ return domain;
}
struct isl_basic_set *isl_basic_map_range(struct isl_basic_map *bmap)
__isl_give isl_map *isl_map_from_domain(__isl_take isl_set *set)
{
- return isl_map_reverse(isl_map_from_range(set));;
+ return isl_map_reverse(isl_map_from_range(set));
}
__isl_give isl_map *isl_map_from_domain_and_range(__isl_take isl_set *domain,
__isl_take isl_set *range)
{
- return isl_map_product(isl_map_from_domain(domain),
- isl_map_from_range(range));
+ return isl_map_apply_range(isl_map_from_domain(domain),
+ isl_map_from_range(range));
}
struct isl_set *isl_set_from_map(struct isl_map *map)
return (isl_set *)isl_map_lexmax((isl_map *)set);
}
-static struct isl_map *isl_map_reset_dim(struct isl_map *map,
- struct isl_dim *dim)
-{
- int i;
-
- if (!map || !dim)
- goto error;
-
- for (i = 0; i < map->n; ++i) {
- isl_dim_free(map->p[i]->dim);
- map->p[i]->dim = isl_dim_copy(dim);
- }
- isl_dim_free(map->dim);
- map->dim = dim;
-
- return map;
-error:
- isl_map_free(map);
- isl_dim_free(dim);
- return NULL;
-}
-
-static struct isl_set *isl_set_reset_dim(struct isl_set *set,
- struct isl_dim *dim)
-{
- return (struct isl_set *) isl_map_reset_dim((struct isl_map *)set, dim);
-}
-
/* Apply a preimage specified by "mat" on the parameters of "bset".
* bset is assumed to have only parameters and divs.
*/