3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-08-09 04:31:24 +00:00

remove unneeded constructors (last round)

This commit is contained in:
Nuno Lopes 2020-07-12 17:41:57 +01:00
parent 44ec259c4c
commit bb26f219fe
37 changed files with 65 additions and 276 deletions

View file

@ -22,39 +22,31 @@ Revision History:
template<class T>
class optional {
T* m_obj;
char m_initialized;
void construct(const T & val) {
m_initialized = 1;
m_obj = alloc(T, val);
}
T* m_obj = nullptr;
void destroy() {
if (m_initialized == 1) {
dealloc(m_obj);
m_obj = nullptr;
}
m_initialized = 0;
dealloc(m_obj);
m_obj = nullptr;
}
public:
optional():
m_obj(nullptr), m_initialized(0) {}
optional() {}
explicit optional(const T & val) {
construct(val);
m_obj = alloc(T, val);
}
optional(T && val) noexcept : m_obj(nullptr), m_initialized(0) {
explicit optional(T && val) {
m_obj = alloc(T, std::move(val));
}
optional(optional<T> && val) noexcept {
std::swap(m_obj, val.m_obj);
std::swap(m_initialized, val.m_initialized);
}
optional(const optional<T> & val):
m_initialized(0) {
if (val.m_initialized == 1) {
construct(*val);
optional(const optional<T> & val) {
if (val.m_obj) {
m_obj = alloc(T, *val);
}
}
@ -64,56 +56,54 @@ public:
static optional const & undef() { static optional u; return u; }
bool initialized() const { return m_initialized == 1; }
operator bool() const { return m_initialized == 1; }
bool operator!() const { return m_initialized == 0; }
bool initialized() const { return m_obj; }
operator bool() const { return m_obj; }
bool operator!() const { return !m_obj; }
T * get() const {
if (m_initialized == 1) {
return m_obj;
}
else {
return 0;
}
return m_obj;
}
void set_invalid() {
if (m_initialized == 1) {
destroy();
}
destroy();
}
T * operator->() {
SASSERT(m_initialized==1);
SASSERT(m_obj);
return m_obj;
}
T const * operator->() const {
SASSERT(m_initialized==1);
SASSERT(m_obj);
return m_obj;
}
const T & operator*() const {
SASSERT(m_initialized==1);
SASSERT(m_obj);
return *m_obj;
}
T & operator*() {
SASSERT(m_initialized==1);
SASSERT(m_obj);
return *m_obj;
}
optional & operator=(const T & val) {
destroy();
construct(val);
m_obj = alloc(T, val);
return * this;
}
optional & operator=(optional && val) {
std::swap(m_obj, val.m_obj);
return *this;
}
optional & operator=(const optional & val) {
if (&val != this) {
destroy();
if (val.m_initialized) {
construct(*val);
if (val.m_obj) {
m_obj = alloc(T, *val);
}
}
return *this;
@ -135,8 +125,6 @@ public:
optional():m_ptr(nullptr) {}
explicit optional(T * val):m_ptr(val) {}
optional(const optional & val):m_ptr(val.m_ptr) {}
static optional const & undef() { return m_undef; }