refactor(data): use explicit string views for compact numeric names

This commit is contained in:
boris
2026-09-13 09:55:15 +08:00
committed by boris
parent c85daae608
commit 0ff90c4329
3 changed files with 12 additions and 12 deletions
+4 -4
View File
@@ -4390,9 +4390,9 @@ fn normalize_factor_snapshots(
}); });
} }
let already_normalized = snapshot.extra_factors.iter().all(|(field, value)| { let already_normalized = snapshot.extra_factors.iter().all(|(field, value)| {
let trimmed = field.as_ref().trim().trim_matches('"').trim_matches('\''); let trimmed = field.as_str().trim().trim_matches('"').trim_matches('\'');
!trimmed.is_empty() !trimmed.is_empty()
&& trimmed == field.as_ref() && trimmed == field.as_str()
&& trimmed.bytes().all(|byte| !byte.is_ascii_uppercase()) && trimmed.bytes().all(|byte| !byte.is_ascii_uppercase())
&& value.is_finite() && value.is_finite()
}); });
@@ -4403,10 +4403,10 @@ fn normalize_factor_snapshots(
.extra_factors .extra_factors
.into_iter() .into_iter()
.filter_map(|(field, value)| { .filter_map(|(field, value)| {
let trimmed = field.as_ref().trim().trim_matches('"').trim_matches('\''); let trimmed = field.as_str().trim().trim_matches('"').trim_matches('\'');
if trimmed.is_empty() || !value.is_finite() { if trimmed.is_empty() || !value.is_finite() {
None None
} else if trimmed == field.as_ref() } else if trimmed == field.as_str()
&& trimmed.bytes().all(|byte| !byte.is_ascii_uppercase()) && trimmed.bytes().all(|byte| !byte.is_ascii_uppercase())
{ {
Some((field, value)) Some((field, value))
+5 -5
View File
@@ -40,14 +40,14 @@ impl NumericFactorMap {
pub fn get(&self, key: &str) -> Option<&f64> { pub fn get(&self, key: &str) -> Option<&f64> {
self.entries self.entries
.binary_search_by(|(name, _)| name.as_ref().cmp(key)) .binary_search_by(|(name, _)| name.as_str().cmp(key))
.ok() .ok()
.map(|index| &self.entries[index].1) .map(|index| &self.entries[index].1)
} }
pub fn get_mut(&mut self, key: &str) -> Option<&mut f64> { pub fn get_mut(&mut self, key: &str) -> Option<&mut f64> {
self.entries self.entries
.binary_search_by(|(name, _)| name.as_ref().cmp(key)) .binary_search_by(|(name, _)| name.as_str().cmp(key))
.ok() .ok()
.map(|index| &mut self.entries[index].1) .map(|index| &mut self.entries[index].1)
} }
@@ -64,14 +64,14 @@ impl NumericFactorMap {
if self if self
.entries .entries
.last() .last()
.is_none_or(|(last, _)| last.as_ref() < key.as_ref()) .is_none_or(|(last, _)| last.as_str() < key.as_str())
{ {
self.entries.push((key, value)); self.entries.push((key, value));
return None; return None;
} }
match self match self
.entries .entries
.binary_search_by(|(name, _)| name.as_ref().cmp(key.as_ref())) .binary_search_by(|(name, _)| name.as_str().cmp(key.as_str()))
{ {
Ok(index) => Some(std::mem::replace(&mut self.entries[index].1, value)), Ok(index) => Some(std::mem::replace(&mut self.entries[index].1, value)),
Err(index) => { Err(index) => {
@@ -83,7 +83,7 @@ impl NumericFactorMap {
pub fn remove(&mut self, key: &str) -> Option<f64> { pub fn remove(&mut self, key: &str) -> Option<f64> {
self.entries self.entries
.binary_search_by(|(name, _)| name.as_ref().cmp(key)) .binary_search_by(|(name, _)| name.as_str().cmp(key))
.ok() .ok()
.map(|index| self.entries.remove(index).1) .map(|index| self.entries.remove(index).1)
} }
@@ -4905,7 +4905,7 @@ impl PlatformExprStrategy {
.iter() .iter()
.filter(|(field, _)| { .filter(|(field, _)| {
self.stock_extra_factor_map_required self.stock_extra_factor_map_required
|| self.stock_extra_factor_identifiers.contains(field.as_ref()) || self.stock_extra_factor_identifiers.contains(field.as_str())
}) })
.map(|(field, value)| (field.clone(), *value)) .map(|(field, value)| (field.clone(), *value))
.collect() .collect()
@@ -5653,7 +5653,7 @@ impl PlatformExprStrategy {
Dynamic::from(stock.stock_volume_ma100), Dynamic::from(stock.stock_volume_ma100),
); );
for (key, value) in &stock.extra_factors { for (key, value) in &stock.extra_factors {
factors.insert(key.as_ref().into(), Dynamic::from(*value)); factors.insert(key.as_str().into(), Dynamic::from(*value));
} }
for (key, value) in &stock.extra_text_factors { for (key, value) in &stock.extra_text_factors {
factors.insert(key.clone().into(), Dynamic::from(value.clone())); factors.insert(key.clone().into(), Dynamic::from(value.clone()));
@@ -17561,7 +17561,7 @@ mod tests {
assert_eq!(copied_state.extra_factors["negative_zero"].to_bits(), (-0.0_f64).to_bits()); assert_eq!(copied_state.extra_factors["negative_zero"].to_bits(), (-0.0_f64).to_bits());
assert!(copied_state.extra_factors["undefined_value"].is_nan()); assert!(copied_state.extra_factors["undefined_value"].is_nan());
let exposed = copied_state.extra_factors.iter() let exposed = copied_state.extra_factors.iter()
.map(|(key, value)| (key.as_ref().into(), Dynamic::from(*value))) .map(|(key, value)| (key.as_str().into(), Dynamic::from(*value)))
.collect::<Map>(); .collect::<Map>();
assert_eq!(exposed["negative_zero"].as_float().unwrap().to_bits(), (-0.0_f64).to_bits()); assert_eq!(exposed["negative_zero"].as_float().unwrap().to_bits(), (-0.0_f64).to_bits());
assert!(exposed["undefined_value"].as_float().unwrap().is_nan()); assert!(exposed["undefined_value"].as_float().unwrap().is_nan());