compute max stack size

This commit is contained in:
2026-05-15 14:09:18 -07:00
parent 23da186729
commit 6d414bd02f
+13 -5
View File
@@ -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)] #[derive(Clone, Debug, Eq, Hash, PartialEq)]
struct KlondikeState { struct KlondikeState {
piles: [Pile<13>; 13], piles: [Pile<MAX_STACK>; TABLEAUS + FOUNDATIONS + STOCKS],
} }
impl KlondikeState { impl KlondikeState {
fn pile(&self, index: KlondikePileId) -> &Pile<13> { fn pile(&self, index: KlondikePileId) -> &Pile<MAX_STACK> {
&self.piles[index as usize] &self.piles[index as usize]
} }
fn pile_mut(&mut self, index: KlondikePileId) -> &mut Pile<13> { fn pile_mut(&mut self, index: KlondikePileId) -> &mut Pile<MAX_STACK> {
&mut self.piles[index as usize] &mut self.piles[index as usize]
} }
fn is_instruction_valid(&self, instruction: KlondikeInstruction) -> bool { fn is_instruction_valid(&self, instruction: KlondikeInstruction) -> bool {
@@ -220,11 +228,11 @@ impl Klondike {
Self { config, state } Self { config, state }
} }
#[inline] #[inline]
pub fn pile(&self, index: KlondikePileId) -> &Pile<13> { pub fn pile(&self, index: KlondikePileId) -> &Pile<MAX_STACK> {
self.state.pile(index) self.state.pile(index)
} }
#[inline] #[inline]
fn pile_mut(&mut self, index: KlondikePileId) -> &mut Pile<13> { fn pile_mut(&mut self, index: KlondikePileId) -> &mut Pile<MAX_STACK> {
self.state.pile_mut(index) self.state.pile_mut(index)
} }
} }