diff --git a/src/klondike.rs b/src/klondike.rs index 6d6014c..6197e70 100644 --- a/src/klondike.rs +++ b/src/klondike.rs @@ -73,15 +73,23 @@ impl KlondikeInstruction { } } +const STOCKS: usize = 1; +const FOUNDATIONS: usize = 4; +const TABLEAUS: usize = 8; +const fn sum(n: usize) -> usize { + n * (n + 1) / 2 +} +const MAX_STACK: usize = 52 - sum(TABLEAUS); + #[derive(Clone, Debug, Eq, Hash, PartialEq)] struct KlondikeState { - piles: [Pile<13>; 13], + piles: [Pile; TABLEAUS + FOUNDATIONS + STOCKS], } impl KlondikeState { - fn pile(&self, index: KlondikePileId) -> &Pile<13> { + fn pile(&self, index: KlondikePileId) -> &Pile { &self.piles[index as usize] } - fn pile_mut(&mut self, index: KlondikePileId) -> &mut Pile<13> { + fn pile_mut(&mut self, index: KlondikePileId) -> &mut Pile { &mut self.piles[index as usize] } fn is_instruction_valid(&self, instruction: KlondikeInstruction) -> bool { @@ -220,11 +228,11 @@ impl Klondike { Self { config, state } } #[inline] - pub fn pile(&self, index: KlondikePileId) -> &Pile<13> { + pub fn pile(&self, index: KlondikePileId) -> &Pile { self.state.pile(index) } #[inline] - fn pile_mut(&mut self, index: KlondikePileId) -> &mut Pile<13> { + fn pile_mut(&mut self, index: KlondikePileId) -> &mut Pile { self.state.pile_mut(index) } }