#ifndef PORYGONLANG_USERDATAFIELD_HPP #define PORYGONLANG_USERDATAFIELD_HPP #include "../Evaluator/EvalValues/EvalValue.hpp" #include "../Evaluator/EvalValues/NumericEvalValue.hpp" namespace Porygon::UserData{ class UserDataField { shared_ptr _type; Evaluation::EvalValue* (*_get)(void* obj); void (*_set)(void* obj, Evaluation::EvalValue* val); public: UserDataField(ScriptType* type, Evaluation::EvalValue* (*getter)(void* obj), void (*setter)(void* obj, Evaluation::EvalValue* val)) : _type(shared_ptr(type)), _get(getter), _set(setter){ } inline shared_ptr GetType(){ return _type; } inline bool HasGetter(){ return _get != nullptr; } inline Evaluation::EvalValue* Get(void* obj){ return this ->_get(obj); } inline bool HasSetter(){ return _set != nullptr; } inline void Set(void* obj, Evaluation::EvalValue* val){ this->_set(obj, val); } }; } #endif //PORYGONLANG_USERDATAFIELD_HPP