From 9c4cd74446576b4f551dadc7ea7ed4ceff74bf9a Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Sun, 25 Apr 2010 14:09:16 +0200 Subject: [PATCH] iscc: add application operations --- doc/isl.tex | 4 ++++ iscc.c | 29 +++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/doc/isl.tex b/doc/isl.tex index 9c7068d..ffe8fec 100644 --- a/doc/isl.tex +++ b/doc/isl.tex @@ -188,8 +188,12 @@ $q_2$ := $q_1$ \ai{$*$} $s$ & intersect domain of $q_1$ with $s$ \\ $f_2$ := $f_1$ \ai{$*$} $s$ & intersect domain of $f_1$ with $s$ \\ +$s_2$ := $m$($s_1$) & apply map $m$ to set $s_1$ +\\ $m_3$ := $m_1$ \ai[\tt]{.} $m_2$ & join of $m_1$ and $m_2$ \\ +$m_3$ := $m_2$($m_1)$ & join of $m_1$ and $m_2$ +\\ $m$ := $s_1$ \ai[\tt]{->} $s_2$ & universal map with domain $s_1$ and range $s_2$ \\ diff --git a/iscc.c b/iscc.c index 99848b7..e374663 100644 --- a/iscc.c +++ b/iscc.c @@ -652,6 +652,33 @@ error: return obj; } +static struct isl_obj apply(struct isl_stream *s, __isl_take isl_map *map, + struct isl_hash_table *table) +{ + struct isl_obj obj; + + obj = read_expr(s, table); + isl_assert(s->ctx, obj.type == isl_obj_set || obj.type == isl_obj_map, + goto error); + + if (obj.type == isl_obj_set) { + obj.v = isl_set_apply(obj.v, map); + } else + obj.v = isl_map_apply_range(obj.v, map); + if (!obj.v) + goto error; + + if (isl_stream_eat(s, ')')) + goto error; + + return obj; +error: + free_obj(obj); + obj.type = isl_obj_none; + obj.v = NULL; + return obj; +} + static struct isl_obj power(struct isl_stream *s, struct isl_obj obj) { struct isl_token *tok; @@ -749,6 +776,8 @@ static struct isl_obj read_obj(struct isl_stream *s, obj = power(s, obj); else if (obj.type == isl_obj_list && isl_stream_eat_if_available(s, '[')) obj = obj_at_index(s, obj); + else if (obj.type == isl_obj_map && isl_stream_eat_if_available(s, '(')) + obj = apply(s, obj.v, table); return obj; error: -- 2.11.4.GIT