diff options
| -rw-r--r-- | diceParser.pro | 6 | ||||
| -rw-r--r-- | diceparser.cpp | 55 | ||||
| -rw-r--r-- | diceparser.h | 4 | ||||
| -rw-r--r-- | main.cpp | 8 | ||||
| -rw-r--r-- | node/countexecutenode.cpp | 9 | ||||
| -rw-r--r-- | node/countexecutenode.h | 1 | ||||
| -rw-r--r-- | node/dicerollernode.cpp | 8 | ||||
| -rw-r--r-- | node/dicerollernode.h | 3 | ||||
| -rw-r--r-- | node/executionnode.cpp | 10 | ||||
| -rw-r--r-- | node/explosedicenode.cpp | 9 | ||||
| -rw-r--r-- | node/explosedicenode.h | 1 | ||||
| -rw-r--r-- | node/listsetrollnode.cpp | 8 | ||||
| -rw-r--r-- | node/listsetrollnode.h | 1 | ||||
| -rw-r--r-- | node/rerolldicenode.cpp | 10 | ||||
| -rw-r--r-- | node/rerolldicenode.h | 28 | ||||
| -rw-r--r-- | node/scalaroperatornode.cpp | 18 | ||||
| -rw-r--r-- | node/scalaroperatornode.h | 3 | ||||
| -rw-r--r-- | parsingtoolbox.cpp | 9 | ||||
| -rw-r--r-- | parsingtoolbox.h | 7 | ||||
| -rw-r--r-- | result/diceresult.cpp | 14 | ||||
| -rw-r--r-- | result/diceresult.h | 4 | ||||
| -rw-r--r-- | result/stringresult.cpp | 4 | ||||
| -rw-r--r-- | result/stringresult.h | 4 |
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. @@ -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 |