2019-06-14 12:59:38 +00:00
|
|
|
|
|
|
|
#ifndef PORYGONLANG_USERDATAFIELD_HPP
|
|
|
|
#define PORYGONLANG_USERDATAFIELD_HPP
|
|
|
|
|
|
|
|
|
|
|
|
#include "../Evaluator/EvalValues/EvalValue.hpp"
|
2019-06-14 20:21:33 +00:00
|
|
|
#include "../Evaluator/EvalValues/NumericEvalValue.hpp"
|
2019-06-14 12:59:38 +00:00
|
|
|
|
2019-06-17 16:35:12 +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);
|
2019-06-17 16:35:12 +00:00
|
|
|
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-06-17 16:35:12 +00:00
|
|
|
}
|
|
|
|
|
2019-07-25 15:23:54 +00:00
|
|
|
[[nodiscard]]
|
|
|
|
inline shared_ptr<const ScriptType> GetType(){
|
2019-06-17 16:35:12 +00:00
|
|
|
return _type;
|
|
|
|
}
|
|
|
|
|
2019-07-25 15:23:54 +00:00
|
|
|
[[nodiscard]]
|
2019-07-04 17:08:13 +00:00
|
|
|
inline bool HasGetter(){
|
2019-06-17 16:35:12 +00:00
|
|
|
return _get != nullptr;
|
|
|
|
}
|
|
|
|
|
2019-07-25 15:23:54 +00:00
|
|
|
[[nodiscard]]
|
|
|
|
inline const Evaluation::EvalValue* Get(void* obj){
|
2019-06-17 16:35:12 +00:00
|
|
|
return this ->_get(obj);
|
|
|
|
}
|
|
|
|
|
2019-07-25 15:23:54 +00:00
|
|
|
[[nodiscard]]
|
2019-07-04 17:08:13 +00:00
|
|
|
inline bool HasSetter(){
|
2019-06-17 16:35:12 +00:00
|
|
|
return _set != nullptr;
|
|
|
|
}
|
|
|
|
|
2019-07-25 15:23:54 +00:00
|
|
|
inline void Set(void* obj, const Evaluation::EvalValue* val){
|
2019-06-17 16:35:12 +00:00
|
|
|
this->_set(obj, val);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
2019-06-14 12:59:38 +00:00
|
|
|
|
|
|
|
|
|
|
|
#endif //PORYGONLANG_USERDATAFIELD_HPP
|