updated ManaCost copy constructor to do a true deep copy.
added copy constructors to ManaCostHybrid.
This commit is contained in:
@@ -10,6 +10,8 @@ public:
|
|||||||
int value1;
|
int value1;
|
||||||
int value2;
|
int value2;
|
||||||
ManaCostHybrid();
|
ManaCostHybrid();
|
||||||
|
ManaCostHybrid(const ManaCostHybrid& hybridManaCost);
|
||||||
|
ManaCostHybrid(const ManaCostHybrid* hybridManaCost);
|
||||||
ManaCostHybrid(int c1, int v1, int c2, int v2);
|
ManaCostHybrid(int c1, int v1, int c2, int v2);
|
||||||
|
|
||||||
void init(int c1, int v1, int c2, int v2);
|
void init(int c1, int v1, int c2, int v2);
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
#include "WEvent.h"
|
#include "WEvent.h"
|
||||||
#include "MTGAbility.h"
|
#include "MTGAbility.h"
|
||||||
|
|
||||||
|
|
||||||
ManaCost * ManaCost::parseManaCost(string s, ManaCost * _manaCost, MTGCardInstance * c)
|
ManaCost * ManaCost::parseManaCost(string s, ManaCost * _manaCost, MTGCardInstance * c)
|
||||||
{
|
{
|
||||||
ManaCost * manaCost;
|
ManaCost * manaCost;
|
||||||
@@ -234,9 +235,13 @@ ManaCost::ManaCost(int _cost[], int nb_elems)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// pointer copy constructor
|
||||||
|
|
||||||
ManaCost::ManaCost(ManaCost * manaCost)
|
ManaCost::ManaCost(ManaCost * manaCost)
|
||||||
{
|
{
|
||||||
init();
|
init();
|
||||||
|
if ( !manaCost )
|
||||||
|
return;
|
||||||
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);
|
||||||
@@ -245,14 +250,16 @@ ManaCost::ManaCost(ManaCost * manaCost)
|
|||||||
hybrids[i] = manaCost->hybrids[i];
|
hybrids[i] = manaCost->hybrids[i];
|
||||||
|
|
||||||
nbhybrids = manaCost->nbhybrids;
|
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;
|
extraCostsIsCopy = manaCost->extraCostsIsCopy;
|
||||||
|
kicker = NEW ManaCost( manaCost->kicker );
|
||||||
|
Retrace = NEW ManaCost( manaCost->Retrace );
|
||||||
|
BuyBack = NEW ManaCost( manaCost->BuyBack );
|
||||||
|
alternative = NEW ManaCost( manaCost->alternative );
|
||||||
|
FlashBack = NEW ManaCost( manaCost->FlashBack );
|
||||||
|
morph = NEW ManaCost( manaCost->morph );
|
||||||
|
|
||||||
|
// TODO: Need to figure out if a deep copy is necessary
|
||||||
|
extraCosts = manaCost->extraCosts;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy Constructor
|
// Copy Constructor
|
||||||
@@ -265,17 +272,23 @@ ManaCost::ManaCost(const ManaCost& manaCost)
|
|||||||
cost[i] = manaCost.cost[i];
|
cost[i] = manaCost.cost[i];
|
||||||
}
|
}
|
||||||
for (int i = 0 ; i < 10; i++)
|
for (int i = 0 ; i < 10; i++)
|
||||||
hybrids[i] = manaCost.hybrids[i];
|
{
|
||||||
|
ManaCostHybrid *hybridCopy = NEW ManaCostHybrid( manaCost.hybrids[i] );
|
||||||
|
hybrids[i] = hybridCopy;
|
||||||
|
}
|
||||||
|
|
||||||
nbhybrids = manaCost.nbhybrids;
|
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;
|
extraCostsIsCopy = manaCost.extraCostsIsCopy;
|
||||||
|
// make new copies of the pointers for the deep copy
|
||||||
|
kicker = NEW ManaCost( manaCost.kicker );
|
||||||
|
Retrace = NEW ManaCost( manaCost.Retrace );
|
||||||
|
BuyBack = NEW ManaCost( manaCost.BuyBack );
|
||||||
|
alternative = NEW ManaCost( manaCost.alternative );
|
||||||
|
FlashBack = NEW ManaCost( manaCost.FlashBack );
|
||||||
|
morph = NEW ManaCost( manaCost.morph );
|
||||||
|
|
||||||
|
// TODO: Need to figure out if a deep copy is necessary
|
||||||
|
extraCosts = manaCost.extraCosts;
|
||||||
}
|
}
|
||||||
|
|
||||||
// operator=
|
// operator=
|
||||||
@@ -283,21 +296,23 @@ ManaCost & ManaCost::operator= (const ManaCost & manaCost)
|
|||||||
{
|
{
|
||||||
if ( this != &manaCost )
|
if ( this != &manaCost )
|
||||||
{
|
{
|
||||||
int * new_array = new int[Constants::MTG_NB_COLORS];
|
for (int i = 0; i < Constants::MTG_NB_COLORS; i++)
|
||||||
std::memcpy(cost, manaCost.cost, sizeof(new_array));
|
cost[i] = manaCost.cost[i];
|
||||||
for (int i = 0 ; i < 10; i++)
|
|
||||||
hybrids[i] = manaCost.hybrids[i];
|
|
||||||
SAFE_DELETE_ARRAY( new_array );
|
|
||||||
|
|
||||||
|
for (int i = 0 ; i < 10; i++)
|
||||||
|
{
|
||||||
|
SAFE_DELETE( hybrids[i] );
|
||||||
|
hybrids[i] = manaCost.hybrids[i];
|
||||||
|
}
|
||||||
nbhybrids = manaCost.nbhybrids;
|
nbhybrids = manaCost.nbhybrids;
|
||||||
|
extraCosts = manaCost.extraCosts;
|
||||||
|
extraCostsIsCopy = manaCost.extraCostsIsCopy;
|
||||||
kicker = manaCost.kicker;
|
kicker = manaCost.kicker;
|
||||||
Retrace = manaCost.Retrace;
|
Retrace = manaCost.Retrace;
|
||||||
BuyBack = manaCost.BuyBack;
|
BuyBack = manaCost.BuyBack;
|
||||||
alternative = manaCost.alternative;
|
alternative = manaCost.alternative;
|
||||||
FlashBack = manaCost.FlashBack;
|
FlashBack = manaCost.FlashBack;
|
||||||
morph = manaCost.morph;
|
morph = manaCost.morph;
|
||||||
extraCosts = manaCost.extraCosts;
|
|
||||||
extraCostsIsCopy = manaCost.extraCostsIsCopy;
|
|
||||||
}
|
}
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,28 @@ ManaCostHybrid::ManaCostHybrid()
|
|||||||
init(0, 0, 0, 0);
|
init(0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ManaCostHybrid::ManaCostHybrid(const ManaCostHybrid& hybridManaCost)
|
||||||
|
{
|
||||||
|
color1 = hybridManaCost.color1;
|
||||||
|
color2 = hybridManaCost.color2;
|
||||||
|
value1 = hybridManaCost.value1;
|
||||||
|
value2 = hybridManaCost.value2;
|
||||||
|
}
|
||||||
|
|
||||||
|
ManaCostHybrid::ManaCostHybrid(const ManaCostHybrid* hybridManaCost)
|
||||||
|
{
|
||||||
|
if (hybridManaCost)
|
||||||
|
{
|
||||||
|
color1 = hybridManaCost->color1;
|
||||||
|
color2 = hybridManaCost->color2;
|
||||||
|
value1 = hybridManaCost->value1;
|
||||||
|
value2 = hybridManaCost->value2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
color1 = color2 = value1 = value2 = 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
ManaCostHybrid::ManaCostHybrid(int c1, int v1, int c2, int v2)
|
ManaCostHybrid::ManaCostHybrid(int c1, int v1, int c2, int v2)
|
||||||
{
|
{
|
||||||
init(c1, v1, c2, v2);
|
init(c1, v1, c2, v2);
|
||||||
|
|||||||
Reference in New Issue
Block a user