////////////////////////////////////////////////////////////////////////////////// // If variable "var" already instantiated, returns -1. Otherwise, // instantiates the unification variable "var" to category "cat" and value "val". // Returns 1 or -1 in case of error, 0 otherwise. int unif_instantiate(unif_vars_T* UNIF_VARS,unichar* var, l_category_T* cat, unichar* val) { int i; int v; //Check if not yet instantiated. if (unif_instantiated(UNIF_VARS,var)) return -1; i = UNIF_VARS->no_vars; //Category UNIF_VARS->vars[i].cat = cat; //value v = is_valid_val(cat,val); if (v == -1) { error("Instantiation impossible: %S is an invalid value in category %S.\n",val,cat->name); return 1; } UNIF_VARS->vars[i].val = v; //id UNIF_VARS->vars[i].id = u_strdup(var); UNIF_VARS->no_vars++; return 0; }
////////////////////////////////////////////////////////////////////////////////// // If variable "var" already instantiated, returns -1. Otherwise, // instantiates the unification variable "var" to category "cat" and value "val". // Returns 1 or -1 in case of error, 0 otherwise. int unif_instantiate(MultiFlex_ctx* p_multiFlex_ctx,unichar* var, l_category_T* cat, unichar* val) { int i; int v; //Check if not yet instantiated. if (unif_instantiated(p_multiFlex_ctx,var)) return -1; i = (p_multiFlex_ctx->UNIF_VARS).no_vars; //Category (p_multiFlex_ctx->UNIF_VARS).vars[i].cat = cat; //value v = is_valid_val(cat,val); if (v == -1) { error("Instantiation impossible: %S is an invalid value in category %S.\n",val,cat->name); return 1; } (p_multiFlex_ctx->UNIF_VARS).vars[i].val = v; //id (p_multiFlex_ctx->UNIF_VARS).vars[i].id = u_strdup(var); (p_multiFlex_ctx->UNIF_VARS).no_vars++; return 0; }
////////////////////////////////////////////////////////////////////////////////// // If variable "var" already instantiated, returns -1. Otherwise, // instantiates the unification variable "var" to category "cat" and value whole index in the domain of "cat" is "val". // Returns 1 or -1 in case of error, 0 otherwise. int unif_instantiate_index(unif_vars_T* UNIF_VARS,unichar* var, l_category_T* cat, int val) { //Check if not yet instantiated. if (unif_instantiated(UNIF_VARS,var)) return -1; //Check if the value is in the domain of "cat" if (cat->no_values <= val) return -1; int i = UNIF_VARS->no_vars; //Category UNIF_VARS->vars[i].cat = cat; //Value UNIF_VARS->vars[i].val = val; //Variable's id UNIF_VARS->vars[i].id = u_strdup(var); UNIF_VARS->no_vars++; return 0; }
////////////////////////////////////////////////////////////////////////////////// // If variable "var" already instantiated, returns -1. Otherwise, // instantiates the unification variable "var" to category "cat" and value whole index in the domain of "cat" is "val". // Returns 1 or -1 in case of error, 0 otherwise. int unif_instantiate_index(MultiFlex_ctx* p_multiFlex_ctx,unichar* var, l_category_T* cat, int val) { //Check if not yet instantiated. if (unif_instantiated(p_multiFlex_ctx,var)) return -1; //Check if the value is in the domain of "cat" if (cat->no_values <= val) return -1; int i = (p_multiFlex_ctx->UNIF_VARS).no_vars; //Category (p_multiFlex_ctx->UNIF_VARS).vars[i].cat = cat; //Value (p_multiFlex_ctx->UNIF_VARS).vars[i].val = val; //Variable's id (p_multiFlex_ctx->UNIF_VARS).vars[i].id = u_strdup(var); (p_multiFlex_ctx->UNIF_VARS).no_vars++; return 0; }