CGuessedCard* CGuessedHandHoldings::RemoveByIndex(int nIndex)
{
	CGuessedCard* pCard = CGuessedCardHoldings::RemoveByIndex(nIndex);

	//
	m_suit[pCard->GetSuit()].Remove(pCard);
	FormatHoldingsString();
	return pCard;
}
void CGuessedHandHoldings::Sort()
{
	// first call base class to sort the cards in S-H-D-C order
	CGuessedCardHoldings::Sort();

	// sort each of the suits individually
	for(int i=0;i<4;i++) 
		m_suit[i].Sort();

	// and then set the literal hand description
	FormatHoldingsString();
}
//
// RemoveFromSource()
//
// - this is called when a card is pulled form the combined hand for a play
//
void CCombinedSuitHoldings::RemoveFromSource(CCard* pCard, const BOOL bPlayerCard)
{
	CSuitHoldings::Remove(pCard);
	if (bPlayerCard)
	{
		m_declarerCards.Remove(pCard);
		m_nDeclarerLength = m_declarerCards.GetLength();
	}
	else
	{
		m_dummyCards.Remove(pCard);
		m_nDummyLength = m_dummyCards.GetLength();
	}
	//
	CompareHands();
	FormatHoldingsString();
}
CCard* CCombinedSuitHoldings::RemoveByIndex(int nIndex)
{
	// call base class operation
	CCard* pCard = CSuitHoldings::RemoveByIndex(nIndex);

	// perform additional processing
	if (m_declarerCards.HasCard(pCard))
	{
		m_declarerCards.Remove(pCard);
		m_nDeclarerLength = m_declarerCards.GetLength();
	}
	else 
	{
		m_dummyCards.Remove(pCard);
		m_nDummyLength = m_dummyCards.GetLength();
	}
	//
	CompareHands();
	FormatHoldingsString();
	//
	return pCard;
}
void CGuessedHandHoldings::Add(CGuessedCard* pCard, BOOL bSort)
{
	CGuessedCardHoldings::Add(pCard, bSort);
	m_suit[pCard->GetSuit()].Add(pCard, bSort);
	FormatHoldingsString();
}