From efebea055fbbc7945ed9f1dcf7bc046068c3eea1 Mon Sep 17 00:00:00 2001 From: widberg Date: Fri, 24 Apr 2026 22:18:27 -0400 Subject: [PATCH] Default name --- bff/src/names/context.rs | 18 +++++++++++++++++- bff/src/names/value.rs | 8 +++----- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/bff/src/names/context.rs b/bff/src/names/context.rs index 2292e2b..191e9bb 100644 --- a/bff/src/names/context.rs +++ b/bff/src/names/context.rs @@ -52,17 +52,24 @@ pub(super) fn current_name_type() -> Option { with_name_context(|name_context| name_context.map(NameContext::name_type)) } +pub(super) fn current_default_name() -> Option { + with_name_context(|name_context| name_context.map(NameContext::default_name)) +} + #[derive(Debug)] pub(super) struct Names { name_type: NameType, names: HashMap, + default_name: Name, } impl Names { pub(super) fn new(name_type: NameType) -> Self { + let default_name = hash_string_for_type(name_type, ""); let mut names = Self { name_type, names: Default::default(), + default_name, }; for class_name in class_base_names() { @@ -70,7 +77,7 @@ impl Names { names.insert(canonical.as_str()); } - names.insert(""); + names.names.insert(default_name, String::new()); names } @@ -81,6 +88,7 @@ impl Names { } self.name_type = name_type; + self.default_name = hash_string_for_type(self.name_type, ""); let old_names = std::mem::take(&mut self.names); for string in old_names.into_values() { self.names @@ -94,6 +102,10 @@ impl Names { self.name_type } + pub(super) fn default_name(&self) -> Name { + self.default_name + } + fn name_from_i32(&self, value: i32) -> Name { self.name_type.name_from_i32(value) } @@ -246,6 +258,10 @@ impl NameContext { self.names.lock().unwrap().name_type() } + pub fn default_name(&self) -> Name { + self.names.lock().unwrap().default_name() + } + pub fn name_from_i32(&self, value: i32) -> Name { self.names.lock().unwrap().name_from_i32(value) } diff --git a/bff/src/names/value.rs b/bff/src/names/value.rs index e224501..94e3bb9 100644 --- a/bff/src/names/value.rs +++ b/bff/src/names/value.rs @@ -8,7 +8,7 @@ use num_traits::AsPrimitive; use crate::traits::NameHashFunction; -use super::context::{current_name_type, with_name_context}; +use super::context::{current_default_name, current_name_type, with_name_context}; use super::{NameContext, NameType}; const FORCED_NAME_STRING_CHAR: char = '$'; @@ -98,7 +98,7 @@ impl Name { } pub fn is_default(&self) -> bool { - current_name_type().is_some_and(|name_type| *self == hash_string_for_type(name_type, "")) + current_name_type().is_some() && *self == Default::default() } pub fn get_wordlist_encoded_string(&self, wordlist: [&str; N]) -> String @@ -281,9 +281,7 @@ impl BinWrite for Name { impl Default for Name { fn default() -> Self { - current_name_type() - .map(|name_type| hash_string_for_type(name_type, "")) - .unwrap_or(Self(0)) + current_default_name().unwrap_or(Self(0)) } }