add isl_{set,map}_grow
authorSven Verdoolaege <skimo@kotnet.org>
Fri, 24 Jul 2009 10:22:14 +0000 (12:22 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Fri, 7 Aug 2009 09:20:23 +0000 (11:20 +0200)
isl_map.c
isl_map_private.h

index b38030c..87e46a1 100644 (file)
--- a/isl_map.c
+++ b/isl_map.c
@@ -1434,6 +1434,42 @@ struct isl_set *isl_set_alloc(struct isl_ctx *ctx,
        return set;
 }
 
+/* Make sure "map" has room for at least "n" more basic maps.
+ */
+struct isl_map *isl_map_grow(struct isl_map *map, int n)
+{
+       int i;
+       struct isl_map *grown = NULL;
+
+       if (!map)
+               return NULL;
+       isl_assert(map->ctx, n >= 0, goto error);
+       if (map->n + n <= map->size)
+               return map;
+       grown = isl_map_alloc_dim(isl_map_get_dim(map), map->n + n, map->flags);
+       if (!grown)
+               goto error;
+       for (i = 0; i < map->n; ++i) {
+               grown->p[i] = isl_basic_map_copy(map->p[i]);
+               if (!grown->p[i])
+                       goto error;
+               grown->n++;
+       }
+       isl_map_free(map);
+       return grown;
+error:
+       isl_map_free(grown);
+       isl_map_free(map);
+       return NULL;
+}
+
+/* Make sure "set" has room for at least "n" more basic sets.
+ */
+struct isl_set *isl_set_grow(struct isl_set *set, int n)
+{
+       return (struct isl_set *)isl_map_grow((struct isl_map *)set, n);
+}
+
 struct isl_set *isl_set_dup(struct isl_set *set)
 {
        int i;
index 8ce7533..0594d1e 100644 (file)
@@ -20,6 +20,9 @@ struct isl_basic_set *isl_basic_set_extend_dim(struct isl_basic_set *base,
 struct isl_basic_set *isl_basic_set_add_constraints(struct isl_basic_set *bset1,
                struct isl_basic_set *bset2, unsigned pos);
 
+struct isl_map *isl_map_grow(struct isl_map *map, int n);
+struct isl_set *isl_set_grow(struct isl_set *set, int n);
+
 int isl_basic_set_contains(struct isl_basic_set *bset, struct isl_vec *vec);
 
 struct isl_basic_set *isl_basic_set_alloc_dim(struct isl_dim *dim,