d_notify(*this),
/* The strong theory solver can be notified by EqualityEngine::init(),
* so make sure it's initialized first. */
- d_thss(NULL),
+ d_thss(nullptr),
+ d_ho(nullptr),
d_equalityEngine(d_notify, c, instanceName + "theory::uf::ee", true),
d_conflict(c, false),
d_functionsTerms(c),
}
TheoryUF::~TheoryUF() {
- delete d_thss;
}
void TheoryUF::setMasterEqualityEngine(eq::EqualityEngine* eq) {
if (getLogicInfo().isTheoryEnabled(THEORY_UF) && options::finiteModelFind()
&& options::ufssMode() != UF_SS_NONE)
{
- d_thss = new StrongSolverTheoryUF(getSatContext(), getUserContext(), *d_out, this);
+ d_thss.reset(new StrongSolverTheoryUF(
+ getSatContext(), getUserContext(), *d_out, this));
}
if (options::ufHo())
{
d_equalityEngine.addFunctionKind(kind::HO_APPLY);
- d_ho = new HoExtension(*this, getSatContext(), getUserContext());
+ d_ho.reset(new HoExtension(*this, getSatContext(), getUserContext()));
}
}
/** The notify class */
NotifyClass d_notify;
- /** The associated theory strong solver (or NULL if none) */
- StrongSolverTheoryUF* d_thss;
+ /** The associated theory strong solver (or nullptr if it does not exist) */
+ std::unique_ptr<StrongSolverTheoryUF> d_thss;
+ /** the higher-order solver extension (or nullptr if it does not exist) */
+ std::unique_ptr<HoExtension> d_ho;
/** Equaltity engine */
eq::EqualityEngine d_equalityEngine;
/** The conflict node */
Node d_conflictNode;
- /** the higher-order solver extension */
- HoExtension* d_ho;
/** node for true */
Node d_true;
eq::EqualityEngine* getEqualityEngine() override { return &d_equalityEngine; }
- StrongSolverTheoryUF* getStrongSolver() {
- return d_thss;
- }
+ /** get a pointer to the strong solver (uf with cardinality) */
+ StrongSolverTheoryUF* getStrongSolver() const { return d_thss.get(); }
/** are we in conflict? */
bool inConflict() const { return d_conflict; }