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