HandRange.fromCardPairs constructor
Creates a HandRange from an iterable of CardPair.
Implementation
factory HandRange.fromCardPairs(Iterable<CardPair> cardPairs) {
final cardPairSet = cardPairs.toSet();
final pocketRankPairs = <RankPair>{};
final suitedRankPairs = <RankPair>{};
final ofsuitRankPairs = <RankPair>{};
final individualCardPairs = <CardPair>{};
for (final rank in _ranks) {
final pocketCardPairs = RankPair.pocket(rank).toSet();
if (pocketCardPairs.every((cp) => cardPairSet.contains(cp))) {
cardPairSet.removeAll(pocketCardPairs);
pocketRankPairs.add(RankPair.pocket(rank));
}
}
for (int i = 0; i < _ranks.length; ++i) {
final hr = _ranks[i];
for (final kr in _ranks.sublist(i + 1)) {
final suitedCardPairs = RankPair.suited(hr, kr).toSet();
final ofsuitCardPairs = RankPair.ofsuit(hr, kr).toSet();
if (suitedCardPairs.every((cp) => cardPairSet.contains(cp))) {
cardPairSet.removeAll(suitedCardPairs);
suitedRankPairs.add(RankPair.suited(hr, kr));
}
if (ofsuitCardPairs.every((cp) => cardPairSet.contains(cp))) {
cardPairSet.removeAll(ofsuitCardPairs);
ofsuitRankPairs.add(RankPair.ofsuit(hr, kr));
}
for (final hs in _suits) {
for (final ks in _suits) {
final cardPair = CardPair(Card(hr, hs), Card(kr, ks));
if (cardPairSet.contains(cardPair)) {
individualCardPairs.add(cardPair);
}
}
}
}
}
return HandRange._(
pocketRankPairs: pocketRankPairs,
suitedRankPairs: suitedRankPairs,
ofsuitRankPairs: ofsuitRankPairs,
individualCardPairs: individualCardPairs,
);
}