Handling for when userdata is not defined yet, but might be defined later
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user