diff options
| author | Kjetil Orbekk <kj@orbekk.com> | 2022-09-05 15:48:02 -0400 | 
|---|---|---|
| committer | Kjetil Orbekk <kj@orbekk.com> | 2022-09-05 15:50:04 -0400 | 
| commit | 699a54e42fd1dc90f1b73b00aca5f1e52284037b (patch) | |
| tree | 224682021a4530a0b1bc121a18d6b554767e64b5 /webapp/src/card.rs | |
| parent | e49f9799fbce40a3266a04e36670a04990aea7a1 (diff) | |
Sort hands when displaying cards
Diffstat (limited to 'webapp/src/card.rs')
| -rw-r--r-- | webapp/src/card.rs | 25 | 
1 files changed, 17 insertions, 8 deletions
| diff --git a/webapp/src/card.rs b/webapp/src/card.rs index 6bb34eb..58e322d 100644 --- a/webapp/src/card.rs +++ b/webapp/src/card.rs @@ -161,17 +161,17 @@ fn make_deck() -> Vec<Card> {      result  } -#[derive(Default, PartialEq, Eq)] +#[derive(Default, PartialEq, Eq, Copy, Clone)]  pub enum RankOrder {      #[default]      Descending,      Ascending,  } -pub fn sort_cards<Suits: Iterator<Item = Suit>>(suits: Suits, ord: RankOrder, cards: &mut [Card]) { +pub fn sort_cards(suits: &[Suit; 4], ord: RankOrder, cards: &mut [Card]) {      let mut score: [u8; Suit::COUNT] = [0; Suit::COUNT]; -    for (i, suit) in suits.enumerate() { -        score[suit as usize] = i as u8; +    for (i, suit) in suits.iter().enumerate() { +        score[*suit as usize] = i as u8;      }      cards.sort_by(|&Card(s1, r1), &Card(s2, r2)| {          let order = { @@ -200,7 +200,7 @@ mod tests {          assert_eq!([card("♥2"), card("♥3"), card("♥4"),], {              let mut cards = [card("♥2"), card("♥4"), card("♥3")];              sort_cards( -                [Suit::Heart, Suit::Spade, Suit::Club, Suit::Diamond].into_iter(), +                &[Suit::Heart, Suit::Spade, Suit::Club, Suit::Diamond],                  RankOrder::Ascending,                  &mut cards,              ); @@ -209,16 +209,16 @@ mod tests {          assert_eq!([card("♥A"), card("♥3"), card("♥2"),], {              let mut cards = [card("♥2"), card("♥A"), card("♥3")];              sort_cards( -                [Suit::Heart, Suit::Spade, Suit::Club, Suit::Diamond].into_iter(), +                &[Suit::Heart, Suit::Spade, Suit::Club, Suit::Diamond],                  RankOrder::Descending,                  &mut cards,              );              cards          });          assert_eq!([card("♠A"), card("♥A"), card("♣A"), card("♦A"),], { -            let mut cards = [card("♣A"), card("♠A"), card("♥A"), card("♦A"),]; +            let mut cards = [card("♣A"), card("♠A"), card("♥A"), card("♦A")];              sort_cards( -                [Suit::Diamond, Suit::Club, Suit::Heart, Suit::Spade].into_iter(), +                &[Suit::Diamond, Suit::Club, Suit::Heart, Suit::Spade],                  RankOrder::Descending,                  &mut cards,              ); @@ -248,6 +248,15 @@ pub struct Deal {      pub east: Vec<Card>,  } +impl Deal { +    pub fn sort(&mut self, suits: &[Suit; 4], ord: RankOrder) { +        sort_cards(suits, ord, self.north.as_mut_slice()); +        sort_cards(suits, ord, self.west.as_mut_slice()); +        sort_cards(suits, ord, self.south.as_mut_slice()); +        sort_cards(suits, ord, self.east.as_mut_slice()); +    } +} +  pub fn deal<R>(rng: &mut R) -> Deal  where      R: Rng, | 
