package common.handeval;
import com.biotools.meerkat.Card;
import com.biotools.meerkat.Hand;
import com.biotools.meerkat.HandEval;
import com.biotools.meerkat.HandEvaluator;
import common.handeval.klaatu.PartialStageFastEval;
public class FastHandEval implements HandEval {
static {
HandEvaluator.setHandEval(new FastHandEval());
}
@Override
public int rankHand(Hand hand) {
// TODO Use just the indexes
Card c1 = hand.getFirstCard();
Card c2 = hand.getSecondCard();
int c1Index = PartialStageFastEval.encode(c1.getRank(), c1.getSuit());
int c2Index = PartialStageFastEval.encode(c2.getRank(), c2.getSuit());
int[] boardIndexes = new int[hand.size() - 2];
for (int i = 2; i < hand.size(); i++) {
Card card = hand.getCard(i + 1);
boardIndexes[i] = PartialStageFastEval.encode(card.getRank(), card.getSuit());
}
return eval(boardIndexes, c1Index, c2Index);
}
@Override
public int rankHand7(Hand hand) {
return rankHand(hand);
}
@Override
public int rankHand6(Hand hand) {
return rankHand(hand);
}
@Override
public int rankHand5(Hand hand) {
return rankHand(hand);
}
private int eval(int[] boardIndexes, int c1Index, int c2Index) {
if (boardIndexes.length == 5) {
return PartialStageFastEval.eval7(boardIndexes[0], boardIndexes[1], boardIndexes[2], boardIndexes[3], boardIndexes[4], c1Index, c2Index);
} else if (boardIndexes.length == 4) {
return PartialStageFastEval.eval6(boardIndexes[0], boardIndexes[1], boardIndexes[2], boardIndexes[3], c1Index, c2Index);
} else {
return PartialStageFastEval.eval5(boardIndexes[0], boardIndexes[1], boardIndexes[2], c1Index, c2Index);
}
}
}