PorygonLang/src/UserData/UserDataField.hpp

47 lines
1.3 KiB
C++
Raw Normal View History

2019-06-14 12:59:38 +00:00
#ifndef PORYGONLANG_USERDATAFIELD_HPP
#define PORYGONLANG_USERDATAFIELD_HPP
#include "../Evaluator/EvalValues/EvalValue.hpp"
#include "../Evaluator/EvalValues/NumericEvalValue.hpp"
2019-06-14 12:59:38 +00:00
namespace Porygon::UserData{
class UserDataField {
2019-07-25 15:23:54 +00:00
shared_ptr<const ScriptType> _type;
const Evaluation::EvalValue* (*_get)(void* obj);
void (*_set)(void* obj, const Evaluation::EvalValue* val);
public:
2019-07-25 15:23:54 +00:00
UserDataField(const ScriptType* type, const Evaluation::EvalValue* (*getter)(void* obj), void (*setter)(void* obj, const Evaluation::EvalValue* val))
: _type(shared_ptr<const ScriptType>(type)), _get(getter), _set(setter){
}
2019-07-25 15:23:54 +00:00
[[nodiscard]]
inline shared_ptr<const ScriptType> GetType(){
return _type;
}
2019-07-25 15:23:54 +00:00
[[nodiscard]]
inline bool HasGetter(){
return _get != nullptr;
}
2019-07-25 15:23:54 +00:00
[[nodiscard]]
inline const Evaluation::EvalValue* Get(void* obj){
return this ->_get(obj);
}
2019-07-25 15:23:54 +00:00
[[nodiscard]]
inline bool HasSetter(){
return _set != nullptr;
}
2019-07-25 15:23:54 +00:00
inline void Set(void* obj, const Evaluation::EvalValue* val){
this->_set(obj, val);
}
};
}
2019-06-14 12:59:38 +00:00
#endif //PORYGONLANG_USERDATAFIELD_HPP