Replaced maps by hashtbl for mcsat

This commit is contained in:
Guillaume Bury 2015-02-06 09:56:29 +01:00
parent c9657cc795
commit 5067274b4c

View file

@ -103,11 +103,11 @@ module Make (E : Expr_intf.S)(Th : Plugin_intf.S with
dummy_atom.watched <- Vec.make_empty dummy_clause dummy_atom.watched <- Vec.make_empty dummy_clause
(* Constructors *) (* Constructors *)
module MF = Map.Make(E.Formula) module MF = Hashtbl.Make(E.Formula)
module MT = Map.Make(E.Term) module MT = Hashtbl.Make(E.Term)
let f_map = ref MF.empty let f_map = MF.create 1007
let t_map = ref MT.empty let t_map = MT.create 1007
let vars = Vec.make 107 (Either.mk_right dummy_var) let vars = Vec.make 107 (Either.mk_right dummy_var)
let nb_vars () = Vec.size vars let nb_vars () = Vec.size vars
@ -117,7 +117,7 @@ module Make (E : Expr_intf.S)(Th : Plugin_intf.S with
let cpt_mk_var = ref 0 let cpt_mk_var = ref 0
let make_semantic_var t = let make_semantic_var t =
try MT.find t !t_map try MT.find t_map t
with Not_found -> with Not_found ->
let res = { let res = {
vid = !cpt_mk_var; vid = !cpt_mk_var;
@ -128,14 +128,14 @@ module Make (E : Expr_intf.S)(Th : Plugin_intf.S with
assigned = None; }; assigned = None; };
} in } in
incr cpt_mk_var; incr cpt_mk_var;
t_map := MT.add t res !t_map; MT.add t_map t res;
Vec.push vars (Either.mk_left res); Vec.push vars (Either.mk_left res);
res res
let make_boolean_var = let make_boolean_var =
fun lit -> fun lit ->
let lit, negated = E.norm lit in let lit, negated = E.norm lit in
try MF.find lit !f_map, negated try MF.find f_map lit, negated
with Not_found -> with Not_found ->
let cpt_fois_2 = !cpt_mk_var lsl 1 in let cpt_fois_2 = !cpt_mk_var lsl 1 in
let rec var = let rec var =
@ -163,7 +163,7 @@ module Make (E : Expr_intf.S)(Th : Plugin_intf.S with
neg = pa; neg = pa;
is_true = false; is_true = false;
aid = cpt_fois_2 + 1 (* aid = vid*2+1 *) } in aid = cpt_fois_2 + 1 (* aid = vid*2+1 *) } in
f_map := MF.add lit var !f_map; MF.add f_map lit var;
incr cpt_mk_var; incr cpt_mk_var;
Vec.push vars (Either.mk_right var); Vec.push vars (Either.mk_right var);
Th.iter_assignable (fun t -> ignore (make_semantic_var t)) lit; Th.iter_assignable (fun t -> ignore (make_semantic_var t)) lit;