@@ -29,7 +29,6 @@ Author: Daniel Kroening, Peter Schrammel
2929#include < solvers/sat/satcheck.h>
3030#include < solvers/smt2_incremental/smt2_incremental_decision_procedure.h>
3131#include < solvers/smt2_incremental/smt_solver_process.h>
32- #include < solvers/stack_decision_procedure.h>
3332#include < solvers/strings/string_refinement.h>
3433
3534#include < iostream>
@@ -65,10 +64,28 @@ solver_factoryt::solvert::solvert(
6564{
6665}
6766
67+ solver_factoryt::solvert::solvert (
68+ std::unique_ptr<boolbvt> p1,
69+ std::unique_ptr<propt> p2)
70+ : prop_ptr(std::move(p2)), decision_procedure_is_boolbvt_ptr(std::move(p1))
71+ {
72+ }
73+
6874stack_decision_proceduret &solver_factoryt::solvert::decision_procedure () const
6975{
70- PRECONDITION (decision_procedure_ptr != nullptr );
71- return *decision_procedure_ptr;
76+ PRECONDITION (
77+ (decision_procedure_ptr != nullptr ) !=
78+ (decision_procedure_is_boolbvt_ptr != nullptr ));
79+ if (decision_procedure_ptr)
80+ return *decision_procedure_ptr;
81+ else
82+ return *decision_procedure_is_boolbvt_ptr;
83+ }
84+
85+ boolbvt &solver_factoryt::solvert::boolbv_decision_procedure () const
86+ {
87+ PRECONDITION (decision_procedure_is_boolbvt_ptr != nullptr );
88+ return *decision_procedure_is_boolbvt_ptr;
7289}
7390
7491void solver_factoryt::set_decision_procedure_time_limit (
@@ -81,22 +98,6 @@ void solver_factoryt::set_decision_procedure_time_limit(
8198 decision_procedure.set_time_limit_seconds (timeout_seconds);
8299}
83100
84- void solver_factoryt::solvert::set_decision_procedure (
85- std::unique_ptr<stack_decision_proceduret> p)
86- {
87- decision_procedure_ptr = std::move (p);
88- }
89-
90- void solver_factoryt::solvert::set_prop (std::unique_ptr<propt> p)
91- {
92- prop_ptr = std::move (p);
93- }
94-
95- void solver_factoryt::solvert::set_ofstream (std::unique_ptr<std::ofstream> p)
96- {
97- ofstream_ptr = std::move (p);
98- }
99-
100101std::unique_ptr<solver_factoryt::solvert> solver_factoryt::get_solver ()
101102{
102103 if (options.get_bool_option (" dimacs" ))
@@ -339,8 +340,8 @@ std::unique_ptr<solver_factoryt::solvert> solver_factoryt::get_default()
339340
340341 set_decision_procedure_time_limit (*bv_pointers);
341342
342- return std::make_unique<solvert>(
343- std::move (bv_pointers ), std::move (sat_solver));
343+ std::unique_ptr<boolbvt> boolbv = std::move (bv_pointers);
344+ return std::make_unique<solvert>( std:: move (boolbv ), std::move (sat_solver));
344345}
345346
346347std::unique_ptr<solver_factoryt::solvert> solver_factoryt::get_dimacs ()
@@ -352,7 +353,7 @@ std::unique_ptr<solver_factoryt::solvert> solver_factoryt::get_dimacs()
352353
353354 std::string filename = options.get_option (" outfile" );
354355
355- auto bv_dimacs =
356+ std::unique_ptr<boolbvt> bv_dimacs =
356357 std::make_unique<bv_dimacst>(ns, *prop, message_handler, filename);
357358
358359 return std::make_unique<solvert>(std::move (bv_dimacs), std::move (prop));
@@ -367,7 +368,8 @@ std::unique_ptr<solver_factoryt::solvert> solver_factoryt::get_external_sat()
367368 auto prop =
368369 std::make_unique<external_satt>(message_handler, external_sat_solver);
369370
370- auto bv_pointers = std::make_unique<bv_pointerst>(ns, *prop, message_handler);
371+ std::unique_ptr<boolbvt> bv_pointers =
372+ std::make_unique<bv_pointerst>(ns, *prop, message_handler);
371373
372374 return std::make_unique<solvert>(std::move (bv_pointers), std::move (prop));
373375}
@@ -390,7 +392,8 @@ std::unique_ptr<solver_factoryt::solvert> solver_factoryt::get_bv_refinement()
390392 info.refine_arithmetic = options.get_bool_option (" refine-arithmetic" );
391393 info.message_handler = &message_handler;
392394
393- auto decision_procedure = std::make_unique<bv_refinementt>(info);
395+ std::unique_ptr<boolbvt> decision_procedure =
396+ std::make_unique<bv_refinementt>(info);
394397 set_decision_procedure_time_limit (*decision_procedure);
395398 return std::make_unique<solvert>(
396399 std::move (decision_procedure), std::move (prop));
@@ -415,7 +418,8 @@ solver_factoryt::get_string_refinement()
415418 info.refine_arithmetic = options.get_bool_option (" refine-arithmetic" );
416419 info.message_handler = &message_handler;
417420
418- auto decision_procedure = std::make_unique<string_refinementt>(info);
421+ std::unique_ptr<boolbvt> decision_procedure =
422+ std::make_unique<string_refinementt>(info);
419423 set_decision_procedure_time_limit (*decision_procedure);
420424 return std::make_unique<solvert>(
421425 std::move (decision_procedure), std::move (prop));
0 commit comments