chiark / gitweb /
hidden vpid: Make into a module
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 1 Mar 2021 18:22:45 +0000 (18:22 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 1 Mar 2021 18:22:45 +0000 (18:22 +0000)
This will hide our new id management algorithm

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/hidden.rs

index a03d27b16db8df14972921b5b72e16f27d03fc98..1705e15e5f88626b87778cff1cc0539e298116c0 100644 (file)
@@ -130,51 +130,57 @@ impl GameOccults {
 
 // ========== PerPlayerIdMap ==========
 
-#[derive(Clone,Debug,Default,Serialize,Deserialize)]
-pub struct PerPlayerIdMap {
-  f: SecondarySlotMap<PieceId, VisiblePieceId>,
-  r: DenseSlotMap<VisiblePieceId, PieceId>,
-}
+mod vpid {
+  use super::*;
 
-impl PerPlayerIdMap {
-  pub fn fwd(&self, piece: PieceId) -> Option<VisiblePieceId> {
-    Some(*self.f.get(piece)?)
-  }
-  pub fn rev(&self, vis: VisiblePieceId) -> Option<PieceId> {
-    Some(*self.r.get(vis)?)
+  #[derive(Clone,Debug,Default,Serialize,Deserialize)]
+  pub struct PerPlayerIdMap {
+    f: SecondarySlotMap<PieceId, VisiblePieceId>,
+    r: DenseSlotMap<VisiblePieceId, PieceId>,
   }
 
-  fn fwd_or_insert_internal<R, VF, OF>
-    (&mut self, piece: PieceId, vf: VF, of: OF) -> R
-  where VF: FnOnce(VisiblePieceId) -> R,
-        OF: FnOnce(secondary::OccupiedEntry<PieceId,VisiblePieceId>) -> R,
-  {
-    match self.f.entry(piece).expect("stale PieceId !") {
-      secondary::Entry::Vacant(mut vac) => {
-        if let Some((_, stale_vis)) = vac.remove_stale_entry() {
-          self.r.remove(stale_vis);
+  impl PerPlayerIdMap {
+    pub fn fwd(&self, piece: PieceId) -> Option<VisiblePieceId> {
+      Some(*self.f.get(piece)?)
+    }
+    pub fn rev(&self, vis: VisiblePieceId) -> Option<PieceId> {
+      Some(*self.r.get(vis)?)
+    }
+
+    fn fwd_or_insert_internal<R, VF, OF>
+      (&mut self, piece: PieceId, vf: VF, of: OF) -> R
+    where VF: FnOnce(VisiblePieceId) -> R,
+          OF: FnOnce(secondary::OccupiedEntry<PieceId,VisiblePieceId>) -> R,
+    {
+      match self.f.entry(piece).expect("stale PieceId !") {
+        secondary::Entry::Vacant(mut vac) => {
+          if let Some((_, stale_vis)) = vac.remove_stale_entry() {
+            self.r.remove(stale_vis);
+          }
+          let vis = self.r.insert(piece);
+          vac.insert(vis);
+          vf(vis)
+        }
+        secondary::Entry::Occupied(occ) => {
+          of(occ)
         }
-        let vis = self.r.insert(piece);
-        vac.insert(vis);
-        vf(vis)
-      }
-      secondary::Entry::Occupied(occ) => {
-        of(occ)
       }
     }
-  }
 
-  pub fn insert(&mut self, piece: PieceId) {
-    self.fwd_or_insert_internal(piece, |_vis|(), |vis|{
-      panic!("duplicate insert of {:?} {:?}", piece, vis)
-    })
-  }
+    pub fn insert(&mut self, piece: PieceId) {
+      self.fwd_or_insert_internal(piece, |_vis|(), |vis|{
+        panic!("duplicate insert of {:?} {:?}", piece, vis)
+      })
+    }
 
-  pub fn fwd_or_insert(&mut self, piece: PieceId) -> VisiblePieceId {
-    self.fwd_or_insert_internal(piece, |vis|vis, |occ| *occ.get())
+    pub fn fwd_or_insert(&mut self, piece: PieceId) -> VisiblePieceId {
+      self.fwd_or_insert_internal(piece, |vis|vis, |occ| *occ.get())
+    }
   }
 }
 
+pub use vpid::*;
+
 // ========== public entrypoints ==========
 
 /// None => do not render at all