@@ -65,10 +65,28 @@ solver_factoryt::solvert::solvert(
65
65
{
66
66
}
67
67
68
+ solver_factoryt::solvert::solvert (
69
+ std::unique_ptr<boolbvt> p1,
70
+ std::unique_ptr<propt> p2)
71
+ : prop_ptr(std::move(p2)), decision_procedure_is_boolbvt_ptr(std::move(p1))
72
+ {
73
+ }
74
+
68
75
stack_decision_proceduret &solver_factoryt::solvert::decision_procedure () const
69
76
{
70
- PRECONDITION (decision_procedure_ptr != nullptr );
71
- return *decision_procedure_ptr;
77
+ PRECONDITION (
78
+ (decision_procedure_ptr != nullptr ) !=
79
+ (decision_procedure_is_boolbvt_ptr != nullptr ));
80
+ if (decision_procedure_ptr)
81
+ return *decision_procedure_ptr;
82
+ else
83
+ return *decision_procedure_is_boolbvt_ptr;
84
+ }
85
+
86
+ boolbvt &solver_factoryt::solvert::boolbv_decision_procedure () const
87
+ {
88
+ PRECONDITION (decision_procedure_is_boolbvt_ptr != nullptr );
89
+ return *decision_procedure_is_boolbvt_ptr;
72
90
}
73
91
74
92
void solver_factoryt::set_decision_procedure_time_limit (
@@ -81,22 +99,6 @@ void solver_factoryt::set_decision_procedure_time_limit(
81
99
decision_procedure.set_time_limit_seconds (timeout_seconds);
82
100
}
83
101
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
102
std::unique_ptr<solver_factoryt::solvert> solver_factoryt::get_solver ()
101
103
{
102
104
if (options.get_bool_option (" dimacs" ))
@@ -339,8 +341,8 @@ std::unique_ptr<solver_factoryt::solvert> solver_factoryt::get_default()
339
341
340
342
set_decision_procedure_time_limit (*bv_pointers);
341
343
342
- return std::make_unique<solvert>(
343
- std::move (bv_pointers ), std::move (sat_solver));
344
+ std::unique_ptr<boolbvt> boolbv = std::move (bv_pointers);
345
+ return std::make_unique<solvert>( std:: move (boolbv ), std::move (sat_solver));
344
346
}
345
347
346
348
std::unique_ptr<solver_factoryt::solvert> solver_factoryt::get_dimacs ()
@@ -352,7 +354,7 @@ std::unique_ptr<solver_factoryt::solvert> solver_factoryt::get_dimacs()
352
354
353
355
std::string filename = options.get_option (" outfile" );
354
356
355
- auto bv_dimacs =
357
+ std::unique_ptr<boolbvt> bv_dimacs =
356
358
std::make_unique<bv_dimacst>(ns, *prop, message_handler, filename);
357
359
358
360
return std::make_unique<solvert>(std::move (bv_dimacs), std::move (prop));
@@ -367,7 +369,8 @@ std::unique_ptr<solver_factoryt::solvert> solver_factoryt::get_external_sat()
367
369
auto prop =
368
370
std::make_unique<external_satt>(message_handler, external_sat_solver);
369
371
370
- auto bv_pointers = std::make_unique<bv_pointerst>(ns, *prop, message_handler);
372
+ std::unique_ptr<boolbvt> bv_pointers =
373
+ std::make_unique<bv_pointerst>(ns, *prop, message_handler);
371
374
372
375
return std::make_unique<solvert>(std::move (bv_pointers), std::move (prop));
373
376
}
@@ -390,7 +393,8 @@ std::unique_ptr<solver_factoryt::solvert> solver_factoryt::get_bv_refinement()
390
393
info.refine_arithmetic = options.get_bool_option (" refine-arithmetic" );
391
394
info.message_handler = &message_handler;
392
395
393
- auto decision_procedure = std::make_unique<bv_refinementt>(info);
396
+ std::unique_ptr<boolbvt> decision_procedure =
397
+ std::make_unique<bv_refinementt>(info);
394
398
set_decision_procedure_time_limit (*decision_procedure);
395
399
return std::make_unique<solvert>(
396
400
std::move (decision_procedure), std::move (prop));
@@ -415,7 +419,8 @@ solver_factoryt::get_string_refinement()
415
419
info.refine_arithmetic = options.get_bool_option (" refine-arithmetic" );
416
420
info.message_handler = &message_handler;
417
421
418
- auto decision_procedure = std::make_unique<string_refinementt>(info);
422
+ std::unique_ptr<boolbvt> decision_procedure =
423
+ std::make_unique<string_refinementt>(info);
419
424
set_decision_procedure_time_limit (*decision_procedure);
420
425
return std::make_unique<solvert>(
421
426
std::move (decision_procedure), std::move (prop));
0 commit comments