Skip to content

Commit 05186f8

Browse files
committed
Rewrite and implement saving classes to QDataStream.
1 parent 81a8dae commit 05186f8

10 files changed

+193
-87
lines changed

src/CFG/contextfreegrammar.cpp

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include "contextfreegrammar.h"
22
#include <htmlcreator.h>
33
#include <algorithms/constants.h>
4+
#include <QtCore>
45

56
ErrorCode CCFGRule::GetRulesFromString(QSet<CCFGRule>& rules, QString sRule)
67
{
@@ -147,6 +148,26 @@ QString CCFGRule::ToHtml() const {
147148
return CHtmlCreator::ConvertTextToHtml(ToString());
148149
}
149150

151+
QDataStream & CCFGRule::WriteToQDataStream(QDataStream & out) const
152+
{
153+
return out << m_leftNonTerminal << m_rightString;
154+
}
155+
156+
QDataStream & CCFGRule::ReadFromQDataStream(QDataStream & in)
157+
{
158+
return in >> m_leftNonTerminal >> m_rightString;
159+
}
160+
161+
QDataStream& operator<<(QDataStream & out, const CCFGRule& r)
162+
{
163+
return r.WriteToQDataStream(out);
164+
}
165+
166+
QDataStream& operator>>(QDataStream & in, CCFGRule& r)
167+
{
168+
return r.ReadFromQDataStream(in);
169+
}
170+
150171
QVector<QString> CCFGRule::GetRevertedRightRule()
151172
{
152173
QVector<QString> revertedVector;
@@ -300,6 +321,31 @@ bool CContextFreeGrammar::operator==(const CContextFreeGrammar &g) const
300321
this->m_terminalsAlphabet == g.m_terminalsAlphabet;
301322
}
302323

324+
void CContextFreeGrammar::Clear() {
325+
m_nonTerminalsAlphabet.clear();
326+
m_terminalsAlphabet.clear();
327+
m_startNonTerminal.Clear();
328+
m_rules.clear();
329+
}
330+
331+
QDataStream& CContextFreeGrammar::WriteToQDataStream(QDataStream& stream) const {
332+
return stream << m_nonTerminalsAlphabet << m_terminalsAlphabet << m_startNonTerminal << m_rules;
333+
}
334+
335+
QDataStream& CContextFreeGrammar::ReadFromQDataStream(QDataStream& stream){
336+
return stream >> m_nonTerminalsAlphabet >> m_terminalsAlphabet >> m_startNonTerminal >> m_rules;
337+
}
338+
339+
QDataStream & operator<<(QDataStream & out, const CContextFreeGrammar& g)
340+
{
341+
return g.WriteToQDataStream(out);
342+
}
343+
344+
QDataStream & operator>>(QDataStream & in, CContextFreeGrammar& g)
345+
{
346+
return g.ReadFromQDataStream(in);
347+
}
348+
303349

304350
QSet<QString> CSymbol::CSymbolQSetToQStringQSet(const QSet<CSymbol> &csymbolSet)
305351
{
@@ -330,3 +376,46 @@ QSet<QString> CNonTerminal::CNonTerminalQSetToQStringQSet(const QSet<CNonTermina
330376
}
331377
return outSet;
332378
}
379+
380+
QDataStream& CSymbol::WriteToQDataStream(QDataStream & out) const
381+
{
382+
return out << (quint32) m_type << m_symbol;
383+
}
384+
385+
QDataStream& CSymbol::ReadFromQDataStream(QDataStream & in)
386+
{
387+
quint32 tmpType;
388+
in >> m_symbol >> tmpType;
389+
m_type = (TType)tmpType;
390+
return in;
391+
}
392+
393+
QDataStream & operator>>(QDataStream & in, CTerminal & s)
394+
{
395+
return s.ReadFromQDataStream(in);
396+
}
397+
398+
QDataStream & operator<<(QDataStream & out, const CTerminal & s)
399+
{
400+
return s.WriteToQDataStream(out);
401+
}
402+
403+
QDataStream & operator >> (QDataStream & in, CNonTerminal & s)
404+
{
405+
return s.ReadFromQDataStream(in);
406+
}
407+
408+
QDataStream & operator<<(QDataStream & out, const CNonTerminal & s)
409+
{
410+
return s.WriteToQDataStream(out);
411+
}
412+
413+
QDataStream & operator>>(QDataStream & out, CSymbol& s)
414+
{
415+
return s.ReadFromQDataStream(out);
416+
}
417+
418+
QDataStream & operator<<(QDataStream & out, const CSymbol & s)
419+
{
420+
return s.WriteToQDataStream(out);
421+
}

src/CFG/contextfreegrammar.h

Lines changed: 28 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,16 @@ class CSymbol
3030
void Append(QChar charter) {m_symbol.append(charter);}
3131
void Clear() {m_symbol.clear();}
3232
TType GetType() const {return m_type;}
33-
protected:
33+
QDataStream& WriteToQDataStream(QDataStream& out) const;
34+
QDataStream& ReadFromQDataStream(QDataStream& in);
35+
public:
3436
QString m_symbol;
3537
TType m_type;
3638
};
3739

