chiark / gitweb /
hidden cleanups: Introduce load_lilk
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 17 Apr 2022 18:24:50 +0000 (19:24 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 17 Apr 2022 18:25:59 +0000 (19:25 +0100)
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 <ijackson@chiark.greenend.org.uk>
daemon/cmdlistener.rs
src/occultilks.rs

index c55116d7e0ec454d2e43824f3bbed35d7a636d72..dd59a4a8ece323e3a978ada0b254664267f26e81 100644 (file)
@@ -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,
index bdce5f68cf22bdd924468a641ca35452433a92fa..b742d6b2e1c28feb7a72b7701636fd11539f05ac 100644 (file)
@@ -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)