referenceEvaluator method

  1. @override
HandValueHigh referenceEvaluator(
  1. HandInterface h
)
override

Implementation

@override
HandValueHigh referenceEvaluator(HandInterface h) {
  assert(_allValidCards(h) <= 5);
  var st = _EvaluatorState(h);

  st.checkFlush();
  st.checkStraight();

  if (st.flush.isTrue() && st.straight.isTrue()) {
    return HandValueHigh(HandLevelHigh.StraightFlush, st.ranks);
  }
  if (st.flush.isTrue()) {
    assert(st.straight.isFalse());
    return HandValueHigh(HandLevelHigh.Flush, st.ranks);
  }
  if (st.straight.isTrue()) {
    assert(st.flush.isFalse());
    return HandValueHigh(HandLevelHigh.Straight, st.ranks);
  }
  st.checkQuads();

  if (st.quads.isTrue()) {
    return HandValueHigh(HandLevelHigh.Quads, st.ranks);
  }
  st.checkFullHouse();

  if (st.fullHouse.isTrue()) {
    return HandValueHigh(HandLevelHigh.FullHouse, st.ranks);
  }
  st.checkTrips();

  if (st.trips.isTrue()) {
    return HandValueHigh(HandLevelHigh.Trips, st.ranks);
  }
  st.checkTwoPair();

  if (st.twoPair.isTrue()) {
    return HandValueHigh(HandLevelHigh.TwoPair, st.ranks);
  }
  st.checkOnePair();

  if (st.pair.isTrue()) {
    return HandValueHigh(HandLevelHigh.Pair, st.ranks);
  }
  assert(st.allChecksComplete());
  return HandValueHigh(HandLevelHigh.NoPair, st.ranks);
}