From 0108c91bae60101e26d6319036098c93cb954cf0 Mon Sep 17 00:00:00 2001 From: boris Date: Wed, 9 Sep 2026 09:35:25 +0800 Subject: [PATCH] perf: preserve borrowed factor keys in stock state --- crates/fidc-core/src/platform_expr_strategy.rs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/crates/fidc-core/src/platform_expr_strategy.rs b/crates/fidc-core/src/platform_expr_strategy.rs index 7b0582b..b8f3ad6 100644 --- a/crates/fidc-core/src/platform_expr_strategy.rs +++ b/crates/fidc-core/src/platform_expr_strategy.rs @@ -13,7 +13,7 @@ use crate::data::EligibleUniverseSnapshot; use crate::data::{ BACKWARD_ADJUSTMENT_FACTOR_FIELD, CandidateEligibility, DailyFactorSnapshot, DailyMarketSnapshot, DailySnapshotView, DataSet, PriceField, decision_free_float_cap_bn, - decision_market_cap_bn, + NumericFactorMap, decision_market_cap_bn, }; use crate::engine::BacktestError; use crate::events::OrderSide; @@ -954,7 +954,7 @@ struct StockExpressionState { stock_volume_ma60: f64, stock_volume_ma100: f64, current_series_end: Option, - extra_factors: BTreeMap, + extra_factors: NumericFactorMap, extra_text_factors: BTreeMap, } @@ -4767,7 +4767,7 @@ impl PlatformExprStrategy { self.stock_extra_factor_map_required || self.stock_extra_factor_identifiers.contains(field.as_ref()) }) - .map(|(field, value)| (field.to_string(), *value)) + .map(|(field, value)| (field.clone(), *value)) .collect() } else { BTreeMap::new() @@ -4785,7 +4785,7 @@ impl PlatformExprStrategy { .and_then(|row| row.extra_factors.get(field.as_str())) .copied() .unwrap_or(f64::NAN); - extra_factors.insert(field.clone(), value); + extra_factors.insert(field.clone().into(), value); } } } @@ -4796,7 +4796,10 @@ impl PlatformExprStrategy { .contains(BACKWARD_ADJUSTMENT_FACTOR_FIELD)) && let Some(value) = factor.adjustment_factor_backward1 { - extra_factors.insert(BACKWARD_ADJUSTMENT_FACTOR_FIELD.to_string(), value); + extra_factors.insert( + std::borrow::Cow::Borrowed(BACKWARD_ADJUSTMENT_FACTOR_FIELD), + value, + ); } let state = StockExpressionState {