2019-06-21 15:03:13 +00:00
|
|
|
#ifndef PORYGONLANG_USERDATAFUNCTION_HPP
|
|
|
|
#define PORYGONLANG_USERDATAFUNCTION_HPP
|
|
|
|
|
|
|
|
#include "../Evaluator/EvalValues/ScriptFunctionEvalValue.hpp"
|
2019-06-21 21:07:17 +00:00
|
|
|
#include "UserDataFunctionType.hpp"
|
2019-07-28 10:58:38 +00:00
|
|
|
#include "../ScriptTypes/FunctionScriptType.hpp"
|
2019-08-10 09:55:45 +00:00
|
|
|
#include "../ScriptOptions.hpp"
|
2019-09-28 11:08:32 +00:00
|
|
|
#include "UserDataReturnValue.hpp"
|
2019-06-21 15:03:13 +00:00
|
|
|
|
|
|
|
namespace Porygon::UserData{
|
2019-06-29 17:59:42 +00:00
|
|
|
class UserDataFunction : public Evaluation::GenericFunctionOption {
|
2019-09-28 11:08:32 +00:00
|
|
|
const UserDataReturnValue* (*_call)(void* obj, const ScriptOptions*, const Evaluation::EvalValue* parameters[],
|
2019-08-10 09:55:45 +00:00
|
|
|
int parameterCount);
|
2019-06-21 15:03:13 +00:00
|
|
|
void *_obj;
|
|
|
|
|
2019-09-28 11:08:32 +00:00
|
|
|
UserDataFunction(const UserDataReturnValue* (*call)(void* obj, const ScriptOptions*,
|
2019-08-10 09:55:45 +00:00
|
|
|
const Evaluation::EvalValue* parameters[], int parameterCount), void* obj,
|
2019-07-25 15:23:54 +00:00
|
|
|
const shared_ptr<GenericFunctionScriptType>& type, size_t hash) : GenericFunctionOption(){
|
2019-06-21 15:03:13 +00:00
|
|
|
_call = call;
|
|
|
|
_obj = obj;
|
|
|
|
}
|
|
|
|
public:
|
2019-09-28 11:08:32 +00:00
|
|
|
UserDataFunction(const UserDataReturnValue* (*call)(void* obj, const ScriptOptions*,
|
2019-08-10 09:55:45 +00:00
|
|
|
const Evaluation::EvalValue* parameters[], int parameterCount), void* obj) :
|
2019-06-29 17:59:42 +00:00
|
|
|
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-04 13:56:42 +00:00
|
|
|
|
2019-07-25 15:23:54 +00:00
|
|
|
[[nodiscard]]
|
2019-09-28 11:08:32 +00:00
|
|
|
inline const UserDataReturnValue* Call(const ScriptOptions* script,
|
2019-08-10 09:55:45 +00:00
|
|
|
const Evaluation::EvalValue* parameters[], int parameterCount) const{
|
|
|
|
return _call(_obj, script, parameters, parameterCount);
|
2019-06-21 15:03:13 +00:00
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endif //PORYGONLANG_USERDATAFUNCTION_HPP
|