feat: ExpressionEngine 变量刷新实现(MEMORY + IHDB)
This commit is contained in:
parent
da9eb2ea2e
commit
50173683db
@ -70,3 +70,77 @@ bool ExpressionEngine::evaluateBool(const std::string& name) {
|
||||
int ExpressionEngine::initHoldExpStr(const std::string& exp_str) {
|
||||
return 0; // stub — Task 5 will implement
|
||||
}
|
||||
|
||||
void ExpressionEngine::refreshFromMemory(
|
||||
const TimePoint& now_time,
|
||||
mix_cc::time_range_t& query_time_range) {
|
||||
|
||||
ensureVarCache(var_cache_, m_tags_.size());
|
||||
|
||||
for (size_t i = 0; i < m_tags_.size(); i++) {
|
||||
double current =
|
||||
SingletonTemplate<GlobaltemSharedMemory>::GetInstance()[m_tags_[i]];
|
||||
|
||||
// pN = 旧 tagN
|
||||
mm_vars_[var_cache_.p_keys[i]] = mm_vars_[var_cache_.tag_keys[i]];
|
||||
// tagN = 当前值
|
||||
mm_vars_[var_cache_.tag_keys[i]] = current;
|
||||
|
||||
// pvN 历史移位
|
||||
for (size_t j = PV_NUM - 1; j > 0; j--) {
|
||||
mm_vars_[var_cache_.pv_keys[i][j]] =
|
||||
mm_vars_[var_cache_.pv_keys[i][j - 1]];
|
||||
}
|
||||
mm_vars_[var_cache_.pv_keys[i][0]] = current;
|
||||
}
|
||||
|
||||
mm_vars_["now"] = std::chrono::duration_cast<std::chrono::milliseconds>(
|
||||
now_time.time_since_epoch())
|
||||
.count();
|
||||
|
||||
fun_vars_.refresh_fun_vars(false, &mm_vars_);
|
||||
query_time_range.set_right(now_time);
|
||||
refreshHoldVars();
|
||||
}
|
||||
|
||||
void ExpressionEngine::refreshFromIhdRow(
|
||||
int row,
|
||||
const Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic>& queried_data,
|
||||
const std::vector<TimePoint>& queried_time,
|
||||
TimePoint& now_time,
|
||||
mix_cc::time_range_t& query_time_range) {
|
||||
|
||||
if (queried_data.rows() == 0 || queried_data.cols() == 0) return;
|
||||
if (row < 0 || row >= queried_data.rows()) return;
|
||||
if (static_cast<int>(m_tags_.size()) > queried_data.cols()) return;
|
||||
|
||||
ensureVarCache(var_cache_, m_tags_.size());
|
||||
|
||||
for (size_t i = 0; i < m_tags_.size(); i++) {
|
||||
// pN = 旧 tagN
|
||||
mm_vars_[var_cache_.p_keys[i]] = mm_vars_[var_cache_.tag_keys[i]];
|
||||
// tagN = 当前行数据
|
||||
mm_vars_[var_cache_.tag_keys[i]] = queried_data(row, i);
|
||||
|
||||
// pvN 历史移位
|
||||
for (size_t j = PV_NUM - 1; j > 0; j--) {
|
||||
mm_vars_[var_cache_.pv_keys[i][j]] =
|
||||
mm_vars_[var_cache_.pv_keys[i][j - 1]];
|
||||
}
|
||||
mm_vars_[var_cache_.pv_keys[i][0]] =
|
||||
mm_vars_[var_cache_.tag_keys[i]];
|
||||
}
|
||||
|
||||
mm_vars_["now"] =
|
||||
mix_cc::mix_time_t(queried_time[row]).to_milliseconds();
|
||||
|
||||
now_time = queried_time[row];
|
||||
query_time_range.set_right(queried_time[row]);
|
||||
|
||||
fun_vars_.refresh_fun_vars(false, &mm_vars_);
|
||||
refreshHoldVars();
|
||||
}
|
||||
|
||||
void ExpressionEngine::refreshHoldVars() {
|
||||
// stub — Task 5 will implement
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user