add isl_union_set_lex_[lg][et]_union_set
authorSven Verdoolaege <skimo@kotnet.org>
Wed, 8 Sep 2010 18:18:10 +0000 (20:18 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Fri, 10 Sep 2010 11:18:54 +0000 (13:18 +0200)
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
include/isl_map.h
include/isl_set.h
include/isl_union_map.h
include/isl_union_set.h
isl_map.c
isl_union_map.c

index dce1f20..d26176f 100644 (file)
@@ -423,6 +423,15 @@ __isl_give isl_map *isl_map_reaching_path_lengths(__isl_take isl_map *map,
 __isl_give isl_map *isl_map_transitive_closure(__isl_take isl_map *map,
        int *exact);
 
+__isl_give isl_map *isl_map_lex_le_map(__isl_take isl_map *map1,
+       __isl_take isl_map *map2);
+__isl_give isl_map *isl_map_lex_lt_map(__isl_take isl_map *map1,
+       __isl_take isl_map *map2);
+__isl_give isl_map *isl_map_lex_ge_map(__isl_take isl_map *map1,
+       __isl_take isl_map *map2);
+__isl_give isl_map *isl_map_lex_gt_map(__isl_take isl_map *map1,
+       __isl_take isl_map *map2);
+
 #if defined(__cplusplus)
 }
 #endif
index 6dccd74..f49b791 100644 (file)
@@ -350,6 +350,15 @@ __isl_give isl_set *isl_set_box_from_points(__isl_take isl_point *pnt1,
 
 __isl_give isl_set *isl_set_lift(__isl_take isl_set *set);
 
+__isl_give isl_map *isl_set_lex_le_set(__isl_take isl_set *set1,
+       __isl_take isl_set *set2);
+__isl_give isl_map *isl_set_lex_lt_set(__isl_take isl_set *set1,
+       __isl_take isl_set *set2);
+__isl_give isl_map *isl_set_lex_ge_set(__isl_take isl_set *set1,
+       __isl_take isl_set *set2);
+__isl_give isl_map *isl_set_lex_gt_set(__isl_take isl_set *set1,
+       __isl_take isl_set *set2);
+
 int isl_set_size(__isl_keep isl_set *set);
 
 #if defined(__cplusplus)
index 497a88b..d62f3f1 100644 (file)
@@ -77,6 +77,15 @@ __isl_give isl_basic_map *isl_union_map_sample(__isl_take isl_union_map *umap);
 __isl_give isl_union_map *isl_union_map_transitive_closure(
        __isl_take isl_union_map *umap, int *exact);
 
+__isl_give isl_union_map *isl_union_map_lex_lt_union_map(
+       __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2);
+__isl_give isl_union_map *isl_union_map_lex_le_union_map(
+       __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2);
+__isl_give isl_union_map *isl_union_map_lex_gt_union_map(
+       __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2);
+__isl_give isl_union_map *isl_union_map_lex_ge_union_map(
+       __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2);
+
 __isl_give isl_printer *isl_printer_print_union_map(__isl_take isl_printer *p,
        __isl_keep isl_union_map *umap);
 
index 092c8e7..4cb2b58 100644 (file)
@@ -50,6 +50,15 @@ int isl_union_set_foreach_point(__isl_keep isl_union_set *uset,
 
 __isl_give isl_basic_set *isl_union_set_sample(__isl_take isl_union_set *uset);
 
+__isl_give isl_union_set *isl_union_set_lex_lt_union_set(
+       __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2);
+__isl_give isl_union_set *isl_union_set_lex_le_union_set(
+       __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2);
+__isl_give isl_union_set *isl_union_set_lex_gt_union_set(
+       __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2);
+__isl_give isl_union_set *isl_union_set_lex_ge_union_set(
+       __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2);
+
 __isl_give isl_printer *isl_printer_print_union_set(__isl_take isl_printer *p,
        __isl_keep isl_union_set *uset);
 
index 6b934f6..f218f06 100644 (file)
--- a/isl_map.c
+++ b/isl_map.c
@@ -3201,6 +3201,86 @@ __isl_give isl_map *isl_map_lex_ge(__isl_take isl_dim *set_dim)
        return map_lex_gte(isl_dim_map(set_dim), 1);
 }
 
+__isl_give isl_map *isl_set_lex_le_set(__isl_take isl_set *set1,
+       __isl_take isl_set *set2)
+{
+       isl_map *map;
+       map = isl_map_lex_le(isl_set_get_dim(set1));
+       map = isl_map_intersect_domain(map, set1);
+       map = isl_map_intersect_range(map, set2);
+       return map;
+}
+
+__isl_give isl_map *isl_set_lex_lt_set(__isl_take isl_set *set1,
+       __isl_take isl_set *set2)
+{
+       isl_map *map;
+       map = isl_map_lex_lt(isl_set_get_dim(set1));
+       map = isl_map_intersect_domain(map, set1);
+       map = isl_map_intersect_range(map, set2);
+       return map;
+}
+
+__isl_give isl_map *isl_set_lex_ge_set(__isl_take isl_set *set1,
+       __isl_take isl_set *set2)
+{
+       isl_map *map;
+       map = isl_map_lex_ge(isl_set_get_dim(set1));
+       map = isl_map_intersect_domain(map, set1);
+       map = isl_map_intersect_range(map, set2);
+       return map;
+}
+
+__isl_give isl_map *isl_set_lex_gt_set(__isl_take isl_set *set1,
+       __isl_take isl_set *set2)
+{
+       isl_map *map;
+       map = isl_map_lex_gt(isl_set_get_dim(set1));
+       map = isl_map_intersect_domain(map, set1);
+       map = isl_map_intersect_range(map, set2);
+       return map;
+}
+
+__isl_give isl_map *isl_map_lex_le_map(__isl_take isl_map *map1,
+       __isl_take isl_map *map2)
+{
+       isl_map *map;
+       map = isl_map_lex_le(isl_dim_range(isl_map_get_dim(map1)));
+       map = isl_map_apply_domain(map, isl_map_reverse(map1));
+       map = isl_map_apply_range(map, isl_map_reverse(map2));
+       return map;
+}
+
+__isl_give isl_map *isl_map_lex_lt_map(__isl_take isl_map *map1,
+       __isl_take isl_map *map2)
+{
+       isl_map *map;
+       map = isl_map_lex_lt(isl_dim_range(isl_map_get_dim(map1)));
+       map = isl_map_apply_domain(map, isl_map_reverse(map1));
+       map = isl_map_apply_range(map, isl_map_reverse(map2));
+       return map;
+}
+
+__isl_give isl_map *isl_map_lex_ge_map(__isl_take isl_map *map1,
+       __isl_take isl_map *map2)
+{
+       isl_map *map;
+       map = isl_map_lex_ge(isl_dim_range(isl_map_get_dim(map1)));
+       map = isl_map_apply_domain(map, isl_map_reverse(map1));
+       map = isl_map_apply_range(map, isl_map_reverse(map2));
+       return map;
+}
+
+__isl_give isl_map *isl_map_lex_gt_map(__isl_take isl_map *map1,
+       __isl_take isl_map *map2)
+{
+       isl_map *map;
+       map = isl_map_lex_gt(isl_dim_range(isl_map_get_dim(map1)));
+       map = isl_map_apply_domain(map, isl_map_reverse(map1));
+       map = isl_map_apply_range(map, isl_map_reverse(map2));
+       return map;
+}
+
 struct isl_basic_map *isl_basic_map_from_basic_set(
                struct isl_basic_set *bset, struct isl_dim *dim)
 {
index f97063b..747594e 100644 (file)
@@ -545,6 +545,54 @@ __isl_give isl_union_set *isl_union_set_gist(__isl_take isl_union_set *uset,
        return isl_union_map_gist(uset, context);
 }
 
+static __isl_give isl_map *lex_le_set(__isl_take isl_map *set1,
+       __isl_take isl_map *set2)
+{
+       return isl_set_lex_le_set((isl_set *)set1, (isl_set *)set2);
+}
+
+static __isl_give isl_map *lex_lt_set(__isl_take isl_map *set1,
+       __isl_take isl_map *set2)
+{
+       return isl_set_lex_lt_set((isl_set *)set1, (isl_set *)set2);
+}
+
+__isl_give isl_union_set *isl_union_set_lex_lt_union_set(
+       __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2)
+{
+       return match_bin_op(uset1, uset2, &lex_lt_set);
+}
+
+__isl_give isl_union_set *isl_union_set_lex_le_union_set(
+       __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2)
+{
+       return match_bin_op(uset1, uset2, &lex_le_set);
+}
+
+__isl_give isl_union_set *isl_union_set_lex_gt_union_set(
+       __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2)
+{
+       return isl_union_set_lex_lt_union_set(uset2, uset1);
+}
+
+__isl_give isl_union_set *isl_union_set_lex_ge_union_set(
+       __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2)
+{
+       return isl_union_set_lex_le_union_set(uset2, uset1);
+}
+
+__isl_give isl_union_map *isl_union_map_lex_gt_union_map(
+       __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2)
+{
+       return isl_union_map_lex_lt_union_map(umap2, umap1);
+}
+
+__isl_give isl_union_map *isl_union_map_lex_ge_union_map(
+       __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2)
+{
+       return isl_union_map_lex_le_union_map(umap2, umap1);
+}
+
 static int intersect_domain_entry(void **entry, void *user)
 {
        struct isl_union_map_gen_bin_data *data = user;
@@ -674,6 +722,50 @@ __isl_give isl_union_set *isl_union_set_apply(
        return isl_union_map_apply_range(uset, umap);
 }
 
+static int map_lex_lt_entry(void **entry, void *user)
+{
+       struct isl_union_map_bin_data *data = user;
+       isl_map *map2 = *entry;
+
+       if (!isl_dim_tuple_match(data->map->dim, isl_dim_out,
+                                map2->dim, isl_dim_out))
+               return 0;
+
+       map2 = isl_map_lex_lt_map(isl_map_copy(data->map), isl_map_copy(map2));
+
+       data->res = isl_union_map_add_map(data->res, map2);
+
+       return 0;
+}
+
+__isl_give isl_union_map *isl_union_map_lex_lt_union_map(
+       __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2)
+{
+       return bin_op(umap1, umap2, &map_lex_lt_entry);
+}
+
+static int map_lex_le_entry(void **entry, void *user)
+{
+       struct isl_union_map_bin_data *data = user;
+       isl_map *map2 = *entry;
+
+       if (!isl_dim_tuple_match(data->map->dim, isl_dim_out,
+                                map2->dim, isl_dim_out))
+               return 0;
+
+       map2 = isl_map_lex_le_map(isl_map_copy(data->map), isl_map_copy(map2));
+
+       data->res = isl_union_map_add_map(data->res, map2);
+
+       return 0;
+}
+
+__isl_give isl_union_map *isl_union_map_lex_le_union_map(
+       __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2)
+{
+       return bin_op(umap1, umap2, &map_lex_le_entry);
+}
+
 static int product_entry(void **entry, void *user)
 {
        struct isl_union_map_bin_data *data = user;