update SVN properties
[reactos.git] / rosapps / games / solitaire / cardlib / cardstack.cpp
index 06b9f25..8273b23 100644 (file)
-//\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 &copythis, 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 &copythis, size_t fromindex)
+{
+    nNumCards = copythis.nNumCards - fromindex;
+
+    for(int i = 0; i < nNumCards; i++)
+        cardlist[i] = copythis.cardlist[fromindex + i];
+}
+