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

View File

@@ -51,6 +51,8 @@ class ManaCost{
ManaCost();
~ManaCost();
ManaCost(ManaCost * _manaCost);
ManaCost(const ManaCost& manaCost);
ManaCost& operator= (const ManaCost& manaCost);
void copy (ManaCost * _manaCost);
int isNull();
int getConvertedCost();
@@ -73,6 +75,7 @@ class ManaCost{
int addHybrid(int c1, int v1, int c2, int v2);
int tryToPayHybrids(ManaCostHybrid * _hybrids[], int _nbhybrids, int diff[]);
int tryToPayHybrids(vector<ManaCostHybrid *> hybridList, int diff[]);
void randomDiffHybrids(ManaCost * _cost, int diff[]);
int add(ManaCost * _cost);
int pay (ManaCost * _cost);

View File

@@ -234,13 +234,72 @@ ManaCost::ManaCost(int _cost[], int nb_elems)
}
ManaCost::ManaCost(ManaCost * _manaCost)
ManaCost::ManaCost(ManaCost * manaCost)
{
init();
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()
@@ -249,6 +308,7 @@ ManaCost::~ManaCost()
{
SAFE_DELETE(hybrids[i]);
}
SAFE_DELETE(extraCosts);
SAFE_DELETE(kicker);
SAFE_DELETE(alternative);
@@ -543,7 +603,16 @@ void ManaCost::randomDiffHybrids(ManaCost * _cost, int diff[])
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[])
{
if (!_nbhybrids)