40+
QDataStream& operator>>(QDataStream& in, CSymbol& s);
41+
QDataStream& operator<<(QDataStream& out, const CSymbol& s);
42+
3843
inline uint qHash(const CSymbol& c) {return ::qHash(c.GetString());}
3944

4045
class CTerminal : public CSymbol
@@ -45,6 +50,9 @@ class CTerminal : public CSymbol
4550
static QSet<QString> CTerminalQSetToQStringQSet(const QSet<CTerminal>& csymbolSet);
4651
};
4752

53+
QDataStream& operator>>(QDataStream& in, CTerminal& s);
54+
QDataStream& operator<<(QDataStream& out, const CTerminal& s);
55+
4856
class CNonTerminal : public CSymbol
4957
{
5058
public:
@@ -53,56 +61,18 @@ class CNonTerminal : public CSymbol
5361
static QSet<QString> CNonTerminalQSetToQStringQSet(const QSet<CNonTerminal>& csymbolSet);
5462
};
5563

56-
//typedef CSymbol* CSymbol;
64+
QDataStream& operator>>(QDataStream& in, CNonTerminal& s);
65+
QDataStream& operator<<(QDataStream& out, const CNonTerminal& s);
5766

5867
class CCFGRule
5968
{
6069
public:
61-
CCFGRule(){;}
70+
CCFGRule(){}
6271
CCFGRule(CNonTerminal leftNonTerminal, QVector<CSymbol> rightString)
6372
:m_leftNonTerminal(leftNonTerminal), m_rightString(rightString)
6473
{}
65-
// CCFGRule(QString rule)
66-
// {
67-
// QStringList leftAndRightPart = rule.split("->");
68-
69-
// // Rule has to have 2 parts
70-
// if(leftAndRightPart.size()!= 2) return;
71-
72-
// // Get left non-terminal
73-
// QString leftPart = leftAndRightPart[0];
74-
// QString leftNonterminal;
75-
// const QRegExp leftNonTermExp("^s*<s*(\\w+)s*>s*$");
76-
// if(leftNonTermExp.exactMatch(leftPart))
77-
// {
78-
// leftNonTermExp.indexIn(leftPart);
79-
// leftNonterminal = leftNonTermExp(1);
80-
// }
81-
// else
82-
// { // Left part did not match Backus–Naur Form
83-
// return;
84-
// }
85-
86-
// // Get right rule part
87-
// //
88-
// // First split rule with |
89-
// QStringList rightRules;
90-
// QVector<QVector<CSymbol>> rightPartRules;
91-
// foreach(QString rightPartRule , rightRules)
92-
// {
93-
// rightPartRule.split("<>")
94-
// }
95-
96-
// }
97-
98-
~CCFGRule()
99-
{
100-
;
101-
// foreach(CSymbol symbolPtr, rightString)
102-
// {
103-
// delete symbolPtr;
104-
// }
105-
}
74+
75+
~CCFGRule(){}
10676
static ErrorCode GetRulesFromString(QSet<CCFGRule>& rules, QString sRule);
10777
bool operator==(const CCFGRule &r) const {
10878
return ((this->m_leftNonTerminal == r.m_leftNonTerminal) && (this->m_rightString == r.m_rightString));
@@ -118,8 +88,13 @@ class CCFGRule
11888
CNonTerminal m_leftNonTerminal;
11989
QVector<CSymbol> m_rightString;
12090
QVector<QString> GetRevertedRightRule();
91+
QDataStream& WriteToQDataStream(QDataStream &out) const;
92+
QDataStream& ReadFromQDataStream(QDataStream &in);
12193
};
12294

95+
QDataStream& operator<<(QDataStream &out, const CCFGRule& r);
96+
QDataStream& operator>>(QDataStream &in, CCFGRule& r);
97+
12398
inline uint qHash(const CCFGRule& c){
12499
return (::qHash(c.m_leftNonTerminal.GetString()) /*^ ::qHash(c.m_rightString)*/);
125100
}
@@ -144,12 +119,10 @@ class CContextFreeGrammar
144119
ErrorCode GetFromBackusNaurForm(QString sContextFreeGrammar);
145120
QString ToBackusNaurForm() const;
146121
bool operator==(const CContextFreeGrammar& g)const;
147-
void Clear(){
148-
m_nonTerminalsAlphabet.clear();
149-
m_terminalsAlphabet.clear();
150-
m_startNonTerminal.Clear();
151-
m_rules.clear();
152-
}
122+
void Clear();
123+
QDataStream & WriteToQDataStream(QDataStream & stream) const;
124+
QDataStream & ReadFromQDataStream(QDataStream & stream);
125+
153126
protected:
154127
QSet<CNonTerminal> m_nonTerminalsAlphabet;
155128
QSet<CTerminal> m_terminalsAlphabet;
@@ -158,5 +131,10 @@ class CContextFreeGrammar
158131

159132
QList<CCFGRule> GetListOfRules() const;
160133
};
134+
135+
QDataStream &operator<<(QDataStream& out, const CContextFreeGrammar& g);
136+
QDataStream &operator >> (QDataStream &in, CContextFreeGrammar& g);
137+
138+
161139
//bool operator==(const CContextFreeGrammar& g1, const CContextFreeGrammar& g2);
162140
#endif // CONTEXTFREEGRAMMAR_H

