public override Hand Categorise(Hand hand)
        {
            if (!hand.HasStraight || hand.SingleCardValues.Max() != Value.Ace || !hand.HasFlush)
            {
                return(Next.Categorise(hand));
            }

            return(SetHandRank(hand, Rank.RoyalFlush));
        }
        public override Hand Categorise(Hand hand)
        {
            if (!hand.HasStraight || !hand.HasFlush)
            {
                return(Next.Categorise(hand));
            }

            return(SetHandRank(hand, Rank.StraightFlush));
        }
        public override Hand Categorise(Hand hand)
        {
            if (!hand.HasNumberOfKind(3) || !hand.HasNumberOfKind(2))
            {
                return(Next.Categorise(hand));
            }

            return(SetHandRank(hand, Rank.FullHouse));
        }
 public override Hand Categorise(Hand hand)
 {
     return(!hand.HasFlush ? Next.Categorise(hand) : SetHandRank(hand, Rank.Flush));
 }
 public override Hand Categorise(Hand hand)
 {
     return(!hand.HasStraight ? Next.Categorise(hand) : SetHandRank(hand, Rank.Straight));
 }
 public override Hand Categorise(Hand hand)
 {
     return(!hand.HasNumberOfKind(3) ? Next.Categorise(hand) : SetHandRank(hand, Rank.ThreeOfAKind));
 }
 public override Hand Categorise(Hand hand)
 {
     return(hand.Pairs.Count() != 2 ? Next.Categorise(hand) : SetHandRank(hand, Rank.TwoPairs));
 }
 public override Hand Categorise(Hand hand)
 {
     return(!hand.HasNumberOfKind(2) ? Next.Categorise(hand) : SetHandRank(hand, Rank.Pair));
 }