feat: server forge 子命令,四张共享 forge 状态查询加三行动旗标

This commit is contained in:
2026-10-06 18:46:44 +00:00
parent 83e41e10ab
commit e199ebeaa1
12 changed files with 635 additions and 54 deletions
+27
View File
@@ -324,6 +324,16 @@ impl PermInterner {
entries.get(id as usize).map(|e| e.data)
}
/// 纯查询:键已 intern 时返回其稳定 id,未 intern 返回 None。
///
/// 不插入新条目(区别于会插入的 `intern`,只读语义,供诊断查询)。
pub fn lookup_id(&self, s: &str) -> Option<u32> {
let hash = hash64(s);
let candidates = self.hash_map.get(&hash)?;
let entries = self.entries.read().unwrap();
candidates.iter().find(|&&id| entries[id as usize].data == s).copied()
}
/// 全部唯一 intern 键的数量。
pub fn entry_count(&self) -> u32 {
self.entries.read().unwrap().len() as u32
@@ -509,3 +519,20 @@ pub fn const_string_ptr(kind: u8) -> *const JsString {
}
}
}
#[cfg(test)]
mod tests {
use super::PermInterner;
/// `lookup_id` 纯查询:已 intern 键得该 id,未 intern 键得 None,且不增条目数。
#[test]
fn lookup_id_pure_query_no_insert() {
let interner = PermInterner::new();
let (id, _) = interner.intern("probe-key");
let before = interner.entry_count();
assert_eq!(interner.lookup_id("probe-key"), Some(id), "已 intern 键应得该 id");
assert_eq!(interner.lookup_id("absent-key"), None, "未 intern 键应得 None");
assert_eq!(interner.entry_count(), before, "纯查询不应插入新条目");
}
}