/* * Store the mapping [v --> t] in the cache */ static void convert_cache_map(val_converter_t *convert, value_t v, term_t t) { int_hmap_pair_t *r; assert(good_object(convert->vtbl, v) && good_term(convert->terms, t)); r = int_hmap_get(&convert->cache, v); assert(r->val < 0); r->val = t; }
/* * Store the substitution t --> u in the model * - t and u must be valid term indices * - t must be an uninterpreted term, not mapped to anything */ void model_add_substitution(model_t *model, term_t t, term_t u) { int_hmap_t *alias; int_hmap_pair_t *r; assert(term_kind(model->terms, t) == UNINTERPRETED_TERM && good_term(model->terms, u) && t != u && model->has_alias && int_hmap_find(&model->map, t) == NULL); alias = model->alias_map; if (alias == NULL) { alias = (int_hmap_t *) safe_malloc(sizeof(int_hmap_t)); init_int_hmap(alias, 0); // default size model->alias_map = alias; } r = int_hmap_get(alias, t); assert(r->val < 0); r->val = u; }
/* * Store the mapping t := v in model * - t must not be mapped to anything * - v must be a valid object created in model->vtbl. * * If v is a function object and it has no name, then t's name is * given to v. */ void model_map_term(model_t *model, term_t t, value_t v) { int_hmap_pair_t *r; value_table_t *vtbl; char *name; assert(good_term(model->terms, t)); r = int_hmap_get(&model->map, t); assert(r->val < 0); r->val = v; // copy t's name if any name = term_name(model->terms, t); if (name != NULL) { vtbl = &model->vtbl; if (object_is_function(vtbl, v) && vtbl_function(vtbl, v)->name == NULL) { vtbl_set_function_name(vtbl, v, name); } } }