eis/eqpalg/algs/logic_alg.cpp
Huamonarch ae7834adaa refactor: 算法子类化 — LogicAlg/BoundAlg/BoundHoldAlg/FeedbackAlg 消除 exp_type_ 分支
将 ExpBase::mon_proc() 中的 exp_type_ 分支逻辑提取为 4 个子类,通过 doMonProc() 虚函数实现多态分发:
- LogicAlg (exp_type 1):实时逻辑判断
- BoundAlg (exp_type 2):监控变量上下限检测
- BoundHoldAlg (exp_type 5):持续超限检测(继承 BoundAlg)
- FeedbackAlg (exp_type 3/4):动作反馈处理

ExpBase 新增纯虚函数 doMonProc() 和钩子函数 doInitExtend(),
init() 和 mon_proc() 中所有类型分支替换为虚函数委托调用。
2026-05-15 14:37:15 +08:00

25 lines
910 B
C++

#include <eqpalg/algs/logic_alg.h>
#include <eqpalg/utility/build_alarm_info.h>
LogicAlg::LogicAlg(const std::string& name, const mix_cc::json& rule_json,
const std::string& ruleId)
: ExpBase(name, rule_json, ruleId, ExpType::Logic) {
logger_.reset(new LOG("LogicAlg:" + rule_name_, AUTO_CATCH_PID));
}
LogicAlg::~LogicAlg() = default;
AlarmInfo LogicAlg::doMonProc() {
double result_value = expr_engine_->evaluate("act");
if (static_cast<bool>(result_value)) {
rule_stat_.alarm_value = result_value;
auto msg = rule_name_ + " " + error_str_;
query_time_range_.set_left(query_time_range_.get_right() - delay_time_);
expr_engine_->markFunVarsNeedReset();
return utility::build_alarm_info(MsgLevel::ERROR, rule_id_, rule_name_,
"EXP1", msg, get_alarm_time());
}
return AlarmInfo{};
}