fix: ExpressionEngine 构造函数预初始化 mm_vars(恢复原 ExpModule::init() 行为)
This commit is contained in:
parent
975845963a
commit
b53c061f95
@ -7,7 +7,33 @@
|
||||
|
||||
ExpressionEngine::ExpressionEngine(std::map<std::string, double>& mm_vars,
|
||||
std::vector<std::string>& m_tags)
|
||||
: mm_vars_(mm_vars), m_tags_(m_tags) {}
|
||||
: mm_vars_(mm_vars), m_tags_(m_tags) {
|
||||
// 预初始化变量,等效于原 ExpModule::init():
|
||||
// 确保 mm_vars 中有 tagN/pN/pvN/now 等键,防止后续表达式求值时变量缺失
|
||||
if (!m_tags_.empty()) {
|
||||
ensureVarCache(var_cache_, m_tags_.size());
|
||||
auto now = std::chrono::system_clock::now();
|
||||
for (size_t i = 0; i < m_tags_.size(); i++) {
|
||||
double value = 0.0;
|
||||
try {
|
||||
value = SingletonTemplate<GlobaltemSharedMemory>::GetInstance()[m_tags_[i]];
|
||||
} catch (...) {
|
||||
value = 0.0;
|
||||
}
|
||||
mm_vars_[var_cache_.p_keys[i]] = value;
|
||||
mm_vars_[var_cache_.tag_keys[i]] = value;
|
||||
for (size_t j = 0; j < PV_NUM; j++) {
|
||||
mm_vars_[var_cache_.pv_keys[i][j]] = value;
|
||||
}
|
||||
}
|
||||
mm_vars_["now"] = std::chrono::duration_cast<std::chrono::milliseconds>(
|
||||
now.time_since_epoch())
|
||||
.count();
|
||||
mm_vars_["stime"] = 0;
|
||||
mm_vars_["etime"] = 0;
|
||||
mm_vars_["time"] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// 惰性初始化 VarsCache(首次变量刷新时调用)
|
||||
static void ensureVarCache(VarsCache& vc, size_t tag_count) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user