Default name

This commit is contained in:
widberg 2026-04-24 22:18:27 -04:00
parent 2c6697250c
commit efebea055f
2 changed files with 20 additions and 6 deletions

View file

@ -52,17 +52,24 @@ pub(super) fn current_name_type() -> Option<NameType> {
with_name_context(|name_context| name_context.map(NameContext::name_type))
}
pub(super) fn current_default_name() -> Option<Name> {
with_name_context(|name_context| name_context.map(NameContext::default_name))
}
#[derive(Debug)]
pub(super) struct Names {
name_type: NameType,
names: HashMap<Name, String>,
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)
}

View file

@ -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<const N: usize>(&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))
}
}