/** Extract and return a specific Card. * Remove or split the Card in the Deck, and return a new Card. * If there is no Card with that value, NULL is returned. * If n is bigger than [Card in the Deck]->getCount(), NULL is returned. * @param value value of the Card * @param n number of different suits (cards inside the Card) * @return a new Card * @see Deck::extract(Card *c) * @see Deck::extractRandom() */ Card *Deck::extract(int value,int n) { Card *requested; list<Card *>::iterator it; for(it=m_cards.begin(); it!=m_cards.end(); it++) { if((*it)->getValue()==value) { requested=(*it); if(requested->getCount()<n) { cerr <<"Error: invalid n value. requested is: " <<requested->getShortName() <<endl; return NULL; } if(requested->getCount()==n) requested=extract(requested); else requested=requested->divide(n); return requested; } } cerr <<"Cannot find card: " <<value <<" x" <<n <<" in this Deck:" <<endl; print(true); return NULL; }