PorygonLang/src/UserData/UserDataFunction.hpp

36 lines
1.3 KiB
C++
Raw Normal View History

2019-06-21 15:03:13 +00:00
#ifndef PORYGONLANG_USERDATAFUNCTION_HPP
#define PORYGONLANG_USERDATAFUNCTION_HPP
#include "../Evaluator/EvalValues/ScriptFunctionEvalValue.hpp"
#include "UserDataFunctionType.hpp"
#include "../FunctionScriptType.hpp"
2019-06-21 15:03:13 +00:00
namespace Porygon::UserData{
class UserDataFunction : public Evaluation::GenericFunctionOption {
2019-07-25 15:23:54 +00:00
const Evaluation::EvalValue* (*_call)(void* obj, const Evaluation::EvalValue* parameters[], int parameterCount);
2019-06-21 15:03:13 +00:00
void *_obj;
2019-07-25 15:23:54 +00:00
UserDataFunction(const Evaluation::EvalValue* (*call)(void* obj, const Evaluation::EvalValue* parameters[], int parameterCount), void* obj,
const shared_ptr<GenericFunctionScriptType>& type, size_t hash) : GenericFunctionOption(){
2019-06-21 15:03:13 +00:00
_call = call;
_obj = obj;
}
public:
2019-07-25 15:23:54 +00:00
UserDataFunction(const Evaluation::EvalValue* (*call)(void* obj, const Evaluation::EvalValue* parameters[], int parameterCount), void* obj) :
GenericFunctionOption(){
2019-06-21 15:03:13 +00:00
_call = call;
_obj = obj;
}
2019-07-25 15:23:54 +00:00
~UserDataFunction() final = default;
2019-07-25 15:23:54 +00:00
[[nodiscard]]
inline const Evaluation::EvalValue* Call(const Evaluation::EvalValue* parameters[], int parameterCount) const{
2019-06-29 14:18:59 +00:00
return _call(_obj, parameters, parameterCount);
2019-06-21 15:03:13 +00:00
}
};
}
#endif //PORYGONLANG_USERDATAFUNCTION_HPP