chiark / gitweb /
hidden: Change type of Occultation::pieces to contain Index
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 28 Feb 2021 20:30:10 +0000 (20:30 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 28 Feb 2021 20:30:10 +0000 (20:30 +0000)
Currently this is always zero.

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

index 388aef191a5d580ae0ef8d6c307d1bad34f152e9..a4e18bcb52eab4ce8b9920add0b88be27faf75b3 100644 (file)
@@ -24,11 +24,15 @@ pub struct PieceOccult {
   passive: Option<OccId>, // kept in synch with Occultation::pieces
 }
 
+pub type DisplacementIndex = usize;
+
 #[derive(Clone,Debug,Serialize,Deserialize)]
 pub struct Occultation {
   region: Area, // automatically affect pieces here
   occulter: PieceId, // kept in synch with PieceOccult::active
-  pieces: BTreeSet<PieceId>, // kept in synch with PieceOccult::passive
+  // kept synch with PO::passive.  indices are either 0 or dense, 0..len()
+  // except after recalculate_occultation_general and before xxx tbd
+  pieces: BTreeMap<PieceId, DisplacementIndex>,
   #[serde(flatten)] views: OccultationViews,
 }
 
@@ -386,7 +390,7 @@ fn recalculate_occultation_general<
       }
     };
     update_pieces(ONI::Old, &|opcs|{ opcs.remove(&piece); });
-    update_pieces(ONI::New, &|opcs|{ opcs.insert(piece); });
+    update_pieces(ONI::New, &|opcs|{ opcs.insert(piece,0); });
     gpieces.byid_mut(piece).unwrap().occult.passive = *occids.new();
   })(); // <- no ?, infallible commitment
 
@@ -584,14 +588,14 @@ pub fn remove_occultation(
     pieces_fallback_buf = gpieces
       .iter()
       .filter_map(|(ppiece, pgpc)| {
-        if pgpc.occult.passive == Some(occid) { Some(ppiece) }
+        if pgpc.occult.passive == Some(occid) { Some((ppiece,0)) }
         else { None }
       })
       .collect();
     &pieces_fallback_buf
   };
   
-  for &ppiece in pieces.iter() {
+  for (&ppiece,_) in pieces.iter() {
     recalculate_occultation_ofmany(gplayers, gpieces, goccults, ipieces,
                                    ppiece, &mut updates)
       .unwrap_or_else(|e| {
index 17d4d232ad9c187a77298edec5bb80d657328b20..25c67022a1ee0bba13f6d5f55f842790f818e898 100644 (file)
@@ -11,7 +11,7 @@ pub use std::borrow::Borrow;
 pub use std::borrow::Cow;
 pub use std::cmp::{self, max, min, Ordering};
 pub use std::collections::VecDeque;
-pub use std::collections::{btree_set, BTreeSet};
+pub use std::collections::{btree_map, btree_set, BTreeMap, BTreeSet};
 pub use std::collections::{hash_map, HashMap, HashSet};
 pub use std::convert::{Infallible, TryFrom, TryInto};
 pub use std::env;