From: Ian Jackson Date: Sun, 17 Apr 2022 18:24:50 +0000 (+0100) Subject: hidden cleanups: Introduce load_lilk X-Git-Tag: otter-1.1.0~505 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=eb9801de19cddcc12764341b85f91716eb3c6831;p=otter.git hidden cleanups: Introduce load_lilk This more-centralises the interpretation of LOI and IOI variants. Also add some commentary and rename create_coalesce. It doesn't always create. Signed-off-by: Ian Jackson --- diff --git a/daemon/cmdlistener.rs b/daemon/cmdlistener.rs index c55116d7..dd59a4a8 100644 --- a/daemon/cmdlistener.rs +++ b/daemon/cmdlistener.rs @@ -1124,10 +1124,7 @@ fn execute_game_insn<'cs, 'igr, 'ig: 'igr>( let ilks = &mut ig.ioccults.ilks; let occilk = occultable.map(|(lilk, p_occ)| { let data = OccultIlkData { p_occ }; - match lilk { - LOI::Distinct => IOI::Distinct(data), - LOI::Mix(ilkname) => IOI::Mix(ilks.create(ilkname, data)), - } + ilks.load_lilk(lilk, data) }); ig.ipieces.as_mut(modperm).insert(piece, IPiece { p, occilk, diff --git a/src/occultilks.rs b/src/occultilks.rs index bdce5f68..b742d6b2 100644 --- a/src/occultilks.rs +++ b/src/occultilks.rs @@ -105,6 +105,15 @@ impl OccultIlks { &self.table.get(*id.borrow())?.v } + /// Load from an LOccultIlk (as obtained from PieceTrait::load + pub fn load_lilk(&mut self, lilk: LOccultIlk, data: OccultIlkData) + -> IOccultIlk { + match lilk { + LOI::Distinct => IOI::Distinct(data), + LOI::Mix(ilkname) => IOI::Mix(self.create_coalesce(ilkname, data)), + } + } + #[throws(as Option)] pub fn from_iilk<'r>(&'r self, iilk: &'r IOccultIlk) -> &'r V { match iilk { IOI::Distinct(data) => data, @@ -115,7 +124,8 @@ impl OccultIlks { IOI::Mix(id) => self.dispose(id), } } - pub fn create(&mut self, k: K, v: V) -> OId { + /// Ensure there's an entry for `K`, perhaps creating from `V` + pub fn create_coalesce(&mut self, k: K, v: V) -> OId { let OccultIlks { lookup, table } = self; let id = *lookup .entry(k)