phrase better operators [skip ci]

This commit is contained in:
Hamed Masafi 2018-02-25 20:54:29 +03:30
parent d0f73c1673
commit e049a4409a
2 changed files with 55 additions and 6 deletions

View File

@ -223,15 +223,26 @@ AssignmentPhrase::AssignmentPhrase(AbstractFieldPhrase *l, const AssignmentPhras
// l->data = 0; // l->data = 0;
} }
AssignmentPhrase::~AssignmentPhrase()
{
if (data)
delete data;
}
//AssignmentPhrase::AssignmentPhrase(AssignmentPhrase *l, const AssignmentPhrase *r) //AssignmentPhrase::AssignmentPhrase(AssignmentPhrase *l, const AssignmentPhrase *r)
//{ //{
//// data = new PhraseData(l->data, PhraseData::Append, r->data); //// data = new PhraseData(l->data, PhraseData::Append, r->data);
// qFatal("SS"); // qFatal("SS");
//} //}
AssignmentPhraseList AssignmentPhrase::operator &(const AssignmentPhrase &other) //AssignmentPhraseList AssignmentPhrase::operator &(const AssignmentPhrase &other)
//{
// return AssignmentPhraseList(this, &other);
//}
AssignmentPhraseList::AssignmentPhraseList()
{ {
return AssignmentPhraseList(this, &other);
} }
AssignmentPhraseList::AssignmentPhraseList(const AssignmentPhrase &l) AssignmentPhraseList::AssignmentPhraseList(const AssignmentPhrase &l)
@ -245,10 +256,10 @@ AssignmentPhraseList::AssignmentPhraseList(AssignmentPhraseList *l, const Assign
data.append(r->data); data.append(r->data);
} }
AssignmentPhraseList::AssignmentPhraseList(AssignmentPhrase *l, const AssignmentPhrase *r) AssignmentPhraseList::AssignmentPhraseList(const AssignmentPhrase &r, const AssignmentPhrase &l)
{ {
data.append(l->data); data.append(l.data);
data.append(r->data); data.append(r.data);
} }
AssignmentPhraseList AssignmentPhraseList::operator &(const AssignmentPhrase &ph) AssignmentPhraseList AssignmentPhraseList::operator &(const AssignmentPhrase &ph)
@ -256,6 +267,11 @@ AssignmentPhraseList AssignmentPhraseList::operator &(const AssignmentPhrase &ph
return AssignmentPhraseList(this, &ph); return AssignmentPhraseList(this, &ph);
} }
AssignmentPhraseList::~AssignmentPhraseList()
{
qDeleteAll(data);
}
ConditionalPhrase::ConditionalPhrase() : data(0) ConditionalPhrase::ConditionalPhrase() : data(0)
{ } { }
@ -374,4 +390,27 @@ ConditionalPhrase ConditionalPhrase::operator !()
return f; return f;
} }
AssignmentPhraseList operator &(const AssignmentPhrase &l, const AssignmentPhrase &r)
{
return AssignmentPhraseList(l, r);
}
AssignmentPhraseList operator &(const AssignmentPhrase &l, AssignmentPhrase &&r)
{
r.data = 0;
return AssignmentPhraseList(l, r);
}
AssignmentPhraseList operator &(AssignmentPhrase &&l, const AssignmentPhrase &r)
{
l.data = 0;
return AssignmentPhraseList(l, r);
}
AssignmentPhraseList operator &(AssignmentPhrase &&l, AssignmentPhrase &&r)
{
r.data = l.data = 0;
return AssignmentPhraseList(l, r);
}
NUT_END_NAMESPACE NUT_END_NAMESPACE

View File

@ -115,11 +115,15 @@ class AssignmentPhraseList
{ {
public: public:
QList<PhraseData*> data; QList<PhraseData*> data;
AssignmentPhraseList();
AssignmentPhraseList(const AssignmentPhrase &l); AssignmentPhraseList(const AssignmentPhrase &l);
AssignmentPhraseList(AssignmentPhraseList *l, const AssignmentPhrase *r); AssignmentPhraseList(AssignmentPhraseList *l, const AssignmentPhrase *r);
AssignmentPhraseList(AssignmentPhrase *l, const AssignmentPhrase *r); AssignmentPhraseList(AssignmentPhrase *l, const AssignmentPhrase *r);
AssignmentPhraseList(const AssignmentPhrase &r, const AssignmentPhrase &l);
AssignmentPhraseList operator &(const AssignmentPhrase &ph); AssignmentPhraseList operator &(const AssignmentPhrase &ph);
~AssignmentPhraseList();
}; };
class AssignmentPhrase class AssignmentPhrase
@ -128,12 +132,18 @@ public:
PhraseData *data; PhraseData *data;
AssignmentPhrase(AbstractFieldPhrase *l, QVariant r); AssignmentPhrase(AbstractFieldPhrase *l, QVariant r);
AssignmentPhrase(AbstractFieldPhrase *l, const AssignmentPhrase *r); AssignmentPhrase(AbstractFieldPhrase *l, const AssignmentPhrase *r);
~AssignmentPhrase();
// AssignmentPhrase(AssignmentPhrase *l, const AssignmentPhrase *r); // AssignmentPhrase(AssignmentPhrase *l, const AssignmentPhrase *r);
AssignmentPhraseList operator &(const AssignmentPhrase &other); // AssignmentPhraseList operator &(const AssignmentPhrase &other);
}; };
AssignmentPhraseList operator &(const AssignmentPhrase &l, const AssignmentPhrase &r);
AssignmentPhraseList operator &(const AssignmentPhrase &l, AssignmentPhrase &&r);
AssignmentPhraseList operator &(AssignmentPhrase &&l, const AssignmentPhrase &r);
AssignmentPhraseList operator &(AssignmentPhrase &&l, AssignmentPhrase &&r);
class PhraseList{ class PhraseList{
public: public:
bool isValid; bool isValid;