From: Ian Jackson Date: Sat, 20 Mar 2021 18:47:04 +0000 (+0000) Subject: clock: Implement held_change_hook, at least in part X-Git-Tag: otter-0.5.0~624 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=5daf046fb27d8b3285a9385934169e19541be7d3;p=otter.git clock: Implement held_change_hook, at least in part Signed-off-by: Ian Jackson --- diff --git a/src/clock.rs b/src/clock.rs index a5b676d5..63e8b089 100644 --- a/src/clock.rs +++ b/src/clock.rs @@ -658,5 +658,22 @@ impl PieceTrait for Clock { } } + #[throws(IE)] + fn held_change_hook(&self, + ig: &InstanceRef, + gpieces: &mut GPieces, + piece: PieceId, + was_held: Option) + -> UnpreparedUpdates { + let gpc = gpieces.get_mut(piece); + let gpc = if let Some(gpc) = gpc { gpc } else { return None }; + let now_held = gpc.held; + let state: &mut State = gpc.xdata_mut_exp()?; + let was_running = state.implies_running(was_held); + + state.do_start_or_stop(piece, was_running, now_held, ig)?; + unprepared_update(piece) + } + fn itemname(&self) -> &str { "chess-clock" } }