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 trimmed = field.as_ref().trim().trim_matches('"').trim_matches('\'');
let trimmed = field.as_str().trim().trim_matches('"').trim_matches('\'');
!trimmed.is_empty()
&& trimmed == field.as_ref()
&& trimmed == field.as_str()
&& trimmed.bytes().all(|byte| !byte.is_ascii_uppercase())
&& value.is_finite()
});
@@ -4403,10 +4403,10 @@ fn normalize_factor_snapshots(
.extra_factors
.into_iter()
.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() {
None
} else if trimmed == field.as_ref()
} else if trimmed == field.as_str()
&& trimmed.bytes().all(|byte| !byte.is_ascii_uppercase())
{
Some((field, value))
+5 -5
View File
@@ -40,14 +40,14 @@ impl NumericFactorMap {
pub fn get(&self, key: &str) -> Option<&f64> {
self.entries
.binary_search_by(|(name, _)| name.as_ref().cmp(key))
.binary_search_by(|(name, _)| name.as_str().cmp(key))
.ok()
.map(|index| &self.entries[index].1)
}
pub fn get_mut(&mut self, key: &str) -> Option<&mut f64> {
self.entries
.binary_search_by(|(name, _)| name.as_ref().cmp(key))
.binary_search_by(|(name, _)| name.as_str().cmp(key))
.ok()
.map(|index| &mut self.entries[index].1)
}
@@ -64,14 +64,14 @@ impl NumericFactorMap {
if self
.entries
.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));
return None;
}
match self
.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)),
Err(index) => {
@@ -83,7 +83,7 @@ impl NumericFactorMap {
pub fn remove(&mut self, key: &str) -> Option<f64> {
self.entries
.binary_search_by(|(name, _)| name.as_ref().cmp(key))
.binary_search_by(|(name, _)| name.as_str().cmp(key))
.ok()
.map(|index| self.entries.remove(index).1)
}
@@ -4905,7 +4905,7 @@ impl PlatformExprStrategy {
.iter()
.filter(|(field, _)| {
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))
.collect()
@@ -5653,7 +5653,7 @@ impl PlatformExprStrategy {
Dynamic::from(stock.stock_volume_ma100),
);
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 {
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!(copied_state.extra_factors["undefined_value"].is_nan());
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>();
assert_eq!(exposed["negative_zero"].as_float().unwrap().to_bits(), (-0.0_f64).to_bits());
assert!(exposed["undefined_value"].as_float().unwrap().is_nan());