add isl_map_lex_lt and isl_map_lex_gt
authorSven Verdoolaege <sven@cs.kuleuven.be>
Tue, 8 Sep 2009 08:38:03 +0000 (09:38 +0100)
committerSven Verdoolaege <skimo@purples.(none)>
Wed, 9 Sep 2009 18:33:47 +0000 (20:33 +0200)
doc/user.pod
include/isl_map.h
isl_map.c

index b476657..76bd4ca 100644 (file)
@@ -519,6 +519,18 @@ C<isl> has functions for creating some standard sets and relations.
 These functions take a dimension specification for a B<set>
 and return an identity relation between two such sets.
 
+=item * Lexicographic order
+
+       __isl_give isl_map *isl_map_lex_lt(
+               __isl_take isl_dim *set_dim);
+       __isl_give isl_map *isl_map_lex_gt(
+               __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>).
+
 =back
 
 A basic set or relation can be converted to a set or relation
index a107146..e7a9368 100644 (file)
@@ -225,6 +225,8 @@ struct isl_map *isl_map_add(struct isl_map *map, struct isl_basic_map *bmap);
 __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_gt(__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 d1096b6..bb3e1a8 100644 (file)
--- a/isl_map.c
+++ b/isl_map.c
@@ -2318,6 +2318,54 @@ 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)
+{
+       struct isl_map *map;
+       unsigned dim;
+       int i;
+
+       if (!dims)
+               return NULL;
+       dim = dims->n_out;
+       map = isl_map_alloc_dim(isl_dim_copy(dims), dim, ISL_MAP_DISJOINT);
+
+       for (i = 0; i < dim; ++i)
+               map = isl_map_add(map,
+                                 isl_basic_map_less_at(isl_dim_copy(dims), i));
+
+       isl_dim_free(dims);
+       return map;
+}
+
+__isl_give isl_map *isl_map_lex_lt(__isl_take isl_dim *set_dim)
+{
+       return map_lex_lt(isl_dim_map(set_dim));
+}
+
+static __isl_give isl_map *map_lex_gt(__isl_take isl_dim *dims)
+{
+       struct isl_map *map;
+       unsigned dim;
+       int i;
+
+       if (!dims)
+               return NULL;
+       dim = dims->n_out;
+       map = isl_map_alloc_dim(isl_dim_copy(dims), dim, ISL_MAP_DISJOINT);
+
+       for (i = 0; i < dim; ++i)
+               map = isl_map_add(map,
+                                 isl_basic_map_more_at(isl_dim_copy(dims), i));
+
+       isl_dim_free(dims);
+       return map;
+}
+
+__isl_give isl_map *isl_map_lex_gt(__isl_take isl_dim *set_dim)
+{
+       return map_lex_gt(isl_dim_map(set_dim));
+}
+
 struct isl_basic_map *isl_basic_map_from_basic_set(
                struct isl_basic_set *bset, struct isl_dim *dim)
 {