Handling for when userdata is not defined yet, but might be defined later
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2019-08-25 11:53:37 +02:00
parent 5b7da77027
commit 4c97a7c811
7 changed files with 82 additions and 24 deletions

View File

@@ -9,11 +9,11 @@
namespace Porygon::UserData {
class UserDataValue : public Evaluation::EvalValue {
const UserData* _userData;
RetrievedUserData* _userData;
void *_obj;
public:
UserDataValue(const UserData* userData, void *obj)
: _userData(userData) {
UserDataValue(UserData* userData, void *obj)
: _userData(new RetrievedUserData(userData)) {
_obj = obj;
}
@@ -22,6 +22,10 @@ namespace Porygon::UserData {
_obj = obj;
}
~UserDataValue(){
delete _userData;
}
[[nodiscard]]
inline TypeClass GetTypeClass() const final {
return TypeClass::UserData;
@@ -35,7 +39,11 @@ namespace Porygon::UserData {
[[nodiscard]]
inline Evaluation::EvalValue* Clone() const final {
return new UserDataValue(_userData, _obj);
auto ud = _userData->Get();
if (ud == nullptr){
return new UserDataValue(_userData->GetKey(), _obj);
}
return new UserDataValue(ud, _obj);
}
[[nodiscard]]
@@ -45,19 +53,19 @@ namespace Porygon::UserData {
const Evaluation::EvalValue* IndexValue(const EvalValue *val) const final {
auto fieldId = val->GetHashCode();
auto field = _userData->GetField(fieldId);
auto field = _userData->Get()->GetField(fieldId);
return field->Get(_obj);
}
[[nodiscard]]
inline const EvalValue* IndexValue(uint32_t hash) const final {
auto field = _userData->GetField(hash);
auto field = _userData->Get()->GetField(hash);
return field->Get(_obj);
}
void SetIndexValue(const EvalValue *key, const EvalValue* value) const final {
auto fieldId = key->GetHashCode();
auto field = _userData->GetField(fieldId);
auto field = _userData->Get()->GetField(fieldId);
field->Set(_obj, value);
delete value;
}