🛰️航天仿真算法库 SpaceAST 0.3.1
载入中...
搜索中...
未找到
ScriptExecutor.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "AstScript/Value.hpp"
25#include <string>
26#include <type_traits>
27
28AST_NAMESPACE_BEGIN
29
38{
39 ePython,
40 eMATLAB,
42 eJScript,
43 eVBScript,
44 eJulia,
45 eLua,
47};
48
49
50AST_SCRIPT_API std::string toString(EScriptLanguage type);
51
52class ScriptExecutor;
53class Variable;
54
59AST_SCRIPT_CAPI ScriptExecutor* aNewScriptExecutor(EScriptLanguage type);
60
61
65{
66public:
67 const std::string& error() const { return error_; }
68 Value* value() const { return value_.get(); }
69
70 std::string error_{};
72};
73
80class AST_SCRIPT_API ScriptExecutor
81{
82public:
85 virtual ~ScriptExecutor() = default;
86
90 virtual errc_t initialize() = 0;
91
94 virtual void finalize() = 0;
95
101 virtual errc_t execute(StringView script, ScriptResult* resultOut=nullptr) = 0;
102
107 virtual errc_t evaluate(StringView expression, ScriptResult* resultOut=nullptr);
108
109
114 errc_t execute(StringView script, std::string* error);
115
116
121 virtual std::string getLastError() const = 0;
122
127 virtual errc_t setVariable(StringView name, StringView value) = 0;
128 virtual errc_t setVariable(StringView name, double value) = 0;
129 virtual errc_t setVariable(StringView name, int value) = 0;
130 virtual errc_t setVariable(StringView name, bool value) = 0;
131 errc_t setVariable(StringView name, const char* value){return setVariable(name, StringView(value));}
132 errc_t setVariable(StringView name, const std::string& value){return setVariable(name, StringView(value));}
133 errc_t setVariable(Variable* var);
134
135 // 拦截 float、long、各种指针等无法匹配上述重载、却会被隐式转换悄悄接受下来的类型,让调用错误在编译期暴露出来
136 // 注意:不能连可转换为 StringView 的类型一起拦。除了 std::string,
137 // SWIG 生成的包装代码会把参数写成 SwigValueWrapper<StringView>
138 template <typename T, typename = typename std::enable_if<!std::is_convertible<T, StringView>::value>::type>
139 errc_t setVariable(StringView name, T value) = delete;
140
145 virtual errc_t getVariable(StringView name, std::string& value) const = 0;
146 virtual errc_t getVariable(StringView name, double& value) const = 0;
147 virtual errc_t getVariable(StringView name, int& value) const = 0;
148 virtual errc_t getVariable(StringView name, bool& value) const = 0;
149 errc_t getVariable(Variable* var);
150};
151
152
155AST_NAMESPACE_END
脚本执行器,用于执行外部脚本
定义 ScriptExecutor.hpp:81
virtual std::string getLastError() const =0
获取最近一次执行脚本时的错误信息
virtual errc_t execute(StringView script, ScriptResult *resultOut=nullptr)=0
执行脚本语句
virtual errc_t initialize()=0
初始化脚本执行器
virtual errc_t setVariable(StringView name, StringView value)=0
设置脚本执行器的变量
virtual ~ScriptExecutor()=default
析构函数
virtual errc_t getVariable(StringView name, std::string &value) const =0
获取脚本执行器的字符串变量值
virtual void finalize()=0
结束脚本执行器
脚本执行结果
定义 ScriptExecutor.hpp:65
共享指针
定义 SharedPtr.hpp:33
值对象基类
定义 Value.hpp:43
变量
定义 Variable.hpp:40
EScriptLanguage
脚本类型
定义 ScriptExecutor.hpp:38
@ eJScript
JScript 脚本
@ eMATLAB
MATLAB 脚本
@ ePython
Python 脚本
@ eVBScript
VBScript 脚本
@ eJavaScript
JavaScript 脚本
@ eAstScript
AstScript 脚本
@ eJulia
Julia 脚本