1 | /* |
2 | * Copyright 2011 Sven Verdoolaege |
3 | * |
4 | * Use of this software is governed by the MIT license |
5 | * |
6 | * Written by Sven Verdoolaege. |
7 | */ |
8 | |
9 | #define xCAT(A,B) A ## B |
10 | #define CAT(A,B) xCAT(A,B) |
11 | #undef TYPE |
12 | #define TYPE CAT(isl_,TYPE_BASE) |
13 | |
14 | /* Read an object of type "TYPE" from "s". |
15 | * |
16 | * In particular, first read the parameters and the opening brace. |
17 | * Then read the body that is specific to the object type. |
18 | * Finally, read the closing brace. |
19 | */ |
20 | __isl_give TYPE *FN(isl_stream_read,TYPE_BASE)(__isl_keep isl_stream *s) |
21 | { |
22 | struct vars *v; |
23 | isl_set *dom; |
24 | TYPE *obj = NULL; |
25 | |
26 | v = vars_new(ctx: s->ctx); |
27 | if (!v) |
28 | return NULL; |
29 | |
30 | dom = isl_set_universe(space: isl_space_params_alloc(ctx: s->ctx, nparam: 0)); |
31 | if (next_is_tuple(s)) { |
32 | dom = read_map_tuple(s, map: dom, type: isl_dim_param, v, rational: 1, comma: 0); |
33 | if (isl_stream_eat(s, type: ISL_TOKEN_TO)) |
34 | goto error; |
35 | } |
36 | if (isl_stream_eat(s, type: '{')) |
37 | goto error; |
38 | |
39 | obj = FN(isl_stream_read_with_params,TYPE_BASE)(s, dom, v); |
40 | |
41 | if (isl_stream_eat(s, type: '}')) |
42 | goto error; |
43 | |
44 | vars_free(v); |
45 | isl_set_free(set: dom); |
46 | return obj; |
47 | error: |
48 | vars_free(v); |
49 | isl_set_free(set: dom); |
50 | FN(TYPE,free)(pwaff: obj); |
51 | return NULL; |
52 | } |
53 | |