From: Ian Jackson Date: Tue, 6 Apr 2021 00:00:32 +0000 (+0100) Subject: shapelib: Make Registry capable of holding other things too X-Git-Tag: otter-0.5.0~155 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=48f3d744a631644cfd45b7036861782f95a50641;p=otter.git shapelib: Make Registry capable of holding other things too Signed-off-by: Ian Jackson --- diff --git a/src/shapelib.rs b/src/shapelib.rs index db94872c..2419fcb3 100644 --- a/src/shapelib.rs +++ b/src/shapelib.rs @@ -15,7 +15,10 @@ use parking_lot::{MappedRwLockReadGuard, RwLockReadGuard}; // Item } once loaded and part of a game, // Outline } no Arc's as we serialise/deserialize during save/load -pub type Registry = HashMap; +#[derive(Default)] +pub struct Registry { + pieces: HashMap, +} #[derive(Debug)] pub struct GroupData { @@ -314,19 +317,19 @@ impl OccultedPieceTrait for Item { static SHAPELIBS: RwLock> = const_rwlock(None); pub fn libs_list() -> Vec { - let libs = SHAPELIBS.read(); - libs.as_ref().map( - |l| l.keys().cloned().collect() + let reg = SHAPELIBS.read(); + reg.as_ref().map( + |reg| reg.pieces.keys().cloned().collect() ).unwrap_or_default() } #[throws(SpecError)] pub fn libs_lookup(libname: &str) -> MappedRwLockReadGuard<'static, Contents> { - let libs = SHAPELIBS.read(); - RwLockReadGuard::try_map( libs, |libs: &Option| -> Option<_> { + let reg = SHAPELIBS.read(); + RwLockReadGuard::try_map( reg, |reg: &Option| -> Option<_> { (|| Some({ - libs.as_ref()?.get(libname)? + reg.as_ref()?.pieces.get(libname)? }))() }) .map_err(|_| SpE::LibraryNotFound) @@ -725,6 +728,7 @@ pub fn load1(l: &Explicit1) { let count = data.items.len(); SHAPELIBS.write() .get_or_insert_with(default) + .pieces .insert(l.name.clone(), data); info!("loaded {} shapes in library {:?} from {:?} and {:?}", count, &l.name, &l.catalogue, &l.dirname);