From: Ian Jackson Date: Thu, 25 Mar 2021 18:13:03 +0000 (+0000) Subject: piece aliases: Add to Instance X-Git-Tag: otter-0.5.0~408 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=b244d96b18a5201078016e56a641bbd34c277702;p=otter.git piece aliases: Add to Instance Nothing populates this or looks at it. We just save and restore it. Acked-by: Ian Jackson --- diff --git a/src/global.rs b/src/global.rs index 56dc8c54..d24bf579 100644 --- a/src/global.rs +++ b/src/global.rs @@ -49,6 +49,7 @@ pub struct Instance { pub name: Arc, pub gs: GameState, pub ipieces: IPieces, + pub pcaliases: PieceAliases, pub ioccults: IOccults, pub clients: DenseSlotMap, pub iplayers: SecondarySlotMap, @@ -71,6 +72,8 @@ pub struct IPlayer { // usual variable: ipl pub tz: Timezone, } +pub type PieceAliases = BTreeMap>; + #[derive(Debug,Serialize,Deserialize)] pub struct IPiece { pub p: IPieceTraitObj, @@ -230,9 +233,11 @@ pub struct InstanceContainer { } #[derive(Debug,Default,Serialize,Deserialize)] -struct InstanceSaveAccesses { +struct InstanceSaveAccesses { ipieces: PiecesLoadedRef, ioccults: OccultIlksRef, + pcaliases: PieceAliasesRef, tokens_players: Vec<(RawTokenStr, PlayerId)>, aplayers: SecondarySlotMap, acl: Acl, @@ -324,6 +329,7 @@ impl Instance { name: name.clone(), gs, acl, ipieces: IPieces(default()), + pcaliases: default(), ioccults: default(), clients: default(), iplayers: default(), @@ -998,6 +1004,7 @@ impl InstanceGuard<'_> { self.save_something("a-", |s, w| { let ipieces = &s.c.g.ipieces; let ioccults = &s.c.g.ioccults; + let pcaliases = &s.c.g.pcaliases; let tokens_players: Vec<(&str, PlayerId)> = { let global_players = GLOBAL.players.read().unwrap(); s.c.g.tokens_players.tr @@ -1016,6 +1023,7 @@ impl InstanceGuard<'_> { let links = s.c.g.links.clone(); let isa = InstanceSaveAccesses { ipieces, ioccults, tokens_players, aplayers, acl, links, + pcaliases, }; rmp_serde::encode::write_named(w, &isa) })?; @@ -1038,8 +1046,9 @@ impl InstanceGuard<'_> { fn load_game(accounts: &AccountsGuard, games: &mut GamesGuard, name: InstanceName) -> Option { - let InstanceSaveAccesses:: { + let InstanceSaveAccesses:: { tokens_players, mut ipieces, ioccults, mut aplayers, acl, links, + pcaliases, } = match Self::load_something(&name, "a-") { Ok(data) => data, Err(e) => if (||{ @@ -1103,6 +1112,7 @@ impl InstanceGuard<'_> { gs, iplayers, links, acl: acl.into(), ipieces: IPieces(ipieces), + pcaliases, ioccults, name: name.clone(), clients: default(), diff --git a/src/prelude.rs b/src/prelude.rs index 523270cc..acaddafa 100644 --- a/src/prelude.rs +++ b/src/prelude.rs @@ -13,6 +13,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_map, BTreeMap}; pub use std::collections::{btree_set, BTreeSet}; pub use std::collections::{hash_map, HashMap, HashSet}; pub use std::convert::{Infallible, TryFrom, TryInto};