add isl_set_{from,to}_underlying_set
authorSven Verdoolaege <skimo@kotnet.org>
Thu, 18 Sep 2008 18:36:22 +0000 (20:36 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Sat, 11 Oct 2008 21:39:21 +0000 (23:39 +0200)
include/isl_set.h
isl_map.c

index 6c1c4d1..1a322a3 100644 (file)
@@ -96,6 +96,9 @@ struct isl_set *isl_set_read_from_file(struct isl_ctx *ctx,
                FILE *input, unsigned nparam, unsigned input_format);
 struct isl_basic_set *isl_basic_set_from_underlying_set(
        struct isl_basic_set *bset, struct isl_basic_set *like);
+struct isl_set *isl_set_from_underlying_set(
+       struct isl_set *set, struct isl_basic_set *like);
+struct isl_set *isl_set_to_underlying_set(struct isl_set *set);
 
 int isl_basic_set_is_equal(
                struct isl_basic_set *bset1, struct isl_basic_set *bset2);
index 5bc1ad2..2dae3f1 100644 (file)
--- a/isl_map.c
+++ b/isl_map.c
@@ -2094,6 +2094,38 @@ struct isl_basic_set *isl_basic_set_from_underlying_set(
                isl_basic_map_overlying_set(bset, (struct isl_basic_map *)like);
 }
 
+struct isl_set *isl_set_from_underlying_set(
+       struct isl_set *set, struct isl_basic_set *like)
+{
+       int i;
+
+       if (!set || !like)
+               goto error;
+       isl_assert(set->ctx, set->dim == like->nparam + like->dim + like->n_div,
+                   goto error);
+       if (like->nparam == 0 && like->n_div == 0) {
+               isl_basic_set_free(like);
+               return set;
+       }
+       set = isl_set_cow(set);
+       if (!set)
+               goto error;
+       for (i = 0; i < set->n; ++i) {
+               set->p[i] = isl_basic_set_from_underlying_set(set->p[i],
+                                                     isl_basic_set_copy(like));
+               if (!set->p[i])
+                       goto error;
+       }
+       set->nparam = like->nparam;
+       set->dim = like->dim;
+       isl_basic_set_free(like);
+       return set;
+error:
+       isl_basic_set_free(like);
+       isl_set_free(set);
+       return NULL;
+}
+
 struct isl_set *isl_map_underlying_set(struct isl_map *map)
 {
        int i;
@@ -2121,6 +2153,11 @@ error:
        return NULL;
 }
 
+struct isl_set *isl_set_to_underlying_set(struct isl_set *set)
+{
+       return (struct isl_set *)isl_map_underlying_set((struct isl_map *)set);
+}
+
 struct isl_basic_set *isl_basic_map_domain(struct isl_basic_map *bmap)
 {
        struct isl_basic_set *domain;