From: Ian Jackson Date: Sat, 30 Apr 2022 15:43:44 +0000 (+0100) Subject: Introduce and use PiceTrait downcaste_piece extension methoc X-Git-Tag: otter-1.1.0~391 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=193d99e3ac678932be576c40e836d248cd57a206;p=otter.git Introduce and use PiceTrait downcaste_piece extension methoc This is more convenient. Signed-off-by: Ian Jackson --- diff --git a/src/currency.rs b/src/currency.rs index 8d6784a9..1dad79f6 100644 --- a/src/currency.rs +++ b/src/currency.rs @@ -131,11 +131,10 @@ impl PieceTrait for Banknote { { ig.fastsplit_split(player, tpiece, show, new_z, move |_: &IOccults, _: &GameOccults, gpl: &GPlayer, - tgpc: &mut GPiece, tipc: &IPiece, tipc_p: &dyn PieceTrait, + tgpc: &mut GPiece, _tipc: &IPiece, tipc_p: &dyn PieceTrait, ngpc: &mut GPiece| { - let self_: &Banknote = tipc_p.downcast_ref::() - .ok_or_else(|| internal_error_bydebug(tipc))?; + let self_: &Banknote = tipc_p.downcast_piece()?; let tgpc_value: &mut Value = tgpc.xdata.get_mut_exp()?; let remaining = tgpc_value.qty.checked_sub(take) diff --git a/src/fastsplit.rs b/src/fastsplit.rs index 4a80c5ff..847d6a16 100644 --- a/src/fastsplit.rs +++ b/src/fastsplit.rs @@ -136,12 +136,10 @@ impl InstanceGuard<'_> { fastsplit: tgpc.fastsplit, }; - let tipc_p = (||{ - let p = tipc.p.show(show); - let p: &Piece = p.downcast_ref::()?; - let p = p.ipc.as_ref()?.p.show(show); - Some(p) - })().ok_or_else(|| internal_error_bydebug(tipc))?; + let tipc_p = tipc.p + .show(show).downcast_piece::()? + .ipc.as_ref().ok_or_else(|| internal_error_bydebug(tipc))? + .p.show(show); let (t_pu, t_unprepared) = implementation( &ig.ioccults, &ig.gs.occults, gpl, diff --git a/src/gamestate.rs b/src/gamestate.rs index ff2f0806..57af8d30 100644 --- a/src/gamestate.rs +++ b/src/gamestate.rs @@ -421,6 +421,15 @@ impl Timestamp { } } +#[ext(pub)] +impl<'r> &'r dyn PieceTrait { + #[throws(IE)] + fn downcast_piece(self) -> &'r P { + self.downcast_ref::

().ok_or_else(|| internal_logic_error(format!( + "downcaste_piece failure! got: {:?}", &self)))? + } +} + // ---------- positions and ClampTable ---------- #[derive(Error,Debug,Copy,Clone)]