53 lines · c
1/*2 * Copyright 2011 Sven Verdoolaege3 *4 * Use of this software is governed by the MIT license5 *6 * Written by Sven Verdoolaege.7 */8 9#define xCAT(A,B) A ## B10#define CAT(A,B) xCAT(A,B)11#undef TYPE12#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(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, 1, 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;47error:48 vars_free(v);49 isl_set_free(dom);50 FN(TYPE,free)(obj);51 return NULL;52}53