write more specific functions instead of using generics

This commit is contained in:
2026-05-29 16:30:13 -07:00
parent baab7cd220
commit ef0936bee9
+14 -8
View File
@@ -461,10 +461,16 @@ impl KlondikeState {
KlondikePileStack::Stock => self.stock.face_up().last(), KlondikePileStack::Stock => self.stock.face_up().last(),
} }
} }
pub fn top_card<S: Into<KlondikePile>>(&self, src: S) -> Option<&Card> { pub fn tableau_top_card(&self, tableau: Tableau) -> Option<&Card> {
match src.into() { self.tableau_face_up_cards(tableau).last()
KlondikePile::Tableau(tableau) => self.tableau_face_up_cards(tableau).last(), }
KlondikePile::Foundation(foundation) => self.foundations[foundation as usize].last(), pub fn foundation_top_card(&self, foundation: Foundation) -> Option<&Card> {
self.foundations[foundation as usize].last()
}
pub fn top_card(&self, pile: KlondikePile) -> Option<&Card> {
match pile {
KlondikePile::Tableau(tableau) => self.tableau_top_card(tableau),
KlondikePile::Foundation(foundation) => self.foundation_top_card(foundation),
KlondikePile::Stock => self.stock.face_up().last(), KlondikePile::Stock => self.stock.face_up().last(),
} }
} }
@@ -489,8 +495,8 @@ impl KlondikeState {
KlondikePileStack::Stock => (Stack::from_iter(self.stock.pop()), false), KlondikePileStack::Stock => (Stack::from_iter(self.stock.pop()), false),
} }
} }
fn take_top_card<S: Into<KlondikePile>>(&mut self, src: S) -> (Option<Card>, bool) { fn take_top_card(&mut self, pile: KlondikePile) -> (Option<Card>, bool) {
match src.into() { match pile {
KlondikePile::Tableau(tableau) => match tableau { KlondikePile::Tableau(tableau) => match tableau {
Tableau::Tableau1 => self.tableau1.pop_flip_up(), Tableau::Tableau1 => self.tableau1.pop_flip_up(),
Tableau::Tableau2 => self.tableau2.pop_flip_up(), Tableau::Tableau2 => self.tableau2.pop_flip_up(),
@@ -540,7 +546,7 @@ impl KlondikeState {
KlondikeInstruction::DstFoundation(dst_foundation) => { KlondikeInstruction::DstFoundation(dst_foundation) => {
// get the top cards // get the top cards
if let Some(src_card) = self.top_card(dst_foundation.src) { if let Some(src_card) = self.top_card(dst_foundation.src) {
match self.top_card(dst_foundation.foundation) { match self.foundation_top_card(dst_foundation.foundation) {
// destination card exists // destination card exists
Some(dst_card) => { Some(dst_card) => {
// suit matches? // suit matches?
@@ -564,7 +570,7 @@ impl KlondikeState {
} }
// get the cards // get the cards
if let Some(src_card) = self.stack_bottom_card(dst_tableau.src) { if let Some(src_card) = self.stack_bottom_card(dst_tableau.src) {
match self.top_card(dst_tableau.tableau) { match self.tableau_top_card(dst_tableau.tableau) {
// destination card exists // destination card exists
Some(dst_card) => { Some(dst_card) => {
// red-ness is opposite? // red-ness is opposite?