@@ -29,7 +29,6 @@ Author: Daniel Kroening, Peter Schrammel
29
29
#include < solvers/sat/satcheck.h>
30
30
#include < solvers/smt2_incremental/smt2_incremental_decision_procedure.h>
31
31
#include < solvers/smt2_incremental/smt_solver_process.h>
32
- #include < solvers/stack_decision_procedure.h>
33
32
#include < solvers/strings/string_refinement.h>
34
33
35
34
#include < iostream>
@@ -65,10 +64,28 @@ solver_factoryt::solvert::solvert(
65
64
{
66
65
}
67
66
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
+
68
74
stack_decision_proceduret &solver_factoryt::solvert::decision_procedure () const
69
75
{
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;
72
89
}
73
90
74
91
void solver_factoryt::set_decision_procedure_time_limit (
@@ -81,22 +98,6 @@ void solver_factoryt::set_decision_procedure_time_limit(
81
98
decision_procedure.set_time_limit_seconds (timeout_seconds);
82
99
}
83
100
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
-
100
101
std::unique_ptr<solver_factoryt::solvert> solver_factoryt::get_solver ()
101
102
{
102
103
if (options.get_bool_option (" dimacs" ))
@@ -339,8 +340,8 @@ std::unique_ptr<solver_factoryt::solvert> solver_factoryt::get_default()
339
340
340
341
set_decision_procedure_time_limit (*bv_pointers);
341
342
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));
344
345
}
345
346
346
347
std::unique_ptr<solver_factoryt::solvert> solver_factoryt::get_dimacs ()
@@ -352,7 +353,7 @@ std::unique_ptr<solver_factoryt::solvert> solver_factoryt::get_dimacs()
352
353
353
354
std::string filename = options.get_option (" outfile" );
354
355
355
- auto bv_dimacs =
356
+ std::unique_ptr<boolbvt> bv_dimacs =
356
357
std::make_unique<bv_dimacst>(ns, *prop, message_handler, filename);
357
358
358
359
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()
367
368
auto prop =
368
369
std::make_unique<external_satt>(message_handler, external_sat_solver);
369
370
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);
371
373
372
374
return std::make_unique<solvert>(std::move (bv_pointers), std::move (prop));
373
375
}
@@ -390,7 +392,8 @@ std::unique_ptr<solver_factoryt::solvert> solver_factoryt::get_bv_refinement()
390
392
info.refine_arithmetic = options.get_bool_option (" refine-arithmetic" );
391
393
info.message_handler = &message_handler;
392
394
393
- auto decision_procedure = std::make_unique<bv_refinementt>(info);
395
+ std::unique_ptr<boolbvt> decision_procedure =
396
+ std::make_unique<bv_refinementt>(info);
394
397
set_decision_procedure_time_limit (*decision_procedure);
395
398
return std::make_unique<solvert>(
396
399
std::move (decision_procedure), std::move (prop));
@@ -415,7 +418,8 @@ solver_factoryt::get_string_refinement()
415
418
info.refine_arithmetic = options.get_bool_option (" refine-arithmetic" );
416
419
info.message_handler = &message_handler;
417
420
418
- auto decision_procedure = std::make_unique<string_refinementt>(info);
421
+ std::unique_ptr<boolbvt> decision_procedure =
422
+ std::make_unique<string_refinementt>(info);
419
423
set_decision_procedure_time_limit (*decision_procedure);
420
424
return std::make_unique<solvert>(
421
425
std::move (decision_procedure), std::move (prop));
0 commit comments