From: Ian Jackson Date: Thu, 11 Mar 2021 19:45:32 +0000 (+0000) Subject: Break out UniqueGenGen into gamestate X-Git-Tag: otter-0.4.0~149 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=ff37617bfa2e57d95af34f05ea6dfe5a1dc63136;p=otter.git Break out UniqueGenGen into gamestate Signed-off-by: Ian Jackson --- diff --git a/src/gamestate.rs b/src/gamestate.rs index 4d56fcfe..10bbe91e 100644 --- a/src/gamestate.rs +++ b/src/gamestate.rs @@ -197,6 +197,9 @@ pub trait PieceSpec: Debug { impl Generation { pub fn increment(&mut self) { self.0 += 1 } + pub fn unique_gen(&mut self) -> UniqueGenGen<'_> { + UniqueGenGen { gen: self, none_yet: iter::once(()) } + } } impl Display for Generation { fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> { @@ -204,6 +207,20 @@ impl Display for Generation { } } +pub struct UniqueGenGen<'g> { + gen: &'g mut Generation, + none_yet: iter::Once<()>, +} + +impl UniqueGenGen<'_> { + pub fn next(&mut self) -> Generation { + if self.none_yet.next().is_some() { self.gen.increment() } + let r = *self.gen; + self.gen.increment(); + r + } +} + impl Timestamp { /// Always >= previously pub fn now() -> Timestamp { diff --git a/src/hidden.rs b/src/hidden.rs index 15e54992..57a2e1d7 100644 --- a/src/hidden.rs +++ b/src/hidden.rs @@ -860,16 +860,7 @@ mod recompute { gpieces: &mut GPieces, goccults: &mut GameOccults, ipieces: &IPieces) -> Implemented { - struct GenIncr<'g> { gen: &'g mut Generation, none_yet: iter::Once<()>, } - impl GenIncr<'_> { - fn next(&mut self) -> Generation { - if self.none_yet.next().is_some() { self.gen.increment() } - let r = *self.gen; - self.gen.increment(); - r - } - } - let mut gen = GenIncr { gen, none_yet: iter::once(()) }; + let mut gen = gen.unique_gen(); for occid in self.outdated { if let Some(occ) = goccults.occults.get_mut(occid) {