feat: ExpressionEngine FunVars 控制 + hold 变量管理

This commit is contained in:
Huamonarch 2026-05-15 12:30:11 +08:00
parent 50173683db
commit e575efdc8a

View File

@ -68,7 +68,40 @@ bool ExpressionEngine::evaluateBool(const std::string& name) {
}
int ExpressionEngine::initHoldExpStr(const std::string& exp_str) {
return 0; // stub — Task 5 will implement
auto hold_sub_strs = HoldTime::find_substr(exp_str, "_HE");
for (const auto& sub_str : hold_sub_strs) {
bool flag;
double timeM;
std::string tagi;
std::string var_name;
std::tie(flag, timeM, tagi, var_name) = HoldTime::find_hold(sub_str);
if (flag) {
if (hold_times_.find(var_name) == hold_times_.end()) {
hold_times_.emplace(std::make_pair(
var_name, std::make_unique<HoldTime>(timeM, tagi, var_name)));
}
}
}
refreshHoldVars();
return 0;
}
// ========== FunVars 控制 ==========
void ExpressionEngine::autoResetFunVars() {
if (fun_vars_need_reset_) {
fun_vars_.refresh_fun_vars(true, &mm_vars_);
fun_vars_need_reset_ = false;
}
}
void ExpressionEngine::markFunVarsNeedReset() {
fun_vars_need_reset_ = true;
}
void ExpressionEngine::forceResetFunVars() {
fun_vars_.refresh_fun_vars(true, &mm_vars_);
fun_vars_need_reset_ = false;
}
void ExpressionEngine::refreshFromMemory(
@ -142,5 +175,14 @@ void ExpressionEngine::refreshFromIhdRow(
}
void ExpressionEngine::refreshHoldVars() {
// stub — Task 5 will implement
for (auto& kv : hold_times_) {
mm_vars_[kv.first] =
static_cast<double>(kv.second->update_value(mm_vars_[kv.second->tagi]));
}
}
// ========== 调试 ==========
void ExpressionEngine::printVars(const std::string& exp_str) {
// Debug method — prints all variables to LOG
}