Rework of memory handling in Evaluation
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
85
src/Evaluator/EvalValuePointer.hpp
Normal file
85
src/Evaluator/EvalValuePointer.hpp
Normal file
@@ -0,0 +1,85 @@
|
||||
#ifndef PORYGONLANG_EVALVALUEPOINTER_HPP
|
||||
#define PORYGONLANG_EVALVALUEPOINTER_HPP
|
||||
|
||||
|
||||
#include "EvalValues/EvalValue.hpp"
|
||||
|
||||
namespace Porygon::Evaluation {
|
||||
class EvalValuePointer {
|
||||
const EvalValue *_ptr;
|
||||
public:
|
||||
EvalValuePointer(const EvalValue* p) :_ptr(p){};
|
||||
EvalValuePointer(const EvalValuePointer& b){
|
||||
if (b._ptr == nullptr){
|
||||
_ptr = nullptr;
|
||||
} else{
|
||||
_ptr = b._ptr->Clone();
|
||||
}
|
||||
};
|
||||
EvalValuePointer(){
|
||||
_ptr = nullptr;
|
||||
};
|
||||
|
||||
~EvalValuePointer(){
|
||||
delete _ptr;
|
||||
}
|
||||
|
||||
[[nodiscard]]
|
||||
inline const EvalValue* Get() const{
|
||||
return _ptr;
|
||||
}
|
||||
|
||||
[[nodiscard]]
|
||||
inline const EvalValue* Clone() const{
|
||||
if (_ptr == nullptr){
|
||||
return nullptr;
|
||||
}
|
||||
return _ptr->Clone();
|
||||
}
|
||||
|
||||
inline const EvalValue* Take(){
|
||||
auto p = _ptr;
|
||||
_ptr = nullptr;
|
||||
return p;
|
||||
}
|
||||
|
||||
inline void ClearAssign(const EvalValue* n){
|
||||
delete _ptr;
|
||||
_ptr = n;
|
||||
}
|
||||
|
||||
inline const bool HasValue() const{
|
||||
return _ptr == nullptr;
|
||||
}
|
||||
|
||||
inline const EvalValue* operator ->() const{
|
||||
return Get();
|
||||
}
|
||||
inline bool operator == (const EvalValuePointer& b) const{
|
||||
if (!_ptr){
|
||||
return !b._ptr;
|
||||
}
|
||||
if (!b._ptr) return false;
|
||||
return _ptr->operator==(b._ptr);
|
||||
}
|
||||
|
||||
inline bool operator != (const EvalValuePointer& b) const{
|
||||
if (!_ptr){
|
||||
return b._ptr;
|
||||
}
|
||||
if (!b._ptr) return false;
|
||||
return _ptr->operator!=(b._ptr);
|
||||
}
|
||||
|
||||
EvalValuePointer& operator =(const EvalValuePointer& a){
|
||||
if (a._ptr == nullptr){
|
||||
_ptr = nullptr;
|
||||
} else{
|
||||
_ptr = a._ptr->Clone();
|
||||
}
|
||||
return *this;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
#endif //PORYGONLANG_EVALVALUEPOINTER_HPP
|
||||
Reference in New Issue
Block a user