add isl_map_lex_le and isl_map_lex_ge
authorSven Verdoolaege <skimo@purples.(none)>
Wed, 16 Sep 2009 09:06:24 +0000 (11:06 +0200)
committerSven Verdoolaege <skimo@purples.(none)>
Wed, 16 Sep 2009 09:06:24 +0000 (11:06 +0200)
doc/user.pod
include/isl_map.h
isl_map.c

index 76bd4ca..b515bbf 100644 (file)
@@ -523,13 +523,18 @@ and return an identity relation between two such sets.
 
        __isl_give isl_map *isl_map_lex_lt(
                __isl_take isl_dim *set_dim);
+       __isl_give isl_map *isl_map_lex_le(
+               __isl_take isl_dim *set_dim);
        __isl_give isl_map *isl_map_lex_gt(
                __isl_take isl_dim *set_dim);
+       __isl_give isl_map *isl_map_lex_ge(
+               __isl_take isl_dim *set_dim);
 
 These functions take a dimension specification for a B<set>
 and return maps that map elements of a set of the given dimension
 to elements that are lexicograhically less
-(C<isl_map_lex_lt>) or lexicograhically greater (C<isl_map_lex_gt>).
+(C<isl_map_lex_lt>), less or equal (C<isl_map_lex_le>),
+greater (C<isl_map_lex_gt>) or greater or equal (C<isl_map_lex_ge>).
 
 =back
 
index d8e396a..062bf4d 100644 (file)
@@ -229,7 +229,9 @@ __isl_give isl_map *isl_map_identity(__isl_take isl_dim *set_dim);
 struct isl_map *isl_map_identity_like(struct isl_map *model);
 struct isl_map *isl_map_identity_like_basic_map(struct isl_basic_map *model);
 __isl_give isl_map *isl_map_lex_lt(__isl_take isl_dim *set_dim);
+__isl_give isl_map *isl_map_lex_le(__isl_take isl_dim *set_dim);
 __isl_give isl_map *isl_map_lex_gt(__isl_take isl_dim *set_dim);
+__isl_give isl_map *isl_map_lex_ge(__isl_take isl_dim *set_dim);
 struct isl_map *isl_map_finalize(struct isl_map *map);
 void isl_map_free(__isl_take isl_map *map);
 __isl_give isl_map *isl_map_copy(__isl_keep isl_map *map);
index 0562220..02f4a24 100644 (file)
--- a/isl_map.c
+++ b/isl_map.c
@@ -2318,7 +2318,7 @@ struct isl_basic_map *isl_basic_map_more_at(struct isl_dim *dim, unsigned pos)
        return isl_basic_map_finalize(bmap);
 }
 
-static __isl_give isl_map *map_lex_lt(__isl_take isl_dim *dims)
+static __isl_give isl_map *map_lex_lte(__isl_take isl_dim *dims, int equal)
 {
        struct isl_map *map;
        unsigned dim;
@@ -2327,11 +2327,14 @@ static __isl_give isl_map *map_lex_lt(__isl_take isl_dim *dims)
        if (!dims)
                return NULL;
        dim = dims->n_out;
-       map = isl_map_alloc_dim(isl_dim_copy(dims), dim, ISL_MAP_DISJOINT);
+       map = isl_map_alloc_dim(isl_dim_copy(dims), dim + equal, ISL_MAP_DISJOINT);
 
        for (i = 0; i < dim; ++i)
                map = isl_map_add(map,
                                  isl_basic_map_less_at(isl_dim_copy(dims), i));
+       if (equal)
+               map = isl_map_add(map,
+                                 isl_basic_map_equal(isl_dim_copy(dims), dim));
 
        isl_dim_free(dims);
        return map;
@@ -2339,10 +2342,15 @@ static __isl_give isl_map *map_lex_lt(__isl_take isl_dim *dims)
 
 __isl_give isl_map *isl_map_lex_lt(__isl_take isl_dim *set_dim)
 {
-       return map_lex_lt(isl_dim_map(set_dim));
+       return map_lex_lte(isl_dim_map(set_dim), 0);
+}
+
+__isl_give isl_map *isl_map_lex_le(__isl_take isl_dim *set_dim)
+{
+       return map_lex_lte(isl_dim_map(set_dim), 1);
 }
 
-static __isl_give isl_map *map_lex_gt(__isl_take isl_dim *dims)
+static __isl_give isl_map *map_lex_gte(__isl_take isl_dim *dims, int equal)
 {
        struct isl_map *map;
        unsigned dim;
@@ -2351,11 +2359,14 @@ static __isl_give isl_map *map_lex_gt(__isl_take isl_dim *dims)
        if (!dims)
                return NULL;
        dim = dims->n_out;
-       map = isl_map_alloc_dim(isl_dim_copy(dims), dim, ISL_MAP_DISJOINT);
+       map = isl_map_alloc_dim(isl_dim_copy(dims), dim + equal, ISL_MAP_DISJOINT);
 
        for (i = 0; i < dim; ++i)
                map = isl_map_add(map,
                                  isl_basic_map_more_at(isl_dim_copy(dims), i));
+       if (equal)
+               map = isl_map_add(map,
+                                 isl_basic_map_equal(isl_dim_copy(dims), dim));
 
        isl_dim_free(dims);
        return map;
@@ -2363,7 +2374,12 @@ static __isl_give isl_map *map_lex_gt(__isl_take isl_dim *dims)
 
 __isl_give isl_map *isl_map_lex_gt(__isl_take isl_dim *set_dim)
 {
-       return map_lex_gt(isl_dim_map(set_dim));
+       return map_lex_gte(isl_dim_map(set_dim), 0);
+}
+
+__isl_give isl_map *isl_map_lex_ge(__isl_take isl_dim *set_dim)
+{
+       return map_lex_gte(isl_dim_map(set_dim), 1);
 }
 
 struct isl_basic_map *isl_basic_map_from_basic_set(