🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
ScriptAPI.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "AstScript/ExprVisitor.hpp"
25#include "AstUtil/StringView.hpp"
26
27AST_NAMESPACE_BEGIN
28
29
35#define AST_EXPR_EXTRA(CLASS) \
36 void accept(ExprVisitor& visitor) override{visitor.visit(*this);};
37
38
39#define AST_EXPR(CLASS) \
40 AST_OBJECT(CLASS)\
41 AST_EXPR_EXTRA(CLASS)
42
81
103
104
112
113 // 下面的枚举为软件内部使用,不要直接调用
115};
116
117class Expr;
118class Value;
119class Variable;
120class Macro;
121class Function;
122class Symbol;
123
124
131AST_SCRIPT_API Variable* aNewVariable(StringView name, Expr* expr=nullptr, bool bind = false);
132AST_SCRIPT_API Variable* aNewVariable(Expr* expr=nullptr, bool bind = false);
133
138AST_SCRIPT_API Symbol* aNewSymbol(StringView name);
139
146AST_SCRIPT_CAPI Expr* aNewOpAssign(EOpAssignType op, Expr* left, Expr* right);
147
148
155AST_SCRIPT_CAPI Expr* aNewOpBin(EOpBinType op, Expr* left, Expr* right);
156
162AST_SCRIPT_CAPI Expr* aNewOpUnary(EOpUnaryType op, Expr* expr);
163
170AST_SCRIPT_CAPI Expr* aNewExprCondition(Expr* condition, Expr* thenExpr, Expr* elseExpr=nullptr);
171
172
179AST_SCRIPT_CAPI Expr* aNewExprRange(Expr* start, Expr* stop, Expr* step=nullptr);
180
181
184AST_SCRIPT_CAPI Value* aNewValueString(StringView value);
185
188AST_SCRIPT_CAPI Value* aNewValueInt(int value);
189
192AST_SCRIPT_CAPI Value* aNewValueBool(bool value);
193
196AST_SCRIPT_CAPI Value* aNewValueDouble(double value);
197
201AST_SCRIPT_API Value* aNewValueDict();
202
203class Quantity;
204
205
208AST_SCRIPT_CAPI Value* aNewValueQuantity(const Quantity& value);
209
211AST_SCRIPT_CAPI Value* aValueNull();
212
216AST_SCRIPT_CAPI Expr* aParseExpr(StringView script);
217
218
223AST_SCRIPT_CAPI Value* aEval(StringView script);
224
229AST_SCRIPT_CAPI Value* aEvalExpr(Expr* expr);
230
231
235AST_SCRIPT_CAPI bool aValueIsBool(Value* value);
236
240AST_SCRIPT_CAPI bool aValueIsDouble(Value* value);
241
245AST_SCRIPT_CAPI bool aValueIsInt(Value* value);
246
247
251AST_SCRIPT_CAPI bool aValueIsArithmetic(Value* value);
252
256AST_SCRIPT_CAPI bool aValueIsString(Value* value);
257
261AST_SCRIPT_CAPI bool aValueIsQuantity(Value* value);
262
263
267AST_SCRIPT_CAPI double aValueToDouble(Value* value);
268
272AST_SCRIPT_CAPI bool aValueUnboxBool(Value* value);
273
274
278AST_SCRIPT_CAPI double aValueUnboxDouble(Value* value);
279
280
284AST_SCRIPT_CAPI int aValueUnboxInt(Value* value);
285
286
290AST_SCRIPT_API Quantity aValueUnboxQuantity(Value* value);
291
292
295AST_SCRIPT_API std::string aFormatExpr(Expr* expr, Object* context=nullptr);
296
297
299typedef Value* (*OpBinFunc)(Value* left, Value* right);
300
302typedef Value* (*OpAssignFunc)(Expr* left, Expr* right); // right 采用表达式对象,因为需要支持延迟赋值和绑定赋值
303
305typedef Value* (*OpUnaryFunc)(Value* value);
306
307
308enum {eIterBegin=0};
309
311typedef Value* (*IterateFunc)(Value* value, int& index);
312
313
314// @brief 获取二进制运算函数指针
315// @param op 运算类型
316// @param leftType 左运算数类型
317// @param rightType 右运算数类型
318// @return 运算函数指针
319AST_SCRIPT_CAPI OpBinFunc aGetOpBinFunc(EOpBinType op, Class* leftType, Class* rightType);
320
321
322// @brief 获取赋值运算函数指针
323// @param op 运算类型
324// @param leftType 左运算数类型
325// @param rightType 右运算数类型
326// @return 运算函数指针
327AST_SCRIPT_CAPI OpAssignFunc aGetOpAssignFunc(EOpAssignType op, Class* leftType, Class* rightType);
328
329
331// @param op 运算类型
332// @param type 运算数类型
333// @return 运算函数指针
334AST_SCRIPT_CAPI OpUnaryFunc aGetOpUnaryFunc(EOpUnaryType op, Class* type);
335
336
338// @param type 迭代对象类型
339// @return 迭代函数指针
340AST_SCRIPT_CAPI IterateFunc aGetIterateFunc(Class* type);
341
342
349AST_SCRIPT_CAPI Value* aDoOpBin(EOpBinType op, Value* left, Value* right);
350
356AST_SCRIPT_CAPI Value* aDoOpUnary(EOpUnaryType op, Value* value);
357
358
365AST_SCRIPT_CAPI Value* aDoOpAssign(EOpAssignType op, Expr* left, Expr* right);
366
367
373AST_SCRIPT_CAPI Value* aIterateBegin(Value* container, int& index);
374
380AST_SCRIPT_CAPI Value* aIterateNext(Value* container, int& index);
381
382
383// ALIAS
384
385#ifndef SWIG
386
387A_ALWAYS_INLINE Value* aNewValue(int value)
388{
389 return aNewValueInt(value);
390}
391
392A_ALWAYS_INLINE Value* aNewValue(double value)
393{
394 return aNewValueDouble(value);
395}
396
397A_ALWAYS_INLINE Value* aNewValue(bool value)
398{
399 return aNewValueBool(value);
400}
401
402A_ALWAYS_INLINE Value* aNewValue(const Quantity& value)
403{
404 return aNewValueQuantity(value);
405}
406
407A_ALWAYS_INLINE Value* aNewValue(StringView value)
408{
409 return aNewValueString(value);
410}
411
412A_ALWAYS_INLINE Value* aNewValue(const std::string& value)
413{
414 return aNewValueString(value);
415}
416
417A_ALWAYS_INLINE Value* aNewValue(const char* value)
418{
419 return aNewValueString(value);
420}
421
422
423// 通过模板捕获所有其他类型并删除,防止隐式转换为 `bool` 类型
424template<typename T>
425Value* aNewValue(T) = delete;
426
427#endif
428
432AST_NAMESPACE_END
类元信息
定义 Class.hpp:40
表达式基类
定义 Expr.hpp:39
值对象基类
定义 Value.hpp:43
EOpAssignType
定义 ScriptAPI.hpp:82
Value * aNewValueBool(bool value)
创建布尔值对象
定义 ScriptAPI.cpp:93
Value * aDoOpAssign(EOpAssignType op, Expr *left, Expr *right)
执行赋值运算符
定义 ScriptAPI.cpp:284
Value *(* OpBinFunc)(Value *left, Value *right)
二元运算函数指针类型
定义 ScriptAPI.hpp:299
Value * aNewValueInt(int value)
创建整数值对象
定义 ScriptAPI.cpp:89
Value *(* OpAssignFunc)(Expr *left, Expr *right)
赋值运算函数指针类型
定义 ScriptAPI.hpp:302
EOpUnaryType
定义 ScriptAPI.hpp:105
EOpBinType
定义 ScriptAPI.hpp:43
Value * aIterateBegin(Value *container, int &index)
执行迭代器的开始元素
定义 ScriptAPI.cpp:355
Value * aIterateNext(Value *container, int &index)
执行迭代器的下一个元素
定义 ScriptAPI.cpp:360
Value * aDoOpUnary(EOpUnaryType op, Value *value)
执行一元运算符
定义 ScriptAPI.cpp:233
Value * aNewValueQuantity(const Quantity &value)
创建数量值对象
定义 ScriptAPI.cpp:107
Value * aNewValueString(StringView value)
创建字符串值对象
定义 ScriptAPI.cpp:85
Value * aDoOpBin(EOpBinType op, Value *left, Value *right)
执行二元运算符
定义 ScriptAPI.cpp:350
Value *(* IterateFunc)(Value *value, int &index)
迭代函数指针类型
定义 ScriptAPI.hpp:311
Value *(* OpUnaryFunc)(Value *value)
一元运算函数指针类型
定义 ScriptAPI.hpp:305
OpUnaryFunc aGetOpUnaryFunc(EOpUnaryType op, Class *type)
获取一元运算函数指针
定义 ScriptAPI.cpp:339
IterateFunc aGetIterateFunc(Class *type)
获取迭代函数指针
定义 ScriptAPI.cpp:344
@ eElemMulAssign
按元素乘赋值
定义 ScriptAPI.hpp:94
@ eAssign
赋值 =
定义 ScriptAPI.hpp:83
@ eDivAssign
除法赋值
定义 ScriptAPI.hpp:90
@ eDelayAssign
延迟赋值 :=
定义 ScriptAPI.hpp:84
@ eElemOrAssign
按元素或赋值
定义 ScriptAPI.hpp:99
@ eAddAssign
加法赋值
定义 ScriptAPI.hpp:87
@ eMulAssign
乘法赋值
定义 ScriptAPI.hpp:89
@ eElemDivAssign
按元素除赋值
定义 ScriptAPI.hpp:95
@ ePowAssign
乘方赋值
定义 ScriptAPI.hpp:92
@ eElemAndAssign
按元素与赋值
定义 ScriptAPI.hpp:98
@ numOpAssignType
运算符类型数量
定义 ScriptAPI.hpp:101
@ eElemModAssign
按元素取模赋值
定义 ScriptAPI.hpp:96
@ eSubAssign
减法赋值
定义 ScriptAPI.hpp:88
@ eElemPowAssign
按元素乘方赋值
定义 ScriptAPI.hpp:97
@ eBindAssign
绑定赋值 =&
定义 ScriptAPI.hpp:85
@ eModAssign
取模赋值
定义 ScriptAPI.hpp:91
@ eNeg
负号
定义 ScriptAPI.hpp:107
@ eDec
自减
定义 ScriptAPI.hpp:109
@ eInc
自增
定义 ScriptAPI.hpp:108
@ eNot
逻辑非
定义 ScriptAPI.hpp:106
@ eIterate
迭代器
定义 ScriptAPI.hpp:114
@ eBitNot
按位取反
定义 ScriptAPI.hpp:110
@ numOpUnaryType
运算符类型数量
定义 ScriptAPI.hpp:111
@ eNe
不等于
定义 ScriptAPI.hpp:72
@ eElemPow
按元素乘方
定义 ScriptAPI.hpp:62
@ eElemOr
按元素或
定义 ScriptAPI.hpp:65
@ eGt
大于
定义 ScriptAPI.hpp:70
@ invalidOpBin
无效运算符
定义 ScriptAPI.hpp:75
@ eMul
乘法
定义 ScriptAPI.hpp:46
@ eBitAnd
位与
定义 ScriptAPI.hpp:54
@ eCatHorizontal
水平拼接
定义 ScriptAPI.hpp:79
@ eElemMul
按元素乘
定义 ScriptAPI.hpp:60
@ eLt
小于
定义 ScriptAPI.hpp:67
@ eElemAnd
按元素与
定义 ScriptAPI.hpp:64
@ eBitRightShift
定义 ScriptAPI.hpp:57
@ eBitLeftShift
<< (逻辑/算术左移)
定义 ScriptAPI.hpp:56
@ eAnd
逻辑与
定义 ScriptAPI.hpp:51
@ eBitURightShift
定义 ScriptAPI.hpp:58
@ eGe
大于等于
定义 ScriptAPI.hpp:71
@ eElemDiv
按元素除
定义 ScriptAPI.hpp:61
@ eLe
小于等于
定义 ScriptAPI.hpp:68
@ eCatVertical
垂直拼接
定义 ScriptAPI.hpp:78
@ eBitXor
位异或
定义 ScriptAPI.hpp:55
@ eMod
取模
定义 ScriptAPI.hpp:49
@ eDiv
除法
定义 ScriptAPI.hpp:47
@ ePow
乘方
定义 ScriptAPI.hpp:48
@ eSub
减法
定义 ScriptAPI.hpp:45
@ eBitOr
位或
定义 ScriptAPI.hpp:53
@ eElemMod
按元素取模
定义 ScriptAPI.hpp:63
@ eAdd
加法
定义 ScriptAPI.hpp:44
@ numOpBinType
运算符类型数量
定义 ScriptAPI.hpp:74
@ eEq
等于
定义 ScriptAPI.hpp:69
@ eOr
逻辑或
定义 ScriptAPI.hpp:52