bool Dealer::accept(CardSet & opened) {
        Card openedRank;

	if (discarded.isEmpty() && opened.isEmpty() )
	  return false;  // regarded as "pass for empty discard pile."

	if (!discarded.isEmpty() && discarded.size() != opened.size())  // the number of cards must be match. no five cards w/ Jkr allowed.
	  return false;
	
	if (!checkRankUniqueness(opened))
	  return false;
	
	openedRank = getCardRank(opened);

	if (!discarded.isEmpty()) // 場にカードがでていないのであれば無条件に受理
	  if (!openedRank.isGreaterThan(discardedRank)) 
	    return false;
	

	// passed all the checks.

	discarded.makeEmpty(); //clear();
	discarded.insert(opened); //	discarded.insertAll(opened);
	opened.makeEmpty(); //clear();
	discardedRank=openedRank;

	return true;
}
bool LittleThinkPlayer::follow(const GameState & gstat, CardSet & s) {
	CardSet pile(gstat.pile);
	Card tmp;
	std::cout << gstat << std::endl;
	s.makeEmpty(); //clear();
	sortInHand();
	std::cout << "( " << inHand() << " )" << std::endl;
	inHand().pickup(tmp, -1); // とにかく選ぶ.
	s.insert(tmp);
	// the card idential to tmp is already removed from the hand. 
	// cardSetOfSameRanks(s, pile.size());
	// たとえば、複数枚のカードを探す関数。ただしこの関数は未実装。
	// 現状ではこの follow は Player.cc のものと等価
	return true;
}