/* * Copyright 2017 Sven Verdoolaege * * Use of this software is governed by the MIT license * * Written by Sven Verdoolaege */ #define xCAT(A,B) A ## B #define CAT(A,B) xCAT(A,B) #undef TYPE #define TYPE CAT(isl_,BASE) #define xBFN(BASE,NAME) isl_ ## BASE ## _ ## NAME #define BFN(BASE,NAME) xBFN(BASE,NAME) /* Return the minimal (maximal if "max" is set) value attained * by the given set dimension, * independently of the parameter values and of any other dimensions. * * Return infinity or negative infinity if the optimal value is unbounded and * NaN if "set" is empty. */ static __isl_give isl_val *BFN(BASE,dim_opt_val)(__isl_take TYPE *set, int max, int pos) { isl_local_space *ls; isl_aff *obj; isl_val *v; if (BFN(BASE,check_range)(set, isl_dim_set, pos, 1) < 0) goto error; ls = isl_local_space_from_space(BFN(BASE,get_space)(set)); obj = isl_aff_var_on_domain(ls, isl_dim_set, pos); v = BFN(BASE,opt_val)(set, max, obj); isl_aff_free(obj); BFN(BASE,free)(set); return v; error: BFN(BASE,free)(set); return NULL; }