add isl_union_pw_multi_aff_read_from_str
authorSven Verdoolaege <skimo@kotnet.org>
Sat, 26 Jan 2013 17:40:59 +0000 (18:40 +0100)
committerSven Verdoolaege <skimo@kotnet.org>
Sun, 10 Feb 2013 20:04:43 +0000 (21:04 +0100)
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
doc/user.pod
include/isl/aff.h
isl_input.c

index 999e2f4..a183d3f 100644 (file)
@@ -4008,6 +4008,9 @@ An expression can be read from input using
                isl_ctx *ctx, const char *str);
        __isl_give isl_pw_multi_aff *isl_pw_multi_aff_read_from_str(
                isl_ctx *ctx, const char *str);
+       __isl_give isl_union_pw_multi_aff *
+       isl_union_pw_multi_aff_read_from_str(
+               isl_ctx *ctx, const char *str);
 
 An expression can be printed using
 
index 87d27bd..af8233f 100644 (file)
@@ -514,6 +514,9 @@ __isl_give isl_union_pw_multi_aff *isl_union_pw_multi_aff_from_union_set(
 __isl_give isl_union_pw_multi_aff *isl_union_pw_multi_aff_from_union_map(
        __isl_take isl_union_map *umap);
 
+__isl_give isl_union_pw_multi_aff *isl_union_pw_multi_aff_read_from_str(
+       isl_ctx *ctx, const char *str);
+
 __isl_give isl_multi_pw_aff *isl_multi_pw_aff_zero(__isl_take isl_space *space);
 __isl_give isl_multi_pw_aff *isl_multi_pw_aff_identity(
        __isl_take isl_space *space);
index bd3b774..ba3d8f2 100644 (file)
@@ -2751,6 +2751,47 @@ __isl_give isl_pw_multi_aff *isl_pw_multi_aff_read_from_str(isl_ctx *ctx,
        return pma;
 }
 
+/* Read an isl_union_pw_multi_aff from "s".
+ * We currently read a generic object and if it turns out to be a set or
+ * a map, we convert that to an isl_union_pw_multi_aff.
+ * It would be more efficient if we were to construct
+ * the isl_union_pw_multi_aff directly.
+ */
+__isl_give isl_union_pw_multi_aff *isl_stream_read_union_pw_multi_aff(
+       struct isl_stream *s)
+{
+       struct isl_obj obj;
+
+       obj = obj_read(s);
+       if (!obj.v)
+               return NULL;
+
+       if (obj.type == isl_obj_map || obj.type == isl_obj_set)
+               obj = to_union(s->ctx, obj);
+       if (obj.type == isl_obj_union_map)
+               return isl_union_pw_multi_aff_from_union_map(obj.v);
+       if (obj.type == isl_obj_union_set)
+               return isl_union_pw_multi_aff_from_union_set(obj.v);
+
+       obj.type->free(obj.v);
+       isl_die(s->ctx, isl_error_invalid, "unexpected object type",
+               return NULL);
+}
+
+/* Read an isl_union_pw_multi_aff from "str".
+ */
+__isl_give isl_union_pw_multi_aff *isl_union_pw_multi_aff_read_from_str(
+       isl_ctx *ctx, const char *str)
+{
+       isl_union_pw_multi_aff *upma;
+       struct isl_stream *s = isl_stream_new_str(ctx, str);
+       if (!s)
+               return NULL;
+       upma = isl_stream_read_union_pw_multi_aff(s);
+       isl_stream_free(s);
+       return upma;
+}
+
 /* Assuming "pa" represents a single affine expression defined on a universe
  * domain, extract this affine expression.
  */