#ifndef PORYGONLANG_USERDATAOPERATION_HPP #define PORYGONLANG_USERDATAOPERATION_HPP #include #include "../Binder/BoundOperators.hpp" #include "../Evaluator/EvalValues/EvalValue.hpp" namespace Porygon::UserData { class UserDataBinaryOperation { void* _parent; Evaluation::EvalValue *(*_func)(void *obj, Evaluation::EvalValue *b); const shared_ptr _secondParameter; const shared_ptr _returnType; public: UserDataBinaryOperation(void *parent, Evaluation::EvalValue *(*func)(void *, Evaluation::EvalValue *), shared_ptr secondParameter, shared_ptr returnType) : _parent(parent), _func(func), _secondParameter(std::move(secondParameter)), _returnType(std::move(returnType)) {} Evaluation::EvalValue* Invoke(Evaluation::EvalValue * b) const{ return _func(_parent, b); } const shared_ptr GetSecondParameterType() const{ return _secondParameter; } const shared_ptr GetReturnType() const{ return _returnType; } }; } #endif //PORYGONLANG_USERDATAOPERATION_HPP