-//\r
-// CardLib - CardStack class\r
-//\r
-// Freeware\r
-// Copyright J Brown 2001\r
-//\r
-#include <windows.h>\r
-#include <stdlib.h>\r
-\r
-#include "cardstack.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
-}\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
-}\r
-\r
-// Subscripting operator for a constant sequence\r
-//\r
-/*Card CardStack::operator[] (size_t index) const\r
-{\r
- return cardlist[index];\r
-}*/\r
-\r
-//\r
-// Subscripting operator for a non-const sequence\r
-//\r
-/*CardStack::ref CardStack::operator[] (size_t index)\r
-{\r
- return ref(this, index);\r
-}*/\r
-\r
-void CardStack::Clear()\r
-{\r
- nNumCards = 0;\r
-}\r
-\r
-void CardStack::NewDeck()\r
-{\r
- nNumCards = 52;\r
-\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
-}\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
-}\r
-\r
-void CardStack::Push(const Card card)\r
-{\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
-}\r
-\r
-CardStack& CardStack::operator += (Card card)\r
-{\r
- Push(card);\r
- return *this;\r
-}\r
-\r
-CardStack& CardStack::operator += (CardStack &cs)\r
-{\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
-}\r
-\r
-CardStack CardStack::operator + (CardStack &cs)\r
-{\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
-}\r
-\r
-CardStack CardStack::Pop(int items)\r
-{\r
- if(items <= nNumCards && nNumCards > 0)\r
- {\r
- CardStack cs(*this, nNumCards - items);\r
-\r
- nNumCards -= items;\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
-}\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
-\r
-}\r
-\r
-Card CardStack::RemoveCard(size_t index)\r
-{\r
- if(nNumCards == 0 || index >= (size_t)nNumCards)\r
- return 0;\r
-\r
- //put index into reverse range..\r
- index = nNumCards - index - 1;\r
-\r
- Card temp = cardlist[index];\r
-\r
- nNumCards--;\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
-}\r
-\r
-void CardStack::InsertCard(size_t index, Card card)\r
-{\r
- if(nNumCards == MAX_CARDSTACK_SIZE)\r
- return;\r
-\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
-\r
- //put index into reverse range..\r
- index = nNumCards - index - 1;\r
-\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
-\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
-}\r
-\r
-CardStack::CardStack(CardStack ©this, size_t fromindex)\r
-{\r
- nNumCards = copythis.nNumCards - fromindex;\r
-\r
- for(int i = 0; i < nNumCards; i++)\r
- cardlist[i] = copythis.cardlist[fromindex + i];\r
-}\r
-\r
+//
+// CardLib - CardStack class
+//
+// Freeware
+// Copyright J Brown 2001
+//
+#include <windows.h>
+#include <stdlib.h>
+
+#include "cardstack.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];
+}
+