4e891c11e568f2686238ad20bacf9331c4d7b798
2 // CardLib - CardStack class
5 // Copyright J Brown 2001
10 Card
&CardStack::operator[] (size_t index
)
12 if(index
>= (size_t)nNumCards
) index
= nNumCards
- 1;
13 return cardlist
[nNumCards
- index
- 1];
16 const Card
&CardStack::operator[] (size_t index
) const
18 if(index
>= (size_t)nNumCards
) index
= nNumCards
- 1;
19 return cardlist
[nNumCards
- index
- 1];
22 // Subscripting operator for a constant sequence
24 /*Card CardStack::operator[] (size_t index) const
26 return cardlist[index];
30 // Subscripting operator for a non-const sequence
32 /*CardStack::ref CardStack::operator[] (size_t index)
34 return ref(this, index);
37 void CardStack::Clear()
42 void CardStack::NewDeck()
46 for(int i
= 0; i
< 52; i
++)
47 cardlist
[i
].nValue
= i
;
50 void CardStack::Shuffle()
56 for(int i
= 0; i
< 8; i
++)
57 for(dest
= nNumCards
- 1; dest
> 0; dest
--)
60 // bad: src = rand() % (dest + 1)
61 // good: src = rand() / (RAND_MAX / (dest+1) + 1)
63 //positions from 0 to dest
64 src
= rand() / (RAND_MAX
/ (dest
+1) + 1);
68 cardlist
[src
] = cardlist
[dest
];
69 cardlist
[dest
] = temp
;
73 void CardStack::Reverse()
75 for(int i
= 0; i
< nNumCards
/ 2; i
++)
77 Card temp
= cardlist
[i
];
78 cardlist
[i
] = cardlist
[nNumCards
- i
- 1];
79 cardlist
[nNumCards
- i
- 1] = temp
;
83 void CardStack::Push(const Card card
)
85 if(nNumCards
< MAX_CARDSTACK_SIZE
)
86 cardlist
[nNumCards
++] = card
;
89 void CardStack::Push(const CardStack
&cardstack
)
91 if(nNumCards
+ cardstack
.nNumCards
< MAX_CARDSTACK_SIZE
)
93 int num
= cardstack
.NumCards();
95 for(int i
= 0; i
< num
; i
++)
96 cardlist
[nNumCards
++] = cardstack
.cardlist
[i
];
100 CardStack
& CardStack::operator += (Card card
)
106 CardStack
& CardStack::operator += (CardStack
&cs
)
112 CardStack
CardStack::operator + (Card card
)
114 CardStack poo
= *this;
119 CardStack
CardStack::operator + (CardStack
&cs
)
121 CardStack poo
= *this;
127 Card
CardStack::Pop()
130 return cardlist
[--nNumCards
];
135 CardStack
CardStack::Pop(int items
)
137 if(items
<= nNumCards
&& nNumCards
> 0)
139 CardStack
cs(*this, nNumCards
- items
);
151 Card
CardStack::Top()
154 return cardlist
[nNumCards
- 1];
159 CardStack
CardStack::Top(int items
)
161 if(items
<= nNumCards
&& nNumCards
> 0)
163 return CardStack (*this, nNumCards
- items
);
172 Card
CardStack::RemoveCard(size_t index
)
174 if(nNumCards
== 0 || index
>= (size_t)nNumCards
)
177 //put index into reverse range..
178 index
= nNumCards
- index
- 1;
180 Card temp
= cardlist
[index
];
184 for(size_t i
= index
; i
< (size_t)nNumCards
; i
++)
186 cardlist
[i
] = cardlist
[i
+1];
192 void CardStack::InsertCard(size_t index
, Card card
)
194 if(nNumCards
== MAX_CARDSTACK_SIZE
)
197 if(index
> (size_t)nNumCards
)
200 if((size_t)nNumCards
== index
)
202 cardlist
[nNumCards
] = card
;
207 //put index into reverse range..
208 index
= nNumCards
- index
- 1;
212 //make room for the card
213 for(size_t i
= nNumCards
; i
> index
; i
--)
215 cardlist
[i
] = cardlist
[i
- 1];
218 cardlist
[index
] = card
;
222 void CardStack::Print()
224 // for(int i = 0; i < nNumCards; i++)
225 // cout << cardlist[i].HiVal() << " ";
228 CardStack::CardStack(CardStack
©this
, size_t fromindex
)
230 nNumCards
= copythis
.nNumCards
- fromindex
;
232 for(int i
= 0; i
< nNumCards
; i
++)
233 cardlist
[i
] = copythis
.cardlist
[fromindex
+ i
];