static inline void calc(int argc, char** argv) { StdDeck_CardMask hole, board; StdDeck_CardMask card; StdDeck_CardMask_RESET(hole); StdDeck_CardMask_RESET(board); int i, cardi; for(i = 1; i < 5; ++i) { StdDeck_stringToCard(argv[i], &cardi); card = StdDeck_MASK(cardi); StdDeck_CardMask_OR(hole, hole, card); } po_probs probs; probs = get_probs(hole, board); printf("%.4f", probs.win + probs.draw); if ( argc > 7) { for(i = 5; i < 8; ++i) { StdDeck_stringToCard(argv[i], &cardi); card = StdDeck_MASK(cardi); StdDeck_CardMask_OR(board, board, card); } probs = get_probs(hole, board); printf(" %.4f", probs.win + probs.draw); } if ( argc > 8) { i = 8; StdDeck_stringToCard(argv[i], &cardi); card = StdDeck_MASK(cardi); StdDeck_CardMask_OR(board, board, card); probs = get_probs(hole, board); printf(" %.4f", probs.win + probs.draw); } if ( argc > 9) { i = 9; StdDeck_stringToCard(argv[i], &cardi); card = StdDeck_MASK(cardi); StdDeck_CardMask_OR(board, board, card); probs = get_probs(hole, board); printf(" %.4f", probs.win + probs.draw); } printf("\n"); }
// Helper: // Given a string such as "AcKcQcJcTc" representing a poker hand, // return an StdDeck_CardMask representing that hand. extern "C" StdDeck_CardMask TextToPokerEval(const char* strHand) { StdDeck_CardMask theHand, theCard; StdDeck_CardMask_RESET(theHand); if (strHand && strlen(strHand)) { int cardIndex = -1; char* curCard = const_cast<char*>(strHand); while (*curCard) { // Take the card text and convert it to an index (0..51) StdDeck_stringToCard(curCard, &cardIndex); // Convert the card index to a mask theCard = StdDeck_MASK(cardIndex); // Add the card (mask) to the hand StdDeck_CardMask_OR(theHand, theHand, theCard); // Advance to the next card (if any) curCard += 2; } } return theHand; }