From 21cfa65af2e50320f2d7e5df021236e6e61fbee2 Mon Sep 17 00:00:00 2001 From: boris Date: Thu, 27 Aug 2026 01:37:18 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=B1=E4=BA=AB=E5=9B=9E=E6=B5=8B=E5=88=86?= =?UTF-8?q?=E9=92=9F=E6=8A=A5=E4=BB=B7=E7=B4=A2=E5=BC=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/fidc-core/src/data.rs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/crates/fidc-core/src/data.rs b/crates/fidc-core/src/data.rs index c9c4a1d..0545d4d 100644 --- a/crates/fidc-core/src/data.rs +++ b/crates/fidc-core/src/data.rs @@ -1173,7 +1173,7 @@ pub struct DataSet { candidate_by_date: Arc>>, candidate_symbol_ids_by_date: Arc>>, corporate_actions_by_date: Arc>>, - execution_quotes_by_date: HashMap>>, + execution_quotes_by_date: Arc>>>, order_book_depth_index: Arc>>, benchmark_by_date: Arc>, market_series_by_symbol: Arc>>, @@ -1463,7 +1463,7 @@ impl DataSet { candidate_by_date: Arc::new(candidate_by_date), candidate_symbol_ids_by_date: Arc::new(candidate_symbol_ids_by_date), corporate_actions_by_date: Arc::new(corporate_actions_by_date), - execution_quotes_by_date, + execution_quotes_by_date: Arc::new(execution_quotes_by_date), order_book_depth_index: Arc::new(order_book_depth_index), benchmark_by_date: Arc::new(benchmark_by_date), market_series_by_symbol: Arc::new(market_series_by_symbol), @@ -1648,8 +1648,9 @@ impl DataSet { .push(quote); } let mut added = 0usize; + let execution_quotes_by_date = Arc::make_mut(&mut self.execution_quotes_by_date); for (date, rows_by_symbol) in grouped { - let target_by_symbol = self.execution_quotes_by_date.entry(date).or_default(); + let target_by_symbol = execution_quotes_by_date.entry(date).or_default(); for (symbol, mut incoming) in rows_by_symbol { incoming.sort_by_key(|quote| quote.timestamp); incoming.dedup_by(|left, right| left.timestamp == right.timestamp); @@ -1743,7 +1744,7 @@ impl DataSet { } pub fn remove_execution_quotes_on_date(&mut self, date: NaiveDate) -> usize { - self.execution_quotes_by_date + Arc::make_mut(&mut self.execution_quotes_by_date) .remove(&date) .map(|rows_by_symbol| rows_by_symbol.into_values().map(|rows| rows.len()).sum()) .unwrap_or_default() @@ -3859,6 +3860,10 @@ mod tests { &data.benchmark_by_date, &run_data.benchmark_by_date )); + assert!(Arc::ptr_eq( + &data.execution_quotes_by_date, + &run_data.execution_quotes_by_date + )); run_data.add_execution_quotes(vec![IntradayExecutionQuote { date, @@ -3877,6 +3882,10 @@ mod tests { assert_eq!(data.execution_quote_count(), 0); assert_eq!(run_data.execution_quote_count(), 1); + assert!(!Arc::ptr_eq( + &data.execution_quotes_by_date, + &run_data.execution_quotes_by_date + )); } #[test]