buf.piece_update(piece, &by_client, ops);
buf.log_updates(log);
- if let Some(unprepared) = unprepared { unprepared(&mut buf); }
+ buf.add_unprepared(unprepared);
debug!("api_piece_op OK: {:?}", &form);
}
raw: None },
Fine,
if xupdates.len() != 0 {
- Some(
+ vec![
Box::new(move |prepub: &mut PrepareUpdatesBuffer|
prepub.piece_updates(xupdates, &None))
as SomeUnpreparedUpdates
- )
+ ]
} else { default() },
vec![],
ig_g)
// ==================== piece management, loading, etc. ====================
fn unprepared_update(piece: PieceId) -> UnpreparedUpdates {
- Some(Box::new(move |buf: &mut PrepareUpdatesBuffer| {
+ vec![Box::new(move |buf: &mut PrepareUpdatesBuffer| {
buf.piece_update_image(piece, &None)
.unwrap_or_else(|e| error!("failed to prep clock: {:?}", e));
- }))
+ })]
}
#[typetag::serde(name="ChessClock")]
impl Debug for Implemented {
#[throws(fmt::Error)]
fn fmt(&self, f: &mut Formatter) {
- write!(f, "Implemented({})",
- if self.0.is_some() { "Some(..)" } else { "None" })?;
+ write!(f, "Implemented({})", self.0.len())?;
}
}
if let Some(occ) = goccults.occults.get_mut(occid) {
vpid::permute(occid, occ, gplayers, gpieces, ipieces);
if let Some(ipc) = ipieces.get(occ.occulter) {
- if let Some(uu) = {
- ipc
+ let uu = ipc
.direct_trait_access()
- .occultation_notify_hook(occ.occulter)
- } {
- unprepared.push(uu)
- }
+ .occultation_notify_hook(occ.occulter);
+ unprepared.extend(uu);
}
}
}
consistency_check(gplayers, gpieces, goccults);
- let unprepared = if unprepared.is_empty() {
- None
- } else {
- Some(Box::new(
- move |updates: &mut PrepareUpdatesBuffer| {
- for p in unprepared.into_iter() { p(updates) }
- }
- ) as SomeUnpreparedUpdates
- )
- };
-
Implemented(unprepared)
}
}
pub fn occultation_notify_update_image(piece: PieceId)
-> UnpreparedUpdates {
- Some(Box::new(
+ vec![Box::new(
move |updates: &mut PrepareUpdatesBuffer| {
updates.piece_update_image(piece, &None)
.unwrap_or_else(|e| error!("unable to send update! {:?}", e))
}
- ))
+ )]
}
impl PresentationLayout {
#[serde(transparent)]
pub struct ClientSequence(RawClientSequence);
-pub type UnpreparedUpdates = Option<SomeUnpreparedUpdates>;
+pub type UnpreparedUpdates = Vec<SomeUnpreparedUpdates>;
pub type SomeUnpreparedUpdates = Box<
dyn for<'r> FnOnce(&'r mut PrepareUpdatesBuffer)
>;
}
pub fn add_unprepared(&mut self, unprepared: UnpreparedUpdates) {
- if let Some(unprepared) = unprepared {
- unprepared(self);
- }
+ for suu in unprepared { suu(self); }
}
pub fn only_unprepared(ig: &'r mut Instance, unprepared: UnpreparedUpdates) {
pub fn only_unprepared_with<'i,F,E>(unprepared: UnpreparedUpdates, igf: F)
where F: FnOnce() -> Result<&'i mut Instance, E>
{
- if unprepared.is_some() {
+ if unprepared.len() != 0 {
let ig = igf()?;
let mut prepub = PrepareUpdatesBuffer::new(ig, None);
prepub.add_unprepared(unprepared);
impl Vec<(PieceId, PieceUpdateOps)> {
fn into_unprepared(self, by_client: IsResponseToClientOp)
-> UnpreparedUpdates {
- Some(Box::new(
+ vec![Box::new(
move |buf: &mut PrepareUpdatesBuffer| {
buf.piece_updates(self, &by_client)
- }))
+ })]
}
}