extract out shared isl_qpolynomial_{take,restore}_poly
[isl.git] / isl_stream_read_with_params_templ.c
blob59111c6a08c8414193a62f2748d8d1af6f755585
1 /*
2 * Copyright 2011 Sven Verdoolaege
4 * Use of this software is governed by the MIT license
6 * Written by Sven Verdoolaege.
7 */
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)
14 /* Read an object of type "TYPE" from "s".
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.
20 __isl_give TYPE *FN(isl_stream_read,TYPE_BASE)(__isl_keep isl_stream *s)
22 struct vars *v;
23 isl_set *dom;
24 TYPE *obj = NULL;
26 v = vars_new(s->ctx);
27 if (!v)
28 return NULL;
30 dom = isl_set_universe(isl_space_params_alloc(s->ctx, 0));
31 if (next_is_tuple(s)) {
32 dom = read_map_tuple(s, dom, isl_dim_param, v, 1, 0);
33 if (isl_stream_eat(s, ISL_TOKEN_TO))
34 goto error;
36 if (isl_stream_eat(s, '{'))
37 goto error;
39 obj = FN(isl_stream_read_with_params,TYPE_BASE)(s, dom, v);
41 if (isl_stream_eat(s, '}'))
42 goto error;
44 vars_free(v);
45 isl_set_free(dom);
46 return obj;
47 error:
48 vars_free(v);
49 isl_set_free(dom);
50 FN(TYPE,free)(obj);
51 return NULL;