add private isl_basic_map_swap_vars
authorSven Verdoolaege <skimo@kotnet.org>
Wed, 9 Mar 2011 09:33:55 +0000 (10:33 +0100)
committerSven Verdoolaege <skimo@kotnet.org>
Sat, 12 Mar 2011 09:06:22 +0000 (10:06 +0100)
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
include/isl/set.h
isl_map.c

index 169b0a2..162610d 100644 (file)
@@ -75,8 +75,6 @@ struct isl_basic_set *isl_basic_set_interval(struct isl_ctx *ctx,
 struct isl_basic_set *isl_basic_set_positive_orthant(struct isl_dim *dims);
 void isl_basic_set_print_internal(__isl_keep isl_basic_set *bset,
                                FILE *out, int indent);
-struct isl_basic_set *isl_basic_set_swap_vars(
-               struct isl_basic_set *bset, unsigned n);
 __isl_give isl_basic_set *isl_basic_set_intersect(
                __isl_take isl_basic_set *bset1,
                __isl_take isl_basic_set *bset2);
@@ -248,7 +246,6 @@ __isl_give isl_set *isl_set_split_dims(__isl_take isl_set *set,
        enum isl_dim_type type, unsigned first, unsigned n);
 
 void isl_set_print_internal(__isl_keep isl_set *set, FILE *out, int indent);
-struct isl_set *isl_set_swap_vars(struct isl_set *set, unsigned n);
 int isl_set_fast_is_empty(__isl_keep isl_set *set);
 int isl_set_fast_is_universe(__isl_keep isl_set *set);
 int isl_set_is_empty(__isl_keep isl_set *set);
index ccceeb1..e9a6f88 100644 (file)
--- a/isl_map.c
+++ b/isl_map.c
@@ -1258,55 +1258,69 @@ static void swap_vars(struct isl_blk blk, isl_int *a,
        isl_seq_cpy(a, blk.data, b_len+a_len);
 }
 
-struct isl_basic_set *isl_basic_set_swap_vars(
-               struct isl_basic_set *bset, unsigned n)
+static __isl_give isl_basic_map *isl_basic_map_swap_vars(
+       __isl_take isl_basic_map *bmap, unsigned pos, unsigned n1, unsigned n2)
 {
        int i;
        struct isl_blk blk;
-       unsigned dim;
-       unsigned nparam;
 
-       if (!bset)
+       if (!bmap)
                goto error;
 
-       nparam = isl_basic_set_n_param(bset);
-       dim = isl_basic_set_n_dim(bset);
-       isl_assert(bset->ctx, n <= dim, goto error);
+       isl_assert(bmap->ctx,
+               pos + n1 + n2 <= 1 + isl_basic_map_total_dim(bmap), goto error);
 
-       if (n == dim)
-               return bset;
+       if (n1 == 0 || n2 == 0)
+               return bmap;
 
-       bset = isl_basic_set_cow(bset);
-       if (!bset)
+       bmap = isl_basic_map_cow(bmap);
+       if (!bmap)
                return NULL;
 
-       blk = isl_blk_alloc(bset->ctx, dim);
+       blk = isl_blk_alloc(bmap->ctx, n1 + n2);
        if (isl_blk_is_error(blk))
                goto error;
 
-       for (i = 0; i < bset->n_eq; ++i)
+       for (i = 0; i < bmap->n_eq; ++i)
                swap_vars(blk,
-                         bset->eq[i]+1+nparam, n, dim - n);
+                         bmap->eq[i] + pos, n1, n2);
 
-       for (i = 0; i < bset->n_ineq; ++i)
+       for (i = 0; i < bmap->n_ineq; ++i)
                swap_vars(blk,
-                         bset->ineq[i]+1+nparam, n, dim - n);
+                         bmap->ineq[i] + pos, n1, n2);
 
-       for (i = 0; i < bset->n_div; ++i)
+       for (i = 0; i < bmap->n_div; ++i)
                swap_vars(blk,
-                         bset->div[i]+1+1+nparam, n, dim - n);
+                         bmap->div[i]+1 + pos, n1, n2);
 
-       isl_blk_free(bset->ctx, blk);
+       isl_blk_free(bmap->ctx, blk);
 
-       ISL_F_CLR(bset, ISL_BASIC_SET_NORMALIZED);
-       bset = isl_basic_set_gauss(bset, NULL);
-       return isl_basic_set_finalize(bset);
+       ISL_F_CLR(bmap, ISL_BASIC_SET_NORMALIZED);
+       bmap = isl_basic_map_gauss(bmap, NULL);
+       return isl_basic_map_finalize(bmap);
+error:
+       isl_basic_map_free(bmap);
+       return NULL;
+}
+
+static __isl_give isl_basic_set *isl_basic_set_swap_vars(
+       __isl_take isl_basic_set *bset, unsigned n)
+{
+       unsigned dim;
+       unsigned nparam;
+
+       nparam = isl_basic_set_n_param(bset);
+       dim = isl_basic_set_n_dim(bset);
+       isl_assert(bset->ctx, n <= dim, goto error);
+
+       return isl_basic_map_swap_vars(bset, 1 + nparam, n, dim - n);
 error:
        isl_basic_set_free(bset);
        return NULL;
 }
 
-struct isl_set *isl_set_swap_vars(struct isl_set *set, unsigned n)
+static __isl_give isl_set *isl_set_swap_vars(__isl_take isl_set *set,
+       unsigned n)
 {
        int i;
        set = isl_set_cow(set);