mirror of
https://github.com/reactos/reactos.git
synced 2025-06-14 13:28:30 +00:00
Git conversion: Make reactos the root directory, move rosapps, rostests, wallpapers into modules, and delete rossubsys.
This commit is contained in:
parent
b94e2d8ca0
commit
c2c66aff7d
24198 changed files with 0 additions and 37285 deletions
235
sdk/lib/3rdparty/cardlib/cardstack.cpp
vendored
Normal file
235
sdk/lib/3rdparty/cardlib/cardstack.cpp
vendored
Normal file
|
@ -0,0 +1,235 @@
|
|||
//
|
||||
// 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];
|
||||
}
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue