mod card;
mod cardmask;
pub use card::{Card, Rank, Suit};
pub use cardmask::{CardMask, RankMask, SuitMask};
use rand::Rng;
pub fn sample_cards_ordered<R: Rng>(src: CardMask, num: usize, rng: &mut R) -> Vec<Card> {
assert!(src.count() >= num);
let mut res = Vec::new();
while res.len() < num {
let card_idx = rng.random_range(0..Card::NUM);
let card = Card::from_index(card_idx as u8);
if src.contains(card) && !res.contains(&card) {
res.push(card);
}
}
assert_eq!(res.len(), num);
res
}
pub fn sample_cards<R: Rng>(src: CardMask, num: usize, rng: &mut R) -> CardMask {
assert!(src.count() >= num);
let mut res = CardMask::none();
while res.count() < num {
let card_idx = rng.random_range(0..Card::NUM);
let card = Card::from_index(card_idx as u8);
res = res.union(CardMask::from_single(card).intersect(src));
}
res
}