3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-08-09 12:50:32 +00:00
z3/src/ast/justified_expr.h
Nuno Lopes e844aef896 remove a few more copy constructors, though still not enough to enable the assertion in vector
I give up for now; there are too many copies left for little return..
2020-06-03 20:32:13 +01:00

60 lines
1.3 KiB
C++

#pragma once
#include "ast/ast.h"
class justified_expr {
ast_manager& m;
expr* m_fml;
proof* m_proof;
public:
justified_expr(ast_manager& m, expr* fml, proof* p):
m(m),
m_fml(fml),
m_proof(p) {
SASSERT(fml);
m.inc_ref(fml);
m.inc_ref(p);
}
justified_expr& operator=(justified_expr const& other) {
SASSERT(&m == &other.m);
if (this != &other) {
m.inc_ref(other.get_fml());
m.inc_ref(other.get_proof());
m.dec_ref(m_fml);
m.dec_ref(m_proof);
m_fml = other.get_fml();
m_proof = other.get_proof();
}
return *this;
}
justified_expr(justified_expr const& other):
m(other.m),
m_fml(other.m_fml),
m_proof(other.m_proof)
{
m.inc_ref(m_fml);
m.inc_ref(m_proof);
}
justified_expr(justified_expr && other) noexcept :
m(other.m),
m_fml(nullptr),
m_proof(nullptr)
{
std::swap(m_fml, other.m_fml);
std::swap(m_proof, other.m_proof);
}
~justified_expr() {
m.dec_ref(m_fml);
m.dec_ref(m_proof);
m_fml = nullptr;
m_proof = nullptr;
}
expr* get_fml() const { return m_fml; }
proof* get_proof() const { return m_proof; }
};