/* * Copyright 2011 Sven Verdoolaege * * Use of this software is governed by the MIT license * * Written by Sven Verdoolaege */ #define xFN(TYPE,NAME) TYPE ## _ ## NAME #define FN(TYPE,NAME) xFN(TYPE,NAME) /* Align the parameters of the two arguments of type ARG1 and ARG2 * (if needed). */ isl_stat FN(FN(ARG1,align_params),SUFFIX)(__isl_keep ARG1 **obj1, __isl_keep ARG2 **obj2) { isl_space *space1, *space2; isl_bool equal_params; space1 = FN(ARG1,peek_space)(*obj1); space2 = FN(ARG2,peek_space)(*obj2); equal_params = isl_space_has_equal_params(space1, space2); if (equal_params < 0) goto error; if (equal_params) return isl_stat_ok; if (FN(ARG1,check_named_params)(*obj1) < 0 || FN(ARG2,check_named_params)(*obj2) < 0) goto error; *obj1 = FN(ARG1,align_params)(*obj1, FN(ARG2,get_space)(*obj2)); *obj2 = FN(ARG2,align_params)(*obj2, FN(ARG1,get_space)(*obj1)); if (!*obj1 || !*obj2) goto error; return isl_stat_ok; error: *obj1 = FN(ARG1,free)(*obj1); *obj2 = FN(ARG2,free)(*obj2); return isl_stat_error; }