feat: ExpressionEngine FunVars 控制 + hold 变量管理
This commit is contained in:
parent
50173683db
commit
e575efdc8a
@ -68,7 +68,40 @@ bool ExpressionEngine::evaluateBool(const std::string& name) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int ExpressionEngine::initHoldExpStr(const std::string& exp_str) {
|
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(
|
void ExpressionEngine::refreshFromMemory(
|
||||||
@ -142,5 +175,14 @@ void ExpressionEngine::refreshFromIhdRow(
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ExpressionEngine::refreshHoldVars() {
|
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
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user