use std::marker::PhantomData;
use crate::{FiveCard, ThreeCard, evaluate::poker_type::PokerType};
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
pub struct Eval<P> {
hand_rank: i16,
rank_flags: i16,
_poker_type: PhantomData<P>,
}
impl<P: PokerType> Eval<P> {
pub(crate) const fn new(hand_rank: i16, rank_flags: i16) -> Self {
Self {
hand_rank,
rank_flags,
_poker_type: PhantomData,
}
}
}
impl<P> Eval<P> {
pub const BEST_FIVE: Eval<FiveCard> = Eval::<FiveCard>::BEST;
pub const BEST_THREE: Eval<ThreeCard> = Eval::<ThreeCard>::BEST;
pub const WORST_FIVE: Eval<FiveCard> = Eval::<FiveCard>::WORST;
pub const WORST_THREE: Eval<ThreeCard> = Eval::<ThreeCard>::WORST;
pub(crate) const fn hand_rank(&self) -> i16 { self.hand_rank }
pub(crate) const fn rank_flags(&self) -> i16 { self.rank_flags }
}