+++ /dev/null
-//
-// CardLib - CardStack class
-//
-// Freeware
-// Copyright J Brown 2001
-//
-
-#include "cardlib.h"
-
-Card &CardStack::operator[] (size_t index)
-{
- if(index >= (size_t)nNumCards) index = nNumCards - 1;
- return cardlist[nNumCards - index - 1];
-}
-
-const Card &CardStack::operator[] (size_t index) const
-{
- if(index >= (size_t)nNumCards) index = nNumCards - 1;
- return cardlist[nNumCards - index - 1];
-}
-
-// Subscripting operator for a constant sequence
-//
-/*Card CardStack::operator[] (size_t index) const
-{
- return cardlist[index];
-}*/
-
-//
-// Subscripting operator for a non-const sequence
-//
-/*CardStack::ref CardStack::operator[] (size_t index)
-{
- return ref(this, index);
-}*/
-
-void CardStack::Clear()
-{
- nNumCards = 0;
-}
-
-void CardStack::NewDeck()
-{
- nNumCards = 52;
-
- for(int i = 0; i < 52; i++)
- cardlist[i].nValue = i;
-}
-
-void CardStack::Shuffle()
-{
- int src, dest;
- Card temp;
-
- //shuffle 8 times..
- for(int i = 0; i < 8; i++)
- for(dest = nNumCards - 1; dest > 0; dest--)
- {
- //want to do this:
- // bad: src = rand() % (dest + 1)
- // good: src = rand() / (RAND_MAX / (dest+1) + 1)
-
- //positions from 0 to dest
- src = rand() / (RAND_MAX / (dest+1) + 1);
-
- //swap the cards
- temp = cardlist[src];
- cardlist[src] = cardlist[dest];
- cardlist[dest] = temp;
- }
-}
-
-void CardStack::Reverse()
-{
- for(int i = 0; i < nNumCards / 2; i++)
- {
- Card temp = cardlist[i];
- cardlist[i] = cardlist[nNumCards - i - 1];
- cardlist[nNumCards - i - 1] = temp;
- }
-}
-
-void CardStack::Push(const Card card)
-{
- if(nNumCards < MAX_CARDSTACK_SIZE)
- cardlist[nNumCards++] = card;
-}
-
-void CardStack::Push(const CardStack &cardstack)
-{
- if(nNumCards + cardstack.nNumCards < MAX_CARDSTACK_SIZE)
- {
- int num = cardstack.NumCards();
-
- for(int i = 0; i < num; i++)
- cardlist[nNumCards++] = cardstack.cardlist[i];
- }
-}
-
-CardStack& CardStack::operator += (Card card)
-{
- Push(card);
- return *this;
-}
-
-CardStack& CardStack::operator += (CardStack &cs)
-{
- Push(cs);
- return *this;
-}
-
-CardStack CardStack::operator + (Card card)
-{
- CardStack poo = *this;
- poo.Push(card);
- return poo;
-}
-
-CardStack CardStack::operator + (CardStack &cs)
-{
- CardStack poo = *this;
- poo.Push(cs);
- return poo;
-}
-
-
-Card CardStack::Pop()
-{
- if(nNumCards > 0)
- return cardlist[--nNumCards];
- else
- return 0;
-}
-
-CardStack CardStack::Pop(int items)
-{
- if(items <= nNumCards && nNumCards > 0)
- {
- CardStack cs(*this, nNumCards - items);
-
- nNumCards -= items;
-
- return cs;
- }
- else
- {
- return CardStack();
- }
-}
-
-Card CardStack::Top()
-{
- if(nNumCards > 0)
- return cardlist[nNumCards - 1];
- else
- return 0;
-}
-
-CardStack CardStack::Top(int items)
-{
- if(items <= nNumCards && nNumCards > 0)
- {
- return CardStack (*this, nNumCards - items);
- }
- else
- {
- return CardStack();
- }
-
-}
-
-Card CardStack::RemoveCard(size_t index)
-{
- if(nNumCards == 0 || index >= (size_t)nNumCards)
- return 0;
-
- //put index into reverse range..
- index = nNumCards - index - 1;
-
- Card temp = cardlist[index];
-
- nNumCards--;
-
- for(size_t i = index; i < (size_t)nNumCards; i++)
- {
- cardlist[i] = cardlist[i+1];
- }
-
- return temp;
-}
-
-void CardStack::InsertCard(size_t index, Card card)
-{
- if(nNumCards == MAX_CARDSTACK_SIZE)
- return;
-
- if(index > (size_t)nNumCards)
- return;
-
- if((size_t)nNumCards == index)
- {
- cardlist[nNumCards] = card;
- nNumCards++;
- return;
- }
-
- //put index into reverse range..
- index = nNumCards - index - 1;
-
- nNumCards++;
-
- //make room for the card
- for(size_t i = nNumCards; i > index; i--)
- {
- cardlist[i] = cardlist[i - 1];
- }
-
- cardlist[index] = card;
-}
-
-
-void CardStack::Print()
-{
-// for(int i = 0; i < nNumCards; i++)
-// cout << cardlist[i].HiVal() << " ";
-}
-
-CardStack::CardStack(CardStack ©this, size_t fromindex)
-{
- nNumCards = copythis.nNumCards - fromindex;
-
- for(int i = 0; i < nNumCards; i++)
- cardlist[i] = copythis.cardlist[fromindex + i];
-}
-