#ifndef PORYGONLANG_USERDATAFUNCTION_HPP #define PORYGONLANG_USERDATAFUNCTION_HPP #include "../Evaluator/EvalValues/ScriptFunctionEvalValue.hpp" #include "UserDataFunctionType.hpp" #include "../FunctionScriptType.hpp" namespace Porygon::UserData{ class UserDataFunction : public Evaluation::GenericFunctionOption { const Evaluation::EvalValue* (*_call)(void* obj, const Evaluation::EvalValue* parameters[], int parameterCount); void *_obj; UserDataFunction(const Evaluation::EvalValue* (*call)(void* obj, const Evaluation::EvalValue* parameters[], int parameterCount), void* obj, const shared_ptr& type, size_t hash) : GenericFunctionOption(){ _call = call; _obj = obj; } public: UserDataFunction(const Evaluation::EvalValue* (*call)(void* obj, const Evaluation::EvalValue* parameters[], int parameterCount), void* obj) : GenericFunctionOption(){ _call = call; _obj = obj; } ~UserDataFunction() final = default; [[nodiscard]] inline const Evaluation::EvalValue* Call(const Evaluation::EvalValue* parameters[], int parameterCount) const{ return _call(_obj, parameters, parameterCount); } }; } #endif //PORYGONLANG_USERDATAFUNCTION_HPP