added copy constructor with operator=

updated constructor for ManaCost*

TODO:  May have to look at ManaPool in case that needs updates as well.
This commit is contained in:
techdragon.nguyen@gmail.com
2011-02-09 12:03:15 +00:00
parent d336f921d7
commit 2c0da5e7e6
2 changed files with 145 additions and 73 deletions
+5 -2
View File
@@ -18,13 +18,13 @@ class ManaCost{
friend std::ostream& operator<<(std::ostream& out, ManaCost* m); friend std::ostream& operator<<(std::ostream& out, ManaCost* m);
friend std::ostream& operator<<(std::ostream& out, ManaCost m); friend std::ostream& operator<<(std::ostream& out, ManaCost m);
protected: protected:
int cost[Constants::MTG_NB_COLORS+1]; int cost[Constants::MTG_NB_COLORS+1];
ManaCostHybrid * hybrids[10]; ManaCostHybrid * hybrids[10];
unsigned int nbhybrids; unsigned int nbhybrids;
int extraCostsIsCopy; int extraCostsIsCopy;
public: public:
enum{ enum{
MANA_UNPAID = 0, MANA_UNPAID = 0,
MANA_PAID = 1, MANA_PAID = 1,
@@ -51,6 +51,8 @@ class ManaCost{
ManaCost(); ManaCost();
~ManaCost(); ~ManaCost();
ManaCost(ManaCost * _manaCost); ManaCost(ManaCost * _manaCost);
ManaCost(const ManaCost& manaCost);
ManaCost& operator= (const ManaCost& manaCost);
void copy (ManaCost * _manaCost); void copy (ManaCost * _manaCost);
int isNull(); int isNull();
int getConvertedCost(); int getConvertedCost();
@@ -73,6 +75,7 @@ class ManaCost{
int addHybrid(int c1, int v1, int c2, int v2); int addHybrid(int c1, int v1, int c2, int v2);
int tryToPayHybrids(ManaCostHybrid * _hybrids[], int _nbhybrids, int diff[]); int tryToPayHybrids(ManaCostHybrid * _hybrids[], int _nbhybrids, int diff[]);
int tryToPayHybrids(vector<ManaCostHybrid *> hybridList, int diff[]);
void randomDiffHybrids(ManaCost * _cost, int diff[]); void randomDiffHybrids(ManaCost * _cost, int diff[]);
int add(ManaCost * _cost); int add(ManaCost * _cost);
int pay (ManaCost * _cost); int pay (ManaCost * _cost);
+71 -2
View File
@@ -234,13 +234,72 @@ ManaCost::ManaCost(int _cost[], int nb_elems)
} }
ManaCost::ManaCost(ManaCost * _manaCost) ManaCost::ManaCost(ManaCost * manaCost)
{ {
init(); init();
for (int i = 0; i <= Constants::MTG_NB_COLORS; i++) for (int i = 0; i <= Constants::MTG_NB_COLORS; i++)
{ {
cost[i] = _manaCost->getCost(i); cost[i] = manaCost->getCost(i);
} }
for (int i = 0 ; i < 10; i++)
hybrids[i] = manaCost->hybrids[i];
nbhybrids = manaCost->nbhybrids;
kicker = manaCost->kicker;
Retrace = manaCost->Retrace;
BuyBack = manaCost->BuyBack;
alternative = manaCost->alternative;
FlashBack = manaCost->FlashBack;
extraCosts = manaCost->extraCosts;
morph = manaCost->morph;
extraCostsIsCopy = manaCost->extraCostsIsCopy;
}
// Copy Constructor
ManaCost::ManaCost(const ManaCost& manaCost)
{
for (int i = 0; i <= Constants::MTG_NB_COLORS; i++)
{
cost[i] = manaCost.cost[i];
}
for (int i = 0 ; i < 10; i++)
hybrids[i] = manaCost.hybrids[i];
nbhybrids = manaCost.nbhybrids;
kicker = manaCost.kicker;
Retrace = manaCost.Retrace;
BuyBack = manaCost.BuyBack;
alternative = manaCost.alternative;
FlashBack = manaCost.FlashBack;
morph = manaCost.morph;
extraCosts = manaCost.extraCosts;
extraCostsIsCopy = manaCost.extraCostsIsCopy;
}
// operator=
ManaCost & ManaCost::operator= (const ManaCost & manaCost)
{
if ( this != &manaCost )
{
int * new_array = new int[Constants::MTG_NB_COLORS];
std::memcpy(cost, manaCost.cost, sizeof(new_array));
for (int i = 0 ; i < 10; i++)
hybrids[i] = manaCost.hybrids[i];
SAFE_DELETE_ARRAY( new_array );
nbhybrids = manaCost.nbhybrids;
kicker = manaCost.kicker;
Retrace = manaCost.Retrace;
BuyBack = manaCost.BuyBack;
alternative = manaCost.alternative;
FlashBack = manaCost.FlashBack;
morph = manaCost.morph;
extraCosts = manaCost.extraCosts;
extraCostsIsCopy = manaCost.extraCostsIsCopy;
}
return *this;
} }
ManaCost::~ManaCost() ManaCost::~ManaCost()
@@ -249,6 +308,7 @@ ManaCost::~ManaCost()
{ {
SAFE_DELETE(hybrids[i]); SAFE_DELETE(hybrids[i]);
} }
SAFE_DELETE(extraCosts); SAFE_DELETE(extraCosts);
SAFE_DELETE(kicker); SAFE_DELETE(kicker);
SAFE_DELETE(alternative); SAFE_DELETE(alternative);
@@ -543,7 +603,16 @@ void ManaCost::randomDiffHybrids(ManaCost * _cost, int diff[])
diff[h->color1 * 2 + 1] -= h->value1; diff[h->color1 * 2 + 1] -= h->value1;
} }
} }
int ManaCost::tryToPayHybrids(vector<ManaCostHybrid *> hybridList, int diff[])
{
if (hybridList.empty())
return 1;
}
/**
starting from the end of the array (diff)
*/
int ManaCost::tryToPayHybrids(ManaCostHybrid * _hybrids[], int _nbhybrids, int diff[]) int ManaCost::tryToPayHybrids(ManaCostHybrid * _hybrids[], int _nbhybrids, int diff[])
{ {
if (!_nbhybrids) if (!_nbhybrids)