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