aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--diceParser.pro6
-rw-r--r--diceparser.cpp55
-rw-r--r--diceparser.h4
-rw-r--r--main.cpp8
-rw-r--r--node/countexecutenode.cpp9
-rw-r--r--node/countexecutenode.h1
-rw-r--r--node/dicerollernode.cpp8
-rw-r--r--node/dicerollernode.h3
-rw-r--r--node/executionnode.cpp10
-rw-r--r--node/explosedicenode.cpp9
-rw-r--r--node/explosedicenode.h1
-rw-r--r--node/listsetrollnode.cpp8
-rw-r--r--node/listsetrollnode.h1
-rw-r--r--node/rerolldicenode.cpp10
-rw-r--r--node/rerolldicenode.h28
-rw-r--r--node/scalaroperatornode.cpp18
-rw-r--r--node/scalaroperatornode.h3
-rw-r--r--parsingtoolbox.cpp9
-rw-r--r--parsingtoolbox.h7
-rw-r--r--result/diceresult.cpp14
-rw-r--r--result/diceresult.h4
-rw-r--r--result/stringresult.cpp4
-rw-r--r--result/stringresult.h4
23 files changed, 195 insertions, 29 deletions
diff --git a/diceParser.pro b/diceParser.pro
index 2d72fcb..c339933 100644
--- a/diceParser.pro
+++ b/diceParser.pro
@@ -43,7 +43,8 @@ SOURCES += main.cpp \
result/result.cpp \
result/scalarresult.cpp \
parsingtoolbox.cpp \
- result/stringresult.cpp
+ result/stringresult.cpp \
+ dicealias.cpp
HEADERS += \
@@ -56,7 +57,8 @@ HEADERS += \
result/result.h \
result/scalarresult.h \
result/parsingtoolbox.h \
- result/stringresult.h
+ result/stringresult.h \
+ dicealias.h
OTHER_FILES += README.md \
HelpMe.md
diff --git a/diceparser.cpp b/diceparser.cpp
index 09172a0..5e6d06f 100644
--- a/diceparser.cpp
+++ b/diceparser.cpp
@@ -42,6 +42,7 @@
#define DEFAULT_FACES_NUMBER 10
DiceParser::DiceParser()
+ : m_start(NULL)
{
m_parsingToolbox = new ParsingToolBox();
@@ -75,6 +76,44 @@ DiceParser::DiceParser()
m_commandList->append(QObject::tr("la"));
}
+DiceParser::~DiceParser()
+{
+ if(NULL!=m_commandList)
+ {
+ delete m_commandList;
+ m_commandList = NULL;
+ }
+ if(NULL!=m_nodeActionMap)
+ {
+ delete m_nodeActionMap;
+ m_nodeActionMap = NULL;
+ }
+ if(NULL!=m_OptionOp)
+ {
+ delete m_OptionOp;
+ m_OptionOp = NULL;
+ }
+ if(NULL!=m_mapDiceOp)
+ {
+ delete m_mapDiceOp;
+ m_mapDiceOp = NULL;
+ }
+ if(NULL!=m_parsingToolbox)
+ {
+ delete m_parsingToolbox;
+ m_parsingToolbox = NULL;
+ }
+ if(NULL!=m_aliasList)
+ {
+ delete m_aliasList;
+ m_aliasList = NULL;
+ }
+ if(NULL!=m_start)
+ {
+ delete m_start;
+ m_start = NULL;
+ }
+}
ExecutionNode* DiceParser::getLatestNode(ExecutionNode* node)
{
@@ -101,6 +140,11 @@ QList<DiceAlias*>* DiceParser::getAliases()
bool DiceParser::parseLine(QString str)
{
m_errorMap.clear();
+ if(NULL!=m_start)
+ {
+ delete m_start;
+ m_start = NULL;
+ }
m_command = str;
m_start = new StartingNode();
ExecutionNode* newNode = NULL;
@@ -599,6 +643,7 @@ bool DiceParser::readOperator(QString& str,ExecutionNode* previous)
node->setInternalNode(nodeExec);
if(NULL==nodeExec)
{
+ delete node;
return false;
}
if(node->getPriority()>=nodeExec->getPriority())
@@ -610,6 +655,10 @@ bool DiceParser::readOperator(QString& str,ExecutionNode* previous)
return true;
}
+ else
+ {
+ delete node;
+ }
}
else if(readInstructionOperator(str[0]))
{
@@ -851,10 +900,10 @@ bool DiceParser::readOperand(QString& str,ExecutionNode* & node)
if(m_parsingToolbox->readNumber(str,myNumber))
{
- NumberNode* myNumberNode = new NumberNode();
- myNumberNode->setNumber(myNumber);
+ NumberNode* numberNode = new NumberNode();
+ numberNode->setNumber(myNumber);
- node = myNumberNode;
+ node = numberNode;
return true;
}
return false;
diff --git a/diceparser.h b/diceparser.h
index 7ec09ee..1636fc9 100644
--- a/diceparser.h
+++ b/diceparser.h
@@ -83,6 +83,10 @@ public:
* @brief DiceParser default constructor
*/
DiceParser();
+ /**
+ * @brief ~DiceParser
+ */
+ virtual ~DiceParser();
/**
* @brief parseLine, method to call for starting the dice roll. It will parse the command and run the execution tree.
diff --git a/main.cpp b/main.cpp
index 926e3d4..7b70e23 100644
--- a/main.cpp
+++ b/main.cpp
@@ -39,7 +39,8 @@ int main(int argc, char *argv[])
QStringList commands;
- commands << "1L[cheminée,chocolat,épée,arc,chute de pierre]"
+ commands<< "10d10c[>6]+@c[=10]"
+ << "1L[cheminée,chocolat,épée,arc,chute de pierre]"
<< "10d10c[>=6]-@c[=1]"
<< "10d10c[>=6]-@c[=1]-@c[=1]"
<< "10d10c[>6]+@c[=10]"
@@ -61,6 +62,7 @@ int main(int argc, char *argv[])
<< "15D10e10c[8-10]"
<< "10d10e11"
<< "1D8+2D6+7"
+ << "100190D6666666s"
<< "D25"
<< "D25+D10"
<< "D25;D10"
@@ -73,7 +75,7 @@ int main(int argc, char *argv[])
<< "help"
<< "la"
<< "400000D20/400000"
- << "100*3*8";
+ << "100*3*8";//
if(argc>1)
{
@@ -100,4 +102,6 @@ int main(int argc, char *argv[])
main.show();
return a.exec();
#endif
+ delete myParser;
+ return 0;
}
diff --git a/node/countexecutenode.cpp b/node/countexecutenode.cpp
index 281fc80..1050efc 100644
--- a/node/countexecutenode.cpp
+++ b/node/countexecutenode.cpp
@@ -4,7 +4,7 @@
CountExecuteNode::CountExecuteNode()
- : m_scalarResult(new ScalarResult())
+ : m_scalarResult(new ScalarResult()),m_validator(NULL)
{
m_result = m_scalarResult;
}
@@ -12,6 +12,13 @@ void CountExecuteNode::setValidator(Validator* validator)
{
m_validator = validator;
}
+CountExecuteNode::~CountExecuteNode()
+{
+ if(NULL!=m_validator)
+ {
+ delete m_validator;
+ }
+}
void CountExecuteNode::run(ExecutionNode *previous)
{
diff --git a/node/countexecutenode.h b/node/countexecutenode.h
index c7ecdfd..519403b 100644
--- a/node/countexecutenode.h
+++ b/node/countexecutenode.h
@@ -16,6 +16,7 @@ public:
* @brief CountExecuteNode
*/
CountExecuteNode();
+ virtual ~CountExecuteNode();
/**
* @brief run
* @param previous
diff --git a/node/dicerollernode.cpp b/node/dicerollernode.cpp
index 1fd1a2f..f32a033 100644
--- a/node/dicerollernode.cpp
+++ b/node/dicerollernode.cpp
@@ -33,11 +33,9 @@
/// \brief DiceRollerNode::DiceRollerNode
//////////////////////////////////////////////////
DiceRollerNode::DiceRollerNode(quint64 faces)
- : m_faces(faces),m_myDiceResult(new DiceResult())
+ : m_faces(faces),m_diceResult(new DiceResult())
{
- m_mutex=new QMutex();
- m_result=m_myDiceResult;
-
+ m_result=m_diceResult;
}
void DiceRollerNode::run(ExecutionNode* previous)
{
@@ -55,7 +53,7 @@ void DiceRollerNode::run(ExecutionNode* previous)
Die* die = new Die();
die->setFaces(m_faces);
die->roll();
- m_myDiceResult->insertResult(die);
+ m_diceResult->insertResult(die);
}
if(NULL!=m_nextNode)
{
diff --git a/node/dicerollernode.h b/node/dicerollernode.h
index d50fe95..744a4b5 100644
--- a/node/dicerollernode.h
+++ b/node/dicerollernode.h
@@ -36,8 +36,7 @@ public:
private:
quint64 m_diceCount;
quint64 m_faces; /// faces
- DiceResult* m_myDiceResult;
- QMutex* m_mutex;
+ DiceResult* m_diceResult;
};
#endif // DICEROLLERNODE_H
diff --git a/node/executionnode.cpp b/node/executionnode.cpp
index 8bcd6e4..343e8d9 100644
--- a/node/executionnode.cpp
+++ b/node/executionnode.cpp
@@ -8,6 +8,16 @@ ExecutionNode::ExecutionNode()
ExecutionNode::~ExecutionNode()
{
+ if(NULL!=m_result)
+ {
+ delete m_result;
+ m_result = NULL;
+ }
+ if(NULL!=m_nextNode)
+ {
+ delete m_nextNode;
+ m_nextNode = NULL;
+ }
}
Result* ExecutionNode::getResult()
diff --git a/node/explosedicenode.cpp b/node/explosedicenode.cpp
index 42b3c2d..4eae270 100644
--- a/node/explosedicenode.cpp
+++ b/node/explosedicenode.cpp
@@ -1,7 +1,7 @@
#include "explosedicenode.h"
ExploseDiceNode::ExploseDiceNode()
- : m_diceResult(new DiceResult())
+ : m_diceResult(new DiceResult()),m_validator(NULL)
{
m_result = m_diceResult;
}
@@ -33,6 +33,13 @@ void ExploseDiceNode::run(ExecutionNode* previous)
}
}
}
+ExploseDiceNode::~ExploseDiceNode()
+{
+ if(NULL!=m_validator)
+ {
+ delete m_validator;
+ }
+}
void ExploseDiceNode::setValidator(Validator* val)
{
m_validator = val;
diff --git a/node/explosedicenode.h b/node/explosedicenode.h
index b00af1a..f5d0f6e 100644
--- a/node/explosedicenode.h
+++ b/node/explosedicenode.h
@@ -13,6 +13,7 @@ class ExploseDiceNode : public ExecutionNode
{
public:
ExploseDiceNode();
+ virtual ~ExploseDiceNode();
virtual void run(ExecutionNode* previous = NULL);
virtual void setValidator(Validator* );
virtual QString toString()const;
diff --git a/node/listsetrollnode.cpp b/node/listsetrollnode.cpp
index 3ab9a69..777f7b0 100644
--- a/node/listsetrollnode.cpp
+++ b/node/listsetrollnode.cpp
@@ -6,6 +6,14 @@ ListSetRollNode::ListSetRollNode()
{
m_result = m_stringResult;
}
+ListSetRollNode::~ListSetRollNode()
+{
+ if(NULL!=m_diceResult)
+ {
+ delete m_diceResult;
+ m_diceResult =NULL;
+ }
+}
QStringList ListSetRollNode::getList()
{
diff --git a/node/listsetrollnode.h b/node/listsetrollnode.h
index 26fb378..c7925b8 100644
--- a/node/listsetrollnode.h
+++ b/node/listsetrollnode.h
@@ -12,6 +12,7 @@ class ListSetRollNode : public ExecutionNode
{
public:
ListSetRollNode();
+ virtual ~ListSetRollNode();
virtual void run(ExecutionNode* previous = NULL);
virtual QString toString()const;
virtual qint64 getPriority() const;
diff --git a/node/rerolldicenode.cpp b/node/rerolldicenode.cpp
index 81b5e01..a7cc8c4 100644
--- a/node/rerolldicenode.cpp
+++ b/node/rerolldicenode.cpp
@@ -2,10 +2,18 @@
RerollDiceNode::RerollDiceNode()
- : m_myDiceResult(new DiceResult()),m_adding(false)
+ : m_myDiceResult(new DiceResult()),m_adding(false),m_validator(NULL)
{
m_result=m_myDiceResult;
}
+RerollDiceNode::~RerollDiceNode()
+{
+ if(NULL!=m_validator)
+ {
+ delete m_validator;
+ m_validator = NULL;
+ }
+}
void RerollDiceNode::run(ExecutionNode* previous)
{
m_previousNode = previous;
diff --git a/node/rerolldicenode.h b/node/rerolldicenode.h
index 4674a3e..a97e448 100644
--- a/node/rerolldicenode.h
+++ b/node/rerolldicenode.h
@@ -12,16 +12,44 @@ class RerollDiceNode : public ExecutionNode
{
public:
+ /**
+ * @brief The ReRollMode enum
+ */
enum ReRollMode {EQUAL,LESSER,GREATER};
+ /**
+ * @brief RerollDiceNode
+ */
RerollDiceNode();
+ /**
+ * @brief ~RerollDiceNode
+ */
+ virtual ~RerollDiceNode();
+ /**
+ * @brief run
+ * @param previous
+ */
virtual void run(ExecutionNode* previous);
+ /**
+ * @brief setValidator
+ */
virtual void setValidator(Validator* );
+ /**
+ * @brief toString
+ * @return
+ */
virtual QString toString()const;
+ /**
+ * @brief setAddingMode
+ */
virtual void setAddingMode(bool);
+ /**
+ * @brief getPriority
+ * @return
+ */
virtual qint64 getPriority() const;
private:
diff --git a/node/scalaroperatornode.cpp b/node/scalaroperatornode.cpp
index 95fd077..34eb6b8 100644
--- a/node/scalaroperatornode.cpp
+++ b/node/scalaroperatornode.cpp
@@ -15,6 +15,14 @@ ScalarOperatorNode::ScalarOperatorNode()
m_result = m_scalarResult;
}
+ScalarOperatorNode::~ScalarOperatorNode()
+{
+ if(NULL!=m_internalNode)
+ {
+ delete m_internalNode;
+ m_internalNode = NULL;
+ }
+}
void ScalarOperatorNode::run(ExecutionNode* previous)
{
@@ -43,7 +51,7 @@ void ScalarOperatorNode::run(ExecutionNode* previous)
m_internalNode->getResult()->setPrevious(previousResult);
}
- switch(m_myOperator)
+ switch(m_operator)
{
case PLUS:
m_scalarResult->setValue(add(previousResult->getResult(Result::SCALAR).toReal(),internalResult->getResult(Result::SCALAR).toReal()));
@@ -74,7 +82,7 @@ bool ScalarOperatorNode::setOperatorChar(QChar c)
{
if(m_scalarOperationList.contains(c))
{
- m_myOperator = m_scalarOperationList.value(c);
+ m_operator = m_scalarOperationList.value(c);
return true;
}
return false;
@@ -110,10 +118,14 @@ QString ScalarOperatorNode::toString() const
}
qint64 ScalarOperatorNode::getPriority() const
{
- if((m_myOperator==PLUS)||(m_myOperator==MINUS))
+ if((m_operator==PLUS)||(m_operator==MINUS))
+ {
return 1;
+ }
else
+ {
return 2;
+ }
}
void ScalarOperatorNode::generateDotTree(QString& s)
{
diff --git a/node/scalaroperatornode.h b/node/scalaroperatornode.h
index a67e296..7193118 100644
--- a/node/scalaroperatornode.h
+++ b/node/scalaroperatornode.h
@@ -12,6 +12,7 @@ class ScalarOperatorNode : public ExecutionNode
public:
enum ScalarOperator {PLUS,MINUS,DIVIDE,MULTIPLICATION};
ScalarOperatorNode();
+ virtual ~ScalarOperatorNode();
virtual void run(ExecutionNode*);
bool setOperatorChar(QChar c);
void setInternalNode(ExecutionNode* node);
@@ -28,7 +29,7 @@ private:
qint64 multiple(qint64,qint64);
private:
- ScalarOperator m_myOperator;
+ ScalarOperator m_operator;
ExecutionNode* m_internalNode;
QMap<QChar,ScalarOperator> m_scalarOperationList;
ScalarResult* m_scalarResult;
diff --git a/parsingtoolbox.cpp b/parsingtoolbox.cpp
index e03690e..3e09bac 100644
--- a/parsingtoolbox.cpp
+++ b/parsingtoolbox.cpp
@@ -63,6 +63,14 @@ bool ParsingToolBox::readLogicOperator(QString& str,BooleanCondition::LogicOpera
return false;
}
+ParsingToolBox::~ParsingToolBox()
+{
+ if(NULL!=m_logicOp)
+ {
+ delete m_logicOp;
+ m_logicOp = NULL;
+ }
+}
Validator* ParsingToolBox::readValidator(QString& str)
{
Validator* returnVal=NULL;
@@ -181,6 +189,7 @@ bool ParsingToolBox::readList(QString& str,QStringList& list)
{
QString liststr = str.left(pos);
list = liststr.split(",");
+ str=str.remove(0,pos+1);
return true;
}
}
diff --git a/parsingtoolbox.h b/parsingtoolbox.h
index 43dca4e..d7fdc31 100644
--- a/parsingtoolbox.h
+++ b/parsingtoolbox.h
@@ -35,8 +35,15 @@
class ParsingToolBox
{
public:
+ /**
+ * @brief ParsingToolBox
+ */
ParsingToolBox();
/**
+ * @brief ~ParsingToolBox
+ */
+ virtual ~ParsingToolBox();
+ /**
* @brief addSort
* @param e
* @param b
diff --git a/result/diceresult.cpp b/result/diceresult.cpp
index 0cabb11..f87079a 100644
--- a/result/diceresult.cpp
+++ b/result/diceresult.cpp
@@ -35,17 +35,15 @@ QList<Die*>& DiceResult::getResultList()
}
void DiceResult::setResultList(QList<Die*> list)
{
+ qDeleteAll(m_diceValues.begin(), m_diceValues.end());
m_diceValues.clear();
m_diceValues << list;
}
-//bool DiceResult::isScalar() const
-//{
-// if(m_diceValues.size()==1)
-// {
-// return true;
-// }
-// return false;
-//}
+DiceResult::~DiceResult()
+{
+ qDeleteAll(m_diceValues.begin(), m_diceValues.end());
+ m_diceValues.clear();
+}
QVariant DiceResult::getResult(RESULT_TYPE type)
{
diff --git a/result/diceresult.h b/result/diceresult.h
index 838a83d..b805e73 100644
--- a/result/diceresult.h
+++ b/result/diceresult.h
@@ -35,6 +35,10 @@ public:
* @brief DiceResult
*/
DiceResult();
+ /**
+ * @brief ~DiceResult
+ */
+ virtual ~DiceResult();
/**
* @brief getResultList
diff --git a/result/stringresult.cpp b/result/stringresult.cpp
index 4831a76..9f7d2e1 100644
--- a/result/stringresult.cpp
+++ b/result/stringresult.cpp
@@ -8,6 +8,10 @@ void StringResult::setText(QString text)
{
m_value=text;
}
+StringResult::~StringResult()
+{
+
+}
QString StringResult::getText() const
{
diff --git a/result/stringresult.h b/result/stringresult.h
index caa7e06..17c43cd 100644
--- a/result/stringresult.h
+++ b/result/stringresult.h
@@ -13,6 +13,10 @@ public:
* @brief StringResult
*/
StringResult();
+ /**
+ * @brief StringResult
+ */
+ virtual ~StringResult();
/**
* @brief setText
* @param text