bool Checker::canThrowCard(Seat* s, CardContainer& res) { ManagerBase* m = s->manager(); CardGreaterCmp gt(m); for (int i = 0; i < 4; ++i) { Seat* oth = m->seat(i); if (oth == s) { continue; } std::vector<Card> had; oth->getSuit(res.mask().hasOnlySuit(), had); CardContainer tmp; parse(m, had, tmp); for (auto& i : res.cards()) { for (auto& j : tmp.cards()) { if (i.mask.has(CardMask::Pair)) { if (j.mask.has(CardMask::Pair)) { if (i.cards.size() <= j.cards.size()) { if (gt(i.cards[0], j.cards[0]) < 0) { return false; } } } } else if (gt(i.cards.back(), j.cards[0]) < 0) { return false; } } } } return true; }