static PyObject* eval_hand(PyObject* self, PyObject *args) { PyObject* result = 0; char* hilow_string = 0; PyObject* pyhand = 0; PyObject* pyboard = 0; int low = 0; CardMask hand; CardMask board; int board_size = 0; CardMask best; HandVal best_handval; StdDeck_CardMask_RESET(best); if (!PyArg_ParseTuple(args, "sOO", &hilow_string, &pyhand, &pyboard)) return NULL; if(!strcmp(hilow_string, "low")) low = 1; if(PyList2CardMask(pyhand, &hand) < 0) return NULL; board_size = PyList2CardMask(pyboard, &board); if(board_size > 0) { CardMask hicards; CardMask locards; HandVal hival = 0; HandVal loval = 0; StdDeck_CardMask_RESET(hicards); StdDeck_CardMask_RESET(locards); OmahaHiLow8_Best(hand, board, &hival, &loval, &hicards, &locards); if(low) { best_handval = loval; if(best_handval != LowHandVal_NOTHING) best = locards; } else { best = hicards; best_handval = hival; } } else { CardMask cards; CardMask dead; StdDeck_CardMask_RESET(best); StdDeck_CardMask_RESET(dead); StdDeck_CardMask_OR(dead, dead, hand); StdDeck_CardMask_NOT(dead, dead); if(low) { best_handval = LowHandVal_NOTHING; } else { best_handval = HandVal_NOTHING; } ENUMERATE_N_CARDS_D(cards, 5, dead, { HandVal handval; if(low) { handval = Hand_EVAL_LOW8(cards, 5); } else { handval = Hand_EVAL_N(cards, 5); } if(low ? (handval < best_handval) : (handval > best_handval)) { best = cards; best_handval = handval; } } );
StdDeck_CardMask wrap_StdDeck_CardMask_NOT(StdDeck_CardMask cm) { StdDeck_CardMask_NOT(cm, cm); return cm; }
static VALUE t_eval_hand(VALUE self, VALUE args) { VALUE result = 0; VALUE rbboard = 0; VALUE rbhand = 0; char* hilow_string = 0; hilow_string = RSTRING_PTR(rb_hash_aref(args, rb_str_new2("side"))); rbboard = rb_hash_aref(args, rb_str_new2("board")); rbhand = rb_hash_aref(args, rb_str_new2("hand")); int low = 0; CardMask hand; CardMask board; int board_size = 0; CardMask best; HandVal best_handval; StdDeck_CardMask_RESET(best); if(!strcmp(hilow_string, "low")) { low = 1; } if(rbList2CardMask(rbhand, &hand) < 0) rb_fatal("empty hand given"); if( !NIL_P(rbboard)) { board_size = rbList2CardMask(rbboard, &board); } if(board_size > 0) { CardMask hicards; CardMask locards; HandVal hival = 0; HandVal loval = 0; StdDeck_CardMask_RESET(hicards); StdDeck_CardMask_RESET(locards); OmahaHiLow8_Best(hand, board, &hival, &loval, &hicards, &locards); if(low) { best_handval = loval; if(best_handval != LowHandVal_NOTHING) best = locards; } else { best = hicards; best_handval = hival; } } else { CardMask cards; CardMask dead; StdDeck_CardMask_RESET(best); StdDeck_CardMask_RESET(dead); StdDeck_CardMask_OR(dead, dead, hand); StdDeck_CardMask_NOT(dead, dead); if(low) { best_handval = LowHandVal_NOTHING; } else { best_handval = HandVal_NOTHING; } ENUMERATE_N_CARDS_D(cards, 5, dead, { HandVal handval; if(low) { handval = Hand_EVAL_LOW8(cards, 5); } else { handval = Hand_EVAL_N(cards, 5); } if(low ? (handval < best_handval) : (handval > best_handval)) { best = cards; best_handval = handval; } } );