src/finite_machine/computationalrules.cpp

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,16 @@ bool operator<(const ComputationalRules& r1, const ComputationalRules& r2)
5353
return lessThan(r1,r2);
5454
}
5555

56+
QDataStream& operator<<(QDataStream & out, const ComputationalRules & r)
57+
{
58+
return r.WriteToQDataStream(out);
59+
}
60+
61+
QDataStream& operator>>(QDataStream & in, ComputationalRules & r)
62+
{
63+
return r.ReadFromQDataStream(in);
64+
}
65+
5666
QDebug operator<<(QDebug dbg, const ComputationalRules& rule)
5767
{
5868
dbg.nospace() << rule.toString()+'\n';
@@ -96,14 +106,12 @@ QSet<QString> getTos(QList<ComputationalRules> list)
96106
return tos;
97107
}
98108

99-
QDataStream& ComputationalRules::operator<<(QDataStream& out)
109+
QDataStream& ComputationalRules::WriteToQDataStream(QDataStream& out) const
100110
{
101-
out << from << symbol << to;
102-
return out;
111+
return out << from << symbol << to;
103112
}
104113

105-
QDataStream& ComputationalRules::operator>>(QDataStream &in)
114+
QDataStream& ComputationalRules::ReadFromQDataStream(QDataStream &in)
106115
{
107-
in >> from >> symbol >> to;
108-
return in;
116+
return in >> from >> symbol >> to;
109117
}

src/finite_machine/computationalrules.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ class ComputationalRules// : public QObject
4242
// return returnRule;
4343
// }
4444

45-
QDataStream &operator<<(QDataStream& out);
46-
QDataStream &operator>>(QDataStream &in);
45+
QDataStream& WriteToQDataStream(QDataStream& out) const;
46+
QDataStream& ReadFromQDataStream(QDataStream &in);
4747

4848

4949
public:
@@ -54,6 +54,8 @@ class ComputationalRules// : public QObject
5454

5555
bool operator<(const ComputationalRules& r1, const ComputationalRules& r2);
5656

57+
QDataStream &operator<<(QDataStream& out, const ComputationalRules& r);
58+
QDataStream &operator>>(QDataStream &in, ComputationalRules& r);
5759
QDebug operator<<(QDebug dbg, const ComputationalRules& rule);
5860

5961
bool lessThan(const ComputationalRules& r1, const ComputationalRules& r2);

src/finite_machine/finiteautomata.cpp

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1047,6 +1047,17 @@ bool operator ==(const FiniteAutomata FA1, const FiniteAutomata FA2)
10471047
return true;
10481048
}
10491049

1050+
QDataStream & operator<<(QDataStream & out, const FiniteAutomata & fa)
1051+
{
1052+
return fa.WriteToQDataStream(out);
1053+
// TODO: insert return statement here
1054+
}
1055+
1056+
QDataStream & operator >> (QDataStream & in, FiniteAutomata & fa)
1057+
{
1058+
return fa.ReadFromQDataStream(in);
1059+
}
1060+
10501061
QDebug operator<<(QDebug d, const FiniteAutomata &FA)
10511062
{
10521063
d << "FA=(Q,S,R,s,F)";
@@ -1059,15 +1070,14 @@ QDebug operator<<(QDebug d, const FiniteAutomata &FA)
10591070
return d;
10601071
}
10611072

1062-
QDataStream& FiniteAutomata::operator<<(QDataStream &out)
1073+
QDataStream& FiniteAutomata::WriteToQDataStream(QDataStream &out) const
10631074
{
1064-
out << m_states << m_startState << m_finalStates << m_alphabet << m_rules << (quint32)m_nextId << m_coordinates;
1065-
return out;
1075+
return out << m_states << m_startState << m_finalStates << m_alphabet << m_rules << (quint32)m_nextId << m_coordinates;
10661076
}
10671077

10681078

10691079

1070-
QDataStream& FiniteAutomata::operator>>(QDataStream &in)
1080+
QDataStream& FiniteAutomata::ReadFromQDataStream(QDataStream &in)
10711081
{
10721082
quint32 nextId;
10731083
in >> m_states >> m_startState >> m_finalStates >> m_alphabet >> m_rules >> nextId >> m_coordinates;

src/finite_machine/finiteautomata.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@ class FiniteAutomata
9090
QString PrintHtmlRules();
9191
QString PrintHtmlStartState();
9292
QString PrintHtmlFinalStates();
93-
QDataStream& operator<<(QDataStream &out);
94-
QDataStream& operator >> (QDataStream &in);
93+
QDataStream& WriteToQDataStream(QDataStream &out) const;
94+
QDataStream& ReadFromQDataStream(QDataStream &in);
9595

9696
// Getters and setters
9797
public:
@@ -114,6 +114,8 @@ class FiniteAutomata
114114

115115
FiniteAutomata operator +(const FiniteAutomata FA1, const FiniteAutomata FA2);
116116
bool operator==(const FiniteAutomata FA1, const FiniteAutomata FA2);
117+
QDataStream& operator<<(QDataStream& out, const FiniteAutomata& fa);
118+
QDataStream& operator>>(QDataStream& in, FiniteAutomata& fa);
117119

118120
/**
119121
* Overloading operator for debugging purposes

0 commit comments

Comments
 (0)