🛰️航天仿真算法库 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
222AST_SCRIPT_CAPI Expr* aExpandExpr(Expr* expr);
223
224
228AST_SCRIPT_CAPI Expr* aExpand(StringView script);
229
230
235AST_SCRIPT_CAPI Value* aEval(StringView script);
236
241AST_SCRIPT_CAPI Value* aEvalExpr(Expr* expr);
242
243
247AST_SCRIPT_CAPI bool aValueIsBool(Value* value);
248
252AST_SCRIPT_CAPI bool aValueIsDouble(Value* value);
253
257AST_SCRIPT_CAPI bool aValueIsInt(Value* value);
258
259
263AST_SCRIPT_CAPI bool aValueIsArithmetic(Value* value);
264
268AST_SCRIPT_CAPI bool aValueIsString(Value* value);
269
273AST_SCRIPT_CAPI bool aValueIsQuantity(Value* value);
274
275
279AST_SCRIPT_CAPI double aValueToDouble(Value* value);
280
284AST_SCRIPT_CAPI bool aValueUnboxBool(Value* value);
285
286
290AST_SCRIPT_CAPI double aValueUnboxDouble(Value* value);
291
292
296AST_SCRIPT_CAPI int aValueUnboxInt(Value* value);
297
298
302AST_SCRIPT_API Quantity aValueUnboxQuantity(Value* value);
303
304
307AST_SCRIPT_API std::string aFormatExpr(Expr* expr, Object* context=nullptr);
308
309
311typedef Value* (*OpBinFunc)(Value* left, Value* right);
312
314typedef Value* (*OpAssignFunc)(Expr* left, Expr* right); // right 采用表达式对象,因为需要支持延迟赋值和绑定赋值
315
317typedef Value* (*OpUnaryFunc)(Value* value);
318
319
320enum {eIterBegin=0};
321
323typedef Value* (*IterateFunc)(Value* value, int& index);
324
325
326// @brief 获取二进制运算函数指针
327// @param op 运算类型
328// @param leftType 左运算数类型
329// @param rightType 右运算数类型
330// @return 运算函数指针
331AST_SCRIPT_CAPI OpBinFunc aGetOpBinFunc(EOpBinType op, Class* leftType, Class* rightType);
332
333
334// @brief 获取赋值运算函数指针
335// @param op 运算类型
336// @param leftType 左运算数类型
337// @param rightType 右运算数类型
338// @return 运算函数指针
339AST_SCRIPT_CAPI OpAssignFunc aGetOpAssignFunc(EOpAssignType op, Class* leftType, Class* rightType);
340
341
343// @param op 运算类型
344// @param type 运算数类型
345// @return 运算函数指针
346AST_SCRIPT_CAPI OpUnaryFunc aGetOpUnaryFunc(EOpUnaryType op, Class* type);
347
348
350// @param type 迭代对象类型
351// @return 迭代函数指针
352AST_SCRIPT_CAPI IterateFunc aGetIterateFunc(Class* type);
353
354
361AST_SCRIPT_CAPI Value* aDoOpBin(EOpBinType op, Value* left, Value* right);
362
368AST_SCRIPT_CAPI Value* aDoOpUnary(EOpUnaryType op, Value* value);
369
370
377AST_SCRIPT_CAPI Value* aDoOpAssign(EOpAssignType op, Expr* left, Expr* right);
378
379
385AST_SCRIPT_CAPI Value* aIterateBegin(Value* container, int& index);
386
392AST_SCRIPT_CAPI Value* aIterateNext(Value* container, int& index);
393
394
395// ALIAS
396
397#ifndef SWIG
398
399A_ALWAYS_INLINE Value* aNewValue(int value)
400{
401 return aNewValueInt(value);
402}
403
404A_ALWAYS_INLINE Value* aNewValue(double value)
405{
406 return aNewValueDouble(value);
407}
408
409A_ALWAYS_INLINE Value* aNewValue(bool value)
410{
411 return aNewValueBool(value);
412}
413
414A_ALWAYS_INLINE Value* aNewValue(const Quantity& value)
415{
416 return aNewValueQuantity(value);
417}
418
419A_ALWAYS_INLINE Value* aNewValue(StringView value)
420{
421 return aNewValueString(value);
422}
423
424A_ALWAYS_INLINE Value* aNewValue(const std::string& value)
425{
426 return aNewValueString(value);
427}
428
429A_ALWAYS_INLINE Value* aNewValue(const char* value)
430{
431 return aNewValueString(value);
432}
433
434
435// 通过模板捕获所有其他类型并删除,防止隐式转换为 `bool` 类型
436template<typename T>
437Value* aNewValue(T) = delete;
438
439#endif
440
444AST_NAMESPACE_END
类元信息
定义 Class.hpp:40
表达式基类
定义 Expr.hpp:40
值对象基类
定义 Value.hpp:43
EOpAssignType
定义 ScriptAPI.hpp:82
Value * aNewValueBool(bool value)
创建布尔值对象
定义 ScriptAPI.cpp:94
Value * aDoOpAssign(EOpAssignType op, Expr *left, Expr *right)
执行赋值运算符
定义 ScriptAPI.cpp:333
Value *(* OpBinFunc)(Value *left, Value *right)
二元运算函数指针类型
定义 ScriptAPI.hpp:311
Value * aNewValueInt(int value)
创建整数值对象
定义 ScriptAPI.cpp:90
Value *(* OpAssignFunc)(Expr *left, Expr *right)
赋值运算函数指针类型
定义 ScriptAPI.hpp:314
EOpUnaryType
定义 ScriptAPI.hpp:105
EOpBinType
定义 ScriptAPI.hpp:43
Value * aIterateBegin(Value *container, int &index)
执行迭代器的开始元素
定义 ScriptAPI.cpp:398
Value * aIterateNext(Value *container, int &index)
执行迭代器的下一个元素
定义 ScriptAPI.cpp:403
Value * aDoOpUnary(EOpUnaryType op, Value *value)
执行一元运算符
定义 ScriptAPI.cpp:257
Value * aNewValueQuantity(const Quantity &value)
创建数量值对象
定义 ScriptAPI.cpp:108
Value * aNewValueString(StringView value)
创建字符串值对象
定义 ScriptAPI.cpp:86
Value * aDoOpBin(EOpBinType op, Value *left, Value *right)
执行二元运算符
定义 ScriptAPI.cpp:393
Value *(* IterateFunc)(Value *value, int &index)
迭代函数指针类型
定义 ScriptAPI.hpp:323
Value *(* OpUnaryFunc)(Value *value)
一元运算函数指针类型
定义 ScriptAPI.hpp:317
OpUnaryFunc aGetOpUnaryFunc(EOpUnaryType op, Class *type)
获取一元运算函数指针
定义 ScriptAPI.cpp:382
IterateFunc aGetIterateFunc(Class *type)
获取迭代函数指针
定义 ScriptAPI.cpp:387
@ 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