xref: /netbsd-src/external/mit/isl/dist/isl_stream_read_with_params_templ.c (revision 5971e316fdea024efff6be8f03536623db06833e)
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  */
FN(isl_stream_read,TYPE_BASE)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(s->ctx);
27 	if (!v)
28 		return NULL;
29 
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, 0);
33 		if (isl_stream_eat(s, ISL_TOKEN_TO))
34 			goto error;
35 	}
36 	if (isl_stream_eat(s, '{'))
37 		goto error;
38 
39 	obj = FN(isl_stream_read_with_params,TYPE_BASE)(s, dom, v);
40 
41 	if (isl_stream_eat(s, '}'))
42 		goto error;
43 
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;
52 }
53