From 2d9fe10724dc1d5de86e63670536b9a1b6599ba1 Mon Sep 17 00:00:00 2001 From: Renaud G Date: Tue, 9 Jun 2015 08:44:49 +0200 Subject: -add method to read list with probability value. It sets range for all values in List node. --- diceparser.cpp | 9 ++++- node/listsetrollnode.cpp | 74 ++++++++++++++++++++++++++++++-------- node/listsetrollnode.h | 11 +++++- parsingtoolbox.cpp | 94 ++++++++++++++++++++++++++++++++++++++++++++++-- parsingtoolbox.h | 12 ++++++- range.cpp | 27 ++++++++++++++ range.h | 9 ++++- 7 files changed, 215 insertions(+), 21 deletions(-) diff --git a/diceparser.cpp b/diceparser.cpp index 570c96b..4f0645e 100644 --- a/diceparser.cpp +++ b/diceparser.cpp @@ -555,9 +555,16 @@ bool DiceParser::readDice(QString& str,ExecutionNode* & node) else if(currentOperator ==L) { QStringList list; - if(m_parsingToolbox->readList(str,list)) + QList listRange; + ParsingToolBox::LIST_OPERATOR op = m_parsingToolbox->readListOperator(str); + if(m_parsingToolbox->readList(str,list,listRange)) { ListSetRollNode* lsrNode = new ListSetRollNode(); + lsrNode->setRangeList(listRange); + if(op == ParsingToolBox::UNIQUE) + { + lsrNode->setUnique(true); + } lsrNode->setListValue(list); node = lsrNode; return true; diff --git a/node/listsetrollnode.cpp b/node/listsetrollnode.cpp index fdc17a5..c7f2c45 100644 --- a/node/listsetrollnode.cpp +++ b/node/listsetrollnode.cpp @@ -22,7 +22,7 @@ #include "die.h" ListSetRollNode::ListSetRollNode() - :m_diceResult(new DiceResult()),m_stringResult(new StringResult()) + :m_diceResult(new DiceResult()),m_stringResult(new StringResult()),m_unique(false) { m_result = m_stringResult; } @@ -46,12 +46,6 @@ QString ListSetRollNode::toString() const qint64 ListSetRollNode::getPriority() const { qint64 priority=4; -// if(NULL!=m_nextNode) -// { -// priority = m_nextNode->getPriority(); -// } - - return priority; } void ListSetRollNode::run(ExecutionNode* previous) @@ -68,13 +62,11 @@ void ListSetRollNode::run(ExecutionNode* previous) for(quint64 i=0; i < diceCount ; ++i) { Die* die = new Die(); - die->setFaces(m_values.size()); + //die->setFaces(m_values.size()); + computeFacesNumber(die); die->roll(); m_diceResult->insertResult(die); - if(die->getValue()-1getValue()-1]; - } + getValueFromDie(die,rollResult); } m_stringResult->setText(rollResult.join(",")); if(NULL!=m_nextNode) @@ -83,11 +75,63 @@ void ListSetRollNode::run(ExecutionNode* previous) } } } - - - } void ListSetRollNode::setListValue(QStringList lirs) { m_values = lirs; } +void ListSetRollNode::setUnique(bool u) +{ + m_unique = u; +} +void ListSetRollNode::setRangeList(QList& ranges) +{ + m_rangeList = ranges; +} +void ListSetRollNode::computeFacesNumber(Die* die) +{ + if(m_rangeList.isEmpty()) + { + die->setFaces(m_values.size()); + } + else + { + Q_ASSERT(m_values.size() == m_rangeList.size()); + qint64 max; + int i=0; + foreach(Range range, m_rangeList) + { + if((i==0)||(maxsetFaces(max); + } + +} +void ListSetRollNode::getValueFromDie(Die* die,QStringList& rollResult) +{ + if(m_rangeList.isEmpty()) + { + if(die->getValue()-1getValue()-1]; + } + } + else + { + Q_ASSERT(m_values.size() == m_rangeList.size()); + int i=0; + foreach (Range range, m_rangeList) + { + qDebug() << range.toString()<< die->getValue(); + if(range.hasValid(die,false)) + { + rollResult << m_values[i]; + } + ++i; + } + } +} diff --git a/node/listsetrollnode.h b/node/listsetrollnode.h index 3102ade..4a11da2 100644 --- a/node/listsetrollnode.h +++ b/node/listsetrollnode.h @@ -27,6 +27,7 @@ #include "executionnode.h" #include "result/diceresult.h" #include "result/stringresult.h" +#include "range.h" /** * @brief The ListSetRollNode class is dedicated to pick up item from list. */ @@ -41,12 +42,20 @@ public: QStringList getList(); void setListValue(QStringList); + void setUnique(bool ); + void setRangeList(QList&); + + +private: + void getValueFromDie(Die* die,QStringList& rollResult); + void computeFacesNumber(Die* die); private: QStringList m_values; DiceResult* m_diceResult; StringResult* m_stringResult; - + bool m_unique; + QList m_rangeList; }; #endif // LISTSETROLLNODE_H diff --git a/parsingtoolbox.cpp b/parsingtoolbox.cpp index f6b1f12..696d330 100644 --- a/parsingtoolbox.cpp +++ b/parsingtoolbox.cpp @@ -179,17 +179,20 @@ bool ParsingToolBox::readCloseParentheses(QString& str) else return false; } -bool ParsingToolBox::readList(QString& str,QStringList& list) +bool ParsingToolBox::readList(QString& str,QStringList& list,QList& ranges) { if(str.startsWith("[")) { str=str.remove(0,1); - int pos = str.indexOf("]"); + int pos = str.lastIndexOf("]"); if(-1!=pos) { QString liststr = str.left(pos); list = liststr.split(","); str=str.remove(0,pos+1); + readProbability(list,ranges); + + return true; } } @@ -270,4 +273,91 @@ bool ParsingToolBox::readDiceRange(QString& str,int& start, int& end) } } +} +ParsingToolBox::LIST_OPERATOR ParsingToolBox::readListOperator(QString& str) +{ + + if(str.startsWith('u')) + { + return UNIQUE; + } + return NONE; +} +void ParsingToolBox::readProbability(QStringList& str,QList& ranges) +{ + quint64 totalDistance=0; + quint64 undefDistance = 0; + int undefCount=0; + int maxValue = 0; + int i=0; + int j=0; + //range + foreach(QString line,str) + { + int pos = line.indexOf('['); + if(-1!=pos) + { + QString range = line.right(line.length()-pos); + line = line.left(pos); + str[j]=line; + int start; + int end; + if(readDiceRange(range,start,end)) + { + Range range; + range.setValue(start,end); + ranges.append(range); + totalDistance += end-start+1; + ++i; + } + else + { + Range range; + range.setStart(start); + ranges.append(range); + ++undefCount; + undefDistance +=start; + } + if((end>maxValue)||(i==1)) + { + maxValue = end; + } + } + ++j; + + } + + + + + ///Normalize list +// qDebug() << 100 - undefDistance; +// qDebug() << totalDistance; + + qint64 totalDistPourcent = totalDistance * undefDistance / (100-undefDistance); + + if(totalDistPourcent& ranges); /** * @brief isValidValidator * @param previous @@ -123,6 +124,15 @@ public: * @return */ bool readDiceRange(QString& str,int& start, int& end); + /** + * @brief readListOperator + * @param str + * @return + */ + LIST_OPERATOR readListOperator(QString& str); + + void readProbability(QStringList& str,QList& ranges); + private: QMap* m_logicOp; diff --git a/range.cpp b/range.cpp index 909c96c..2332d7d 100644 --- a/range.cpp +++ b/range.cpp @@ -22,6 +22,7 @@ #include "range.h" Range::Range() + : m_hasEnd(false),m_hasStart(false) { @@ -30,6 +31,9 @@ void Range::setValue(qint64 s,qint64 e) { m_start = s; m_end=e; + + m_hasEnd = true; + m_hasStart = true; } qint64 Range::hasValid(Die* m,bool recursive, bool unhighlight) const @@ -64,3 +68,26 @@ quint8 Range::getValidRangeSize(quint64 faces) const Q_UNUSED(faces); return m_end-m_start; } +void Range::setStart(qint64 start) +{ + m_start = start; + m_hasStart = true; +} +void Range::setEnd(qint64 end) +{ + m_end = end; + m_hasEnd = true; +} + +bool Range::isFullyDefined() +{ + return (m_hasEnd & m_hasStart); +} +qint64 Range::getStart() const +{ + return m_start; +} +qint64 Range::getEnd() const +{ + return m_end; +} diff --git a/range.h b/range.h index e50a48e..eca8c85 100644 --- a/range.h +++ b/range.h @@ -33,15 +33,22 @@ class Range : public Validator public: Range(); void setValue(qint64,qint64); - + void setStart(qint64); + void setEnd(qint64); virtual qint64 hasValid(Die* b,bool recursive,bool unlight = false) const; virtual QString toString(); virtual quint8 getValidRangeSize(quint64 faces) const; + bool isFullyDefined(); + qint64 getStart() const; + qint64 getEnd() const; + private: qint64 m_start; qint64 m_end; + bool m_hasEnd; + bool m_hasStart; }; #endif // RANGE_H -- cgit v1.2.3-70-g09d2 From b5c5cfadeb8546274048c1e3c1d97f7c2223a042 Mon Sep 17 00:00:00 2001 From: Renaud G Date: Thu, 11 Jun 2015 11:16:04 +0200 Subject: remove debug message --- parsingtoolbox.cpp | 8 -------- 1 file changed, 8 deletions(-) diff --git a/parsingtoolbox.cpp b/parsingtoolbox.cpp index 696d330..e7c603c 100644 --- a/parsingtoolbox.cpp +++ b/parsingtoolbox.cpp @@ -327,13 +327,6 @@ void ParsingToolBox::readProbability(QStringList& str,QList& ranges) } - - - - ///Normalize list -// qDebug() << 100 - undefDistance; -// qDebug() << totalDistance; - qint64 totalDistPourcent = totalDistance * undefDistance / (100-undefDistance); if(totalDistPourcent& ranges) tmp.setEnd(maxValue+(truc*totalDistPourcent)); maxValue = maxValue+(truc*totalDistPourcent); - qDebug() << truc << totalDistPourcent << undefDistance << totalDistance << maxValue << dist << totalDistPourcent << tmp.toString(); ranges[i]=tmp; } } -- cgit v1.2.3-70-g09d2 From 34a3b555c61d9ce6c5f6be618f2fb0b83ba71b1b Mon Sep 17 00:00:00 2001 From: Renaud G Date: Wed, 8 Jul 2015 16:04:22 +0200 Subject: add management of list with unequivalence --- node/listsetrollnode.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/node/listsetrollnode.cpp b/node/listsetrollnode.cpp index c7f2c45..ce2f2ac 100644 --- a/node/listsetrollnode.cpp +++ b/node/listsetrollnode.cpp @@ -62,7 +62,6 @@ void ListSetRollNode::run(ExecutionNode* previous) for(quint64 i=0; i < diceCount ; ++i) { Die* die = new Die(); - //die->setFaces(m_values.size()); computeFacesNumber(die); die->roll(); m_diceResult->insertResult(die); @@ -101,12 +100,14 @@ void ListSetRollNode::computeFacesNumber(Die* die) int i=0; foreach(Range range, m_rangeList) { - if((i==0)||(maxsetFaces(max); } @@ -126,7 +127,6 @@ void ListSetRollNode::getValueFromDie(Die* die,QStringList& rollResult) int i=0; foreach (Range range, m_rangeList) { - qDebug() << range.toString()<< die->getValue(); if(range.hasValid(die,false)) { rollResult << m_values[i]; -- cgit v1.2.3-70-g09d2 From 479b2127e00c790f18b195494c11e1959ffc0eff Mon Sep 17 00:00:00 2001 From: Renaud G Date: Wed, 19 Aug 2015 18:10:24 +0200 Subject: add new validator for support several condition in one operator --- CMakeLists.txt | 1 + compositevalidator.cpp | 149 +++++++++++++++++++++++++++++++++++++++++++++++++ compositevalidator.h | 54 ++++++++++++++++++ 3 files changed, 204 insertions(+) create mode 100644 compositevalidator.cpp create mode 100644 compositevalidator.h diff --git a/CMakeLists.txt b/CMakeLists.txt index e8b4c5c..9aae367 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,6 +25,7 @@ add_executable( range.cpp booleancondition.cpp validator.cpp + compositevalidator.cpp die.cpp parsingtoolbox.cpp dicealias.cpp diff --git a/compositevalidator.cpp b/compositevalidator.cpp new file mode 100644 index 0000000..0715ba2 --- /dev/null +++ b/compositevalidator.cpp @@ -0,0 +1,149 @@ +/*************************************************************************** +* Copyright (C) 2014 by Renaud Guezennec * +* http://renaudguezennec.homelinux.org/accueil,3.html * +* * +* This file is part of DiceParser * +* * +* DiceParser is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program; if not, write to the * +* Free Software Foundation, Inc., * +* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +***************************************************************************/ +#include "compositevalidator.h" + + +CompositeValidator::BooleanCondition() +{ +} +qint64 CompositeValidator::hasValid(Die* b,bool recursive,bool unhighlight) const +{ + + int i = 0; + qint64 sum = 0; + foreach(Validator* validator, m_validatorList) + { + qint64 val = validator->hasValid(b,recursive,unhighlight); + if(i==0) + { + sum = val; + } + else + { + switch(m_operators[i-1]) + { + case OR: + sum |= val; + break; + case EXCLUSIVE_OR: + sum ^= val;/// @todo may required to be done by hand + break; + case AND: + sum &= val; + break; + } + } + ++i; + } + + /*QList listValues; + if(recursive) + { + listValues = b->getListValue(); + } + else + { + listValues.append(b->getLastRolledValue()); + } + + qint64 sum= 0; + foreach(qint64 value, listValues) + { + switch(m_operator) + { + case Equal: + sum+=(value==m_value)?1:0; + break; + case GreaterThan: + sum+= (value>m_value)?1:0; + break; + case LesserThan: + sum+= (value=m_value)?1:0; + break; + case LesserOrEqual: + sum+= (value<=m_value)?1:0; + break; + } + } + if((unhighlight)&&(sum==0)) + { + b->setHighlighted(false); + } + else + { + b->setHighlighted(true); + } + + return sum;*/ +} + +void CompositeValidator::setOperator(LogicOperator m) +{ + m_operator = m; +} + +void CompositeValidator::setValue(qint64 v) +{ + m_value=v; +} +QString CompositeValidator::toString() +{ + QString str=""; + switch (m_operator) + { + case Equal: + str.append("="); + break; + case GreaterThan: + str.append(">"); + break; + case LesserThan: + str.append("<"); + break; + case GreaterOrEqual: + str.append(">="); + break; + case LesserOrEqual: + str.append("<="); + break; + } + return QString("[%1%2]").arg(str).arg(m_value); +} +quint8 CompositeValidator::getValidRangeSize(quint64 faces) const +{ + switch (m_operator) + { + case Equal: + return 1; + case GreaterThan: + return faces-m_value; + case LesserThan: + return m_value-1; + case GreaterOrEqual: + return faces-(m_value-1); + case LesserOrEqual: + return m_value; + } +} diff --git a/compositevalidator.h b/compositevalidator.h new file mode 100644 index 0000000..b207db9 --- /dev/null +++ b/compositevalidator.h @@ -0,0 +1,54 @@ +/*************************************************************************** +* Copyright (C) 2014 by Renaud Guezennec * +* http://renaudguezennec.homelinux.org/accueil,3.html * +* * +* This file is part of DiceParser * +* * +* DiceParser is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program; if not, write to the * +* Free Software Foundation, Inc., * +* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +***************************************************************************/ +#ifndef COMPOSITEVALIDATOR_H +#define COMPOSITEVALIDATOR_H + +#include +#include +#include + +#include "validator.h" +/** + * @brief The BooleanCondition class is a Validator class checking validity from logic expression. + * It manages many operators (see : @ref LogicOperator). + */ +class CompositeValidator : public Validator +{ +public: + enum LogicOperation { OR, EXCLUSIVE_OR , AND}; + CompositeValidator(); + + virtual qint64 hasValid(Die* b,bool recursive, bool unhighlight = false) const; + + void addOperation(LogicOperation m); + void setValue(qint64); + QString toString(); + + virtual quint8 getValidRangeSize(quint64 faces) const; + +private: + QVector m_operators; + qint64 m_value; + QList m_validatorList; +}; + +#endif // BOOLEANCONDITION_H -- cgit v1.2.3-70-g09d2 From 129b908eb933c4cedb0a1c1bfde5b83620c46d3e Mon Sep 17 00:00:00 2001 From: Renaud G Date: Thu, 20 Aug 2015 00:29:19 +0200 Subject: -Range size in quint64 --- booleancondition.cpp | 2 +- booleancondition.h | 2 +- range.cpp | 2 +- range.h | 2 +- validator.h | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/booleancondition.cpp b/booleancondition.cpp index 533ec02..043e2c8 100644 --- a/booleancondition.cpp +++ b/booleancondition.cpp @@ -103,7 +103,7 @@ QString BooleanCondition::toString() } return QString("[%1%2]").arg(str).arg(m_value); } -quint8 BooleanCondition::getValidRangeSize(quint64 faces) const +quint64 BooleanCondition::getValidRangeSize(quint64 faces) const { switch (m_operator) { diff --git a/booleancondition.h b/booleancondition.h index cb37b9e..2177106 100644 --- a/booleancondition.h +++ b/booleancondition.h @@ -40,7 +40,7 @@ public: void setValue(qint64); QString toString(); - virtual quint8 getValidRangeSize(quint64 faces) const; + virtual quint64 getValidRangeSize(quint64 faces) const; private: LogicOperator m_operator; diff --git a/range.cpp b/range.cpp index 2332d7d..482bcff 100644 --- a/range.cpp +++ b/range.cpp @@ -63,7 +63,7 @@ QString Range::toString() { return QString("[%1-%2]").arg(m_start).arg(m_end); } -quint8 Range::getValidRangeSize(quint64 faces) const +quint64 Range::getValidRangeSize(quint64 faces) const { Q_UNUSED(faces); return m_end-m_start; diff --git a/range.h b/range.h index eca8c85..f9849ce 100644 --- a/range.h +++ b/range.h @@ -38,7 +38,7 @@ public: virtual qint64 hasValid(Die* b,bool recursive,bool unlight = false) const; virtual QString toString(); - virtual quint8 getValidRangeSize(quint64 faces) const; + virtual quint64 getValidRangeSize(quint64 faces) const; bool isFullyDefined(); qint64 getStart() const; diff --git a/validator.h b/validator.h index 6dd8292..4ccd721 100644 --- a/validator.h +++ b/validator.h @@ -54,7 +54,7 @@ public: * @param faces * @return */ - virtual quint8 getValidRangeSize(quint64 faces) const = 0 ; + virtual quint64 getValidRangeSize(quint64 faces) const = 0 ; }; #endif // VALIDATOR_H -- cgit v1.2.3-70-g09d2 From f3ed92235184ec754bbf96eadf0693ae67e5de1b Mon Sep 17 00:00:00 2001 From: Renaud G Date: Thu, 20 Aug 2015 00:30:15 +0200 Subject: Add compositevalidator to explose operator. --- parsingtoolbox.cpp | 114 +++++++++++++++++++++++++++++++++++++++++++---------- parsingtoolbox.h | 14 +++++-- 2 files changed, 104 insertions(+), 24 deletions(-) diff --git a/parsingtoolbox.cpp b/parsingtoolbox.cpp index e7c603c..50b166a 100644 --- a/parsingtoolbox.cpp +++ b/parsingtoolbox.cpp @@ -33,6 +33,12 @@ ParsingToolBox::ParsingToolBox() m_logicOp->insert("<",BooleanCondition::LesserThan); m_logicOp->insert("=",BooleanCondition::Equal); m_logicOp->insert(">",BooleanCondition::GreaterThan); + + + m_logicOperation = new QMap(); + m_logicOperation->insert("|",CompositeValidator::OR); + m_logicOperation->insert("^",CompositeValidator::EXCLUSIVE_OR); + m_logicOperation->insert("&",CompositeValidator::AND); } ExecutionNode* ParsingToolBox::addSort(ExecutionNode* e,bool b) { @@ -74,27 +80,23 @@ ParsingToolBox::~ParsingToolBox() Validator* ParsingToolBox::readValidator(QString& str) { Validator* returnVal=NULL; - bool expectSquareBrasket=false; + bool isOk = true; - if((str.startsWith("["))) - { - str=str.remove(0,1); - expectSquareBrasket = true; - } + BooleanCondition::LogicOperator myLogicOp = BooleanCondition::Equal; bool hasReadLogicOperator = readLogicOperator(str,myLogicOp); - int value=0; + qint64 value=0; if(readNumber(str,value)) { if(str.startsWith("-")) { str=str.remove(0,1); - int end=0; + qint64 end=0; if(readNumber(str,end)) { - if(expectSquareBrasket) + /* if(expectSquareBrasket) { if(str.startsWith("]")) { @@ -105,7 +107,7 @@ Validator* ParsingToolBox::readValidator(QString& str) { isOk=false; } - } + }*/ if(isOk) { str=str.remove(0,1); @@ -117,12 +119,12 @@ Validator* ParsingToolBox::readValidator(QString& str) } else { - if((expectSquareBrasket)&&(str.startsWith("]"))) + /* if((expectSquareBrasket)&&(str.startsWith("]"))) { str=str.remove(0,1); isOk=true; - } - if(isOk) + }*/ + //if(isOk) { BooleanCondition* condition = new BooleanCondition(); condition->setValue(value); @@ -133,14 +135,86 @@ Validator* ParsingToolBox::readValidator(QString& str) } return returnVal; } -bool ParsingToolBox::readNumber(QString& str, int& myNumber) +Validator* ParsingToolBox::readCompositeValidator(QString& str) +{ + bool expectSquareBrasket=false; + if((str.startsWith("["))) + { + str=str.remove(0,1); + expectSquareBrasket = true; + } + + Validator* tmp = readValidator(str); + CompositeValidator::LogicOperation opLogic; + + QVector* operators = new QVector(); + QList* validatorList = new QList(); + + while(NULL!=tmp) + { + bool hasOperator = readLogicOperation(str,opLogic); + if( hasOperator ) + { + operators->append(opLogic); + validatorList->append(tmp); + tmp = readValidator(str); + } + else + { + if((expectSquareBrasket)&&(str.startsWith("]"))) + { + str=str.remove(0,1); + //isOk=true; + } + + if(!validatorList->isEmpty()) + { + validatorList->append(tmp); + } + else + { + return tmp; + } + tmp = NULL; + } + + } + CompositeValidator* validator = new CompositeValidator(); + validator->setOperationList(operators); + validator->setValidatorList(validatorList); + + return validator; +} +bool ParsingToolBox::readLogicOperation(QString& str,CompositeValidator::LogicOperation& op) +{ + QString longKey; + foreach(QString tmp, m_logicOperation->keys()) + { + if(str.startsWith(tmp)) + { + if(longKey.size()0) + { + str=str.remove(0,longKey.size()); + op = m_logicOperation->value(longKey); + return true; + } + + return false; +} + +bool ParsingToolBox::readNumber(QString& str, qint64& myNumber) { if(str.isEmpty()) return false; QString number; int i=0; - while(igetPreviousNode(); } } -bool ParsingToolBox::readDiceRange(QString& str,int& start, int& end) +bool ParsingToolBox::readDiceRange(QString& str,qint64& start, qint64& end) { bool expectSquareBrasket=false; @@ -300,8 +372,8 @@ void ParsingToolBox::readProbability(QStringList& str,QList& ranges) QString range = line.right(line.length()-pos); line = line.left(pos); str[j]=line; - int start; - int end; + qint64 start; + qint64 end; if(readDiceRange(range,start,end)) { Range range; diff --git a/parsingtoolbox.h b/parsingtoolbox.h index cb97708..3d37f7b 100644 --- a/parsingtoolbox.h +++ b/parsingtoolbox.h @@ -27,6 +27,7 @@ #include "node/executionnode.h" #include "node/dicerollernode.h" #include "booleancondition.h" +#include "compositevalidator.h" #include "range.h" /** @@ -71,7 +72,12 @@ public: * @return */ Validator* readValidator(QString& str); - + /** + * @brief readCompositeValidator + * @param str + * @return + */ + Validator* readCompositeValidator(QString& str); /** * @brief readNumber read number in the given str and remove from the string the read character. @@ -79,7 +85,7 @@ public: * @param myNumber reference to the found number * @return true, succeed to read number, false otherwise. */ - bool readNumber(QString& str, int& myNumber); + bool readNumber(QString& str, qint64& myNumber); /** @@ -123,7 +129,7 @@ public: * @param end * @return */ - bool readDiceRange(QString& str,int& start, int& end); + bool readDiceRange(QString& str,qint64& start, qint64& end); /** * @brief readListOperator * @param str @@ -133,9 +139,11 @@ public: void readProbability(QStringList& str,QList& ranges); + bool readLogicOperation(QString& str,CompositeValidator::LogicOperation& op); private: QMap* m_logicOp; + QMap* m_logicOperation; }; #endif // PARSINGTOOLBOX_H -- cgit v1.2.3-70-g09d2 From 46568cbccfd0c60dc19cc27265afc983d71b4c58 Mon Sep 17 00:00:00 2001 From: Renaud G Date: Thu, 20 Aug 2015 00:30:45 +0200 Subject: number are qint64 --- diceparser.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/diceparser.cpp b/diceparser.cpp index 1ab5e30..f695a42 100644 --- a/diceparser.cpp +++ b/diceparser.cpp @@ -519,8 +519,8 @@ bool DiceParser::readDice(QString& str,ExecutionNode* & node) if(readDiceOperator(str,currentOperator)) { - int num; - int end; + qint64 num; + qint64 end; if(currentOperator==D) { if(m_parsingToolbox->readNumber(str,num)) @@ -542,7 +542,7 @@ bool DiceParser::readDice(QString& str,ExecutionNode* & node) else if(m_parsingToolbox->readDiceRange(str,num,end)) { - int face = abs(num - end)+1; + qint64 face = abs(num - end)+1; DiceRollerNode* drNode = new DiceRollerNode(face,num); node = drNode; ExecutionNode* current = drNode; @@ -754,7 +754,7 @@ bool DiceParser::readOption(QString& str,ExecutionNode* previous, bool hasDice)/ { case Keep: { - int myNumber=0; + qint64 myNumber=0; bool ascending = m_parsingToolbox->readAscending(str); if(m_parsingToolbox->readNumber(str,myNumber)) { @@ -775,7 +775,7 @@ bool DiceParser::readOption(QString& str,ExecutionNode* previous, bool hasDice)/ break; case KeepAndExplose: { - int myNumber=0; + qint64 myNumber=0; bool ascending = m_parsingToolbox->readAscending(str); if(m_parsingToolbox->readNumber(str,myNumber)) { @@ -860,7 +860,7 @@ bool DiceParser::readOption(QString& str,ExecutionNode* previous, bool hasDice)/ break; case Explosing: { - Validator* validator = m_parsingToolbox->readValidator(str); + Validator* validator = m_parsingToolbox->readCompositeValidator(str); if(NULL!=validator) { if(!m_parsingToolbox->isValidValidator(previous,validator)) @@ -915,7 +915,7 @@ QString DiceParser::humanReadableError() bool DiceParser::readOperand(QString& str,ExecutionNode* & node) { - int myNumber=1; + qint64 myNumber=1; if(m_parsingToolbox->readNumber(str,myNumber)) { -- cgit v1.2.3-70-g09d2 From bb413e7eab871cbc377eea0ece5444d1c758481b Mon Sep 17 00:00:00 2001 From: Renaud G Date: Thu, 20 Aug 2015 00:31:09 +0200 Subject: first implementation of compositevalidator. --- compositevalidator.cpp | 109 ++++++++++++++++++------------------------------- compositevalidator.h | 13 +++--- 2 files changed, 46 insertions(+), 76 deletions(-) diff --git a/compositevalidator.cpp b/compositevalidator.cpp index 0715ba2..cc52fdd 100644 --- a/compositevalidator.cpp +++ b/compositevalidator.cpp @@ -22,7 +22,7 @@ #include "compositevalidator.h" -CompositeValidator::BooleanCondition() +CompositeValidator::CompositeValidator() { } qint64 CompositeValidator::hasValid(Die* b,bool recursive,bool unhighlight) const @@ -30,7 +30,7 @@ qint64 CompositeValidator::hasValid(Die* b,bool recursive,bool unhighlight) cons int i = 0; qint64 sum = 0; - foreach(Validator* validator, m_validatorList) + foreach(const Validator* validator, *m_validatorList) { qint64 val = validator->hasValid(b,recursive,unhighlight); if(i==0) @@ -39,7 +39,7 @@ qint64 CompositeValidator::hasValid(Die* b,bool recursive,bool unhighlight) cons } else { - switch(m_operators[i-1]) + switch(m_operators->at(i-1)) { case OR: sum |= val; @@ -55,63 +55,13 @@ qint64 CompositeValidator::hasValid(Die* b,bool recursive,bool unhighlight) cons ++i; } - /*QList listValues; - if(recursive) - { - listValues = b->getListValue(); - } - else - { - listValues.append(b->getLastRolledValue()); - } - - qint64 sum= 0; - foreach(qint64 value, listValues) - { - switch(m_operator) - { - case Equal: - sum+=(value==m_value)?1:0; - break; - case GreaterThan: - sum+= (value>m_value)?1:0; - break; - case LesserThan: - sum+= (value=m_value)?1:0; - break; - case LesserOrEqual: - sum+= (value<=m_value)?1:0; - break; - } - } - if((unhighlight)&&(sum==0)) - { - b->setHighlighted(false); - } - else - { - b->setHighlighted(true); - } - - return sum;*/ + return sum; } -void CompositeValidator::setOperator(LogicOperator m) -{ - m_operator = m; -} - -void CompositeValidator::setValue(qint64 v) -{ - m_value=v; -} QString CompositeValidator::toString() { QString str=""; - switch (m_operator) + /*switch (m_operator) { case Equal: str.append("="); @@ -129,21 +79,40 @@ QString CompositeValidator::toString() str.append("<="); break; } - return QString("[%1%2]").arg(str).arg(m_value); + return QString("[%1%2]").arg(str).arg(m_value);*/ + return str; } -quint8 CompositeValidator::getValidRangeSize(quint64 faces) const +quint64 CompositeValidator::getValidRangeSize(quint64 faces) const { - switch (m_operator) - { - case Equal: - return 1; - case GreaterThan: - return faces-m_value; - case LesserThan: - return m_value-1; - case GreaterOrEqual: - return faces-(m_value-1); - case LesserOrEqual: - return m_value; - } + quint64 sum =0; + int i = -1; + foreach(Validator* tmp,*m_validatorList) + { + quint64 rel = tmp->getValidRangeSize(faces); + LogicOperation opt; + if(i>=0) + { + opt = m_operators->at(i); + } + if(opt == OR) + { + sum += rel; + } + else if((opt == AND)&&(opt == EXCLUSIVE_OR)) + { + sum = qMax(rel,sum); + } + ++i; + } + + return sum; +} +void CompositeValidator::setOperationList(QVector* m) +{ + m_operators = m; +} + +void CompositeValidator::setValidatorList(QList* m) +{ + m_validatorList = m; } diff --git a/compositevalidator.h b/compositevalidator.h index b207db9..789f33f 100644 --- a/compositevalidator.h +++ b/compositevalidator.h @@ -24,6 +24,7 @@ #include #include +#include #include #include "validator.h" @@ -39,16 +40,16 @@ public: virtual qint64 hasValid(Die* b,bool recursive, bool unhighlight = false) const; - void addOperation(LogicOperation m); - void setValue(qint64); + void setOperationList(QVector* m); + void setValidatorList(QList*); + QString toString(); - virtual quint8 getValidRangeSize(quint64 faces) const; + virtual quint64 getValidRangeSize(quint64 faces) const; private: - QVector m_operators; - qint64 m_value; - QList m_validatorList; + QVector* m_operators; + QList* m_validatorList; }; #endif // BOOLEANCONDITION_H -- cgit v1.2.3-70-g09d2 From 8a1c33fb342a3609ec4d22e918c5f847c59c1b91 Mon Sep 17 00:00:00 2001 From: Renaud G Date: Thu, 20 Aug 2015 11:36:18 +0200 Subject: start fixing dot tree generation --- diceparser.cpp | 6 ++++-- node/countexecutenode.cpp | 11 ++++++++++- node/countexecutenode.h | 2 +- node/executionnode.h | 2 +- node/numbernode.cpp | 11 +++++++++-- node/numbernode.h | 2 +- node/rerolldicenode.cpp | 2 +- node/rerolldicenode.h | 2 +- node/scalaroperatornode.cpp | 5 ++++- node/scalaroperatornode.h | 2 +- node/sortresult.cpp | 6 +++++- node/sortresult.h | 2 +- node/startingnode.cpp | 7 ++++++- node/startingnode.h | 2 +- 14 files changed, 46 insertions(+), 16 deletions(-) diff --git a/diceparser.cpp b/diceparser.cpp index f695a42..8f930a0 100644 --- a/diceparser.cpp +++ b/diceparser.cpp @@ -814,7 +814,8 @@ bool DiceParser::readOption(QString& str,ExecutionNode* previous, bool hasDice)/ break; case Count: { - Validator* validator = m_parsingToolbox->readValidator(str); + //Validator* validator = m_parsingToolbox->readValidator(str); + Validator* validator = m_parsingToolbox->readCompositeValidator(str); if(NULL!=validator) { /// @todo display warning here. @@ -836,7 +837,8 @@ bool DiceParser::readOption(QString& str,ExecutionNode* previous, bool hasDice)/ case Reroll: case RerollAndAdd: { - Validator* validator = m_parsingToolbox->readValidator(str); + //Validator* validator = m_parsingToolbox->readValidator(str); + Validator* validator = m_parsingToolbox->readCompositeValidator(str); if(NULL!=validator) { /// @todo display warning here. diff --git a/node/countexecutenode.cpp b/node/countexecutenode.cpp index ff3d67b..295fdad 100644 --- a/node/countexecutenode.cpp +++ b/node/countexecutenode.cpp @@ -46,10 +46,19 @@ void CountExecuteNode::run(ExecutionNode *previous) } } } -QString CountExecuteNode::toString() const +QString CountExecuteNode::toString(bool withlabel) const +{ +if(withlabel) { return "CountExecuteNode"+m_validator->toString(); } +else +{ + + return "CountExecuteNode"+m_validator->toString(); +} +} +} qint64 CountExecuteNode::getPriority() const { qint64 priority=0; diff --git a/node/countexecutenode.h b/node/countexecutenode.h index 519403b..167ee82 100644 --- a/node/countexecutenode.h +++ b/node/countexecutenode.h @@ -30,7 +30,7 @@ public: * @brief toString * @return */ - virtual QString toString()const; + virtual QString toString(bool withLabel)const; /** * @brief getPriority * @return diff --git a/node/executionnode.h b/node/executionnode.h index 39d714b..cca7903 100644 --- a/node/executionnode.h +++ b/node/executionnode.h @@ -46,7 +46,7 @@ public: * @brief toString * @return */ - virtual QString toString()const=0; + virtual QString toString(bool withLabel)const=0; /** * @brief getPriority * @return diff --git a/node/numbernode.cpp b/node/numbernode.cpp index c63aadf..55ee752 100644 --- a/node/numbernode.cpp +++ b/node/numbernode.cpp @@ -44,9 +44,16 @@ void NumberNode::setNumber(qint64 a) m_scalarResult->setValue(a); m_number = a; } -QString NumberNode::toString() const +QString NumberNode::toString(bool withLabel) const { - return QString("NumberNode [label=\"NumberNode %1\"]").arg(m_number); + if(withLabel) + { + return QString("NumberNode%2 [label=\"NumberNode %1\"]").arg(m_number).arg(m_number); + } + else + { + return QString("NumberNode%1").arg(m_number); + } } qint64 NumberNode::getPriority() const { diff --git a/node/numbernode.h b/node/numbernode.h index 3c43a51..50d29ad 100644 --- a/node/numbernode.h +++ b/node/numbernode.h @@ -34,7 +34,7 @@ public: NumberNode(); void run(ExecutionNode* previous); void setNumber(qint64); -virtual QString toString()const; + virtual QString toString(bool withLabel)const; virtual qint64 getPriority() const; private: qint64 m_number; diff --git a/node/rerolldicenode.cpp b/node/rerolldicenode.cpp index 038a3ec..7798f61 100644 --- a/node/rerolldicenode.cpp +++ b/node/rerolldicenode.cpp @@ -46,7 +46,7 @@ void RerollDiceNode::setValidator(Validator* val) { m_validator = val; } -QString RerollDiceNode::toString() const +QString RerollDiceNode::toString(bool wl) const { return QString("RerollDiceNode [label=\"RerollDiceNode validatior:%1\"").arg(m_validator->toString()); } diff --git a/node/rerolldicenode.h b/node/rerolldicenode.h index a97e448..f456bb3 100644 --- a/node/rerolldicenode.h +++ b/node/rerolldicenode.h @@ -39,7 +39,7 @@ public: * @brief toString * @return */ - virtual QString toString()const; + virtual QString toString(bool )const; /** diff --git a/node/scalaroperatornode.cpp b/node/scalaroperatornode.cpp index c5f91f9..dead500 100644 --- a/node/scalaroperatornode.cpp +++ b/node/scalaroperatornode.cpp @@ -138,7 +138,7 @@ qint64 ScalarOperatorNode::multiple(qint64 a,qint64 b) { return a*b; } -QString ScalarOperatorNode::toString() const +QString ScalarOperatorNode::toString(bool wl) const { QString op=""; switch(m_operator) @@ -159,7 +159,10 @@ QString ScalarOperatorNode::toString() const break; } +if(wl) return QString("ScalarOperatorNode [label=\"ScalarOperatorNode %1\"").arg(op); +else + return QString("ScalarOperatorNode"); } qint64 ScalarOperatorNode::getPriority() const { diff --git a/node/scalaroperatornode.h b/node/scalaroperatornode.h index e43f6f8..4aab39a 100644 --- a/node/scalaroperatornode.h +++ b/node/scalaroperatornode.h @@ -42,7 +42,7 @@ public: bool setOperatorChar(QChar c); void setInternalNode(ExecutionNode* node); - virtual QString toString()const; + virtual QString toString(bool wl)const; virtual qint64 getPriority() const; void generateDotTree(QString& s); diff --git a/node/sortresult.cpp b/node/sortresult.cpp index 44a25f0..727810e 100644 --- a/node/sortresult.cpp +++ b/node/sortresult.cpp @@ -110,9 +110,13 @@ void SortResultNode::setSortAscending(bool asc) { m_ascending = asc; } -QString SortResultNode::toString() const +QString SortResultNode::toString(bool wl) const { +if(wl) return QString("SortResultNode [label=\"SortResultNode %1\"").arg(m_ascending ? "Ascending":"Descending"); +else + return QString("SortResultNode"); + } qint64 SortResultNode::getPriority() const { diff --git a/node/sortresult.h b/node/sortresult.h index d505e4b..c4f96dc 100644 --- a/node/sortresult.h +++ b/node/sortresult.h @@ -49,7 +49,7 @@ public: * @brief toString * @return */ - virtual QString toString()const; + virtual QString toString(bool wl)const; /** * @brief getPriority * @return diff --git a/node/startingnode.cpp b/node/startingnode.cpp index b15101b..15ea053 100644 --- a/node/startingnode.cpp +++ b/node/startingnode.cpp @@ -13,9 +13,14 @@ void StartingNode::run(ExecutionNode*) m_nextNode->run(this); } } -QString StartingNode::toString() const +QString StartingNode::toString(bool withlabel) const { +if(withlabel) return "StartingNode [shape=box]"; +else + return "StartingNode"; +} + } qint64 StartingNode::getPriority() const { diff --git a/node/startingnode.h b/node/startingnode.h index ebe28c0..e9bc5a5 100644 --- a/node/startingnode.h +++ b/node/startingnode.h @@ -22,7 +22,7 @@ public: * @brief toString * @return */ - virtual QString toString()const; + virtual QString toString(bool withlabel)const; /** * @brief getPriority * @return -- cgit v1.2.3-70-g09d2 From ae81e675a117819aa5a2eb7f9be687aff5a6bb9f Mon Sep 17 00:00:00 2001 From: Renaud G Date: Thu, 20 Aug 2015 11:56:10 +0200 Subject: add bool parameter to toString() function in node. --- node/countexecutenode.cpp | 74 ++++++++++++++++++++++----------------------- node/dicerollernode.cpp | 11 +++++-- node/dicerollernode.h | 2 +- node/executionnode.cpp | 4 ++- node/executionnode.h | 3 ++ node/explosedicenode.cpp | 11 +++++-- node/explosedicenode.h | 2 +- node/helpnode.cpp | 11 +++++-- node/helpnode.h | 2 +- node/jumpbackwardnode.cpp | 11 +++++-- node/jumpbackwardnode.h | 2 +- node/keepdiceexecnode.cpp | 11 +++++-- node/keepdiceexecnode.h | 2 +- node/listaliasnode.cpp | 23 +++++++++----- node/listaliasnode.h | 2 +- node/listsetrollnode.cpp | 12 ++++++-- node/numbernode.cpp | 4 +-- node/parenthesesnode.cpp | 11 +++++-- node/parenthesesnode.h | 2 +- node/rerolldicenode.cpp | 10 +++++- node/scalaroperatornode.cpp | 12 +++++--- node/sortresult.cpp | 12 +++++--- node/startingnode.cpp | 14 ++++++--- 23 files changed, 165 insertions(+), 83 deletions(-) diff --git a/node/countexecutenode.cpp b/node/countexecutenode.cpp index 295fdad..55b278e 100644 --- a/node/countexecutenode.cpp +++ b/node/countexecutenode.cpp @@ -6,11 +6,11 @@ CountExecuteNode::CountExecuteNode() : m_scalarResult(new ScalarResult()),m_validator(NULL) { - m_result = m_scalarResult; + m_result = m_scalarResult; } void CountExecuteNode::setValidator(Validator* validator) { - m_validator = validator; + m_validator = validator; } CountExecuteNode::~CountExecuteNode() { @@ -23,50 +23,48 @@ CountExecuteNode::~CountExecuteNode() void CountExecuteNode::run(ExecutionNode *previous) { m_previousNode = previous; - if(NULL==previous) - { - return; - } - DiceResult* previous_result = dynamic_cast(previous->getResult()); - if(NULL!=previous_result) - { - m_result->setPrevious(previous_result); - QList diceList=previous_result->getResultList(); - qint64 sum = 0; - foreach(Die* dice,diceList) - { - sum+=m_validator->hasValid(dice,true,true); - } - m_scalarResult->setValue(sum); + if(NULL==previous) + { + return; + } + DiceResult* previous_result = dynamic_cast(previous->getResult()); + if(NULL!=previous_result) + { + m_result->setPrevious(previous_result); + QList diceList=previous_result->getResultList(); + qint64 sum = 0; + foreach(Die* dice,diceList) + { + sum+=m_validator->hasValid(dice,true,true); + } + m_scalarResult->setValue(sum); - if(NULL!=m_nextNode) - { - m_nextNode->run(this); - } - } + if(NULL!=m_nextNode) + { + m_nextNode->run(this); + } + } } QString CountExecuteNode::toString(bool withlabel) const { -if(withlabel) -{ - return "CountExecuteNode"+m_validator->toString(); -} -else -{ - - return "CountExecuteNode"+m_validator->toString(); -} -} + if(withlabel) + { + return QString("%1 [label=\"CountExecuteNode %2\"]").arg(m_id).arg(m_validator->toString()); + } + else + { + return m_id; + } } qint64 CountExecuteNode::getPriority() const { - qint64 priority=0; - if(NULL!=m_nextNode) - { - priority = m_nextNode->getPriority(); - } + qint64 priority=0; + if(NULL!=m_nextNode) + { + priority = m_nextNode->getPriority(); + } - return priority; + return priority; } diff --git a/node/dicerollernode.cpp b/node/dicerollernode.cpp index 06148fc..213c8ec 100644 --- a/node/dicerollernode.cpp +++ b/node/dicerollernode.cpp @@ -71,9 +71,16 @@ quint64 DiceRollerNode::getFaces() { return m_faces; } -QString DiceRollerNode::toString() const +QString DiceRollerNode::toString(bool wl) const { - return QString("DiceRollerNode"); + if(wl) + { + return QString("%1 [label=DiceRollerNode]").arg(m_id); + } + else + { + return m_id; + } } qint64 DiceRollerNode::getPriority() const { diff --git a/node/dicerollernode.h b/node/dicerollernode.h index 726676e..402ef40 100644 --- a/node/dicerollernode.h +++ b/node/dicerollernode.h @@ -30,7 +30,7 @@ public: virtual void run(ExecutionNode*); quint64 getFaces(); - virtual QString toString()const; + virtual QString toString(bool wl)const; virtual qint64 getPriority() const; //private members private: diff --git a/node/executionnode.cpp b/node/executionnode.cpp index dba56fc..c6f3915 100644 --- a/node/executionnode.cpp +++ b/node/executionnode.cpp @@ -1,7 +1,9 @@ #include "executionnode.h" +#include + ExecutionNode::ExecutionNode() - : m_nextNode(NULL),m_result(NULL),m_previousNode(NULL) + : m_nextNode(NULL),m_result(NULL),m_previousNode(NULL),m_id(QUuid::createUuid().toString()) { } diff --git a/node/executionnode.h b/node/executionnode.h index cca7903..41f2b79 100644 --- a/node/executionnode.h +++ b/node/executionnode.h @@ -3,6 +3,7 @@ #include "result/result.h" #include + /** * @brief The ExecutionNode class */ @@ -85,6 +86,8 @@ protected: * @brief m_errors */ QMap m_errors; + + QString m_id; }; #endif // EXECUTIONNODE_H diff --git a/node/explosedicenode.cpp b/node/explosedicenode.cpp index c0ebfe7..cdbeb6c 100644 --- a/node/explosedicenode.cpp +++ b/node/explosedicenode.cpp @@ -44,9 +44,16 @@ void ExploseDiceNode::setValidator(Validator* val) { m_validator = val; } -QString ExploseDiceNode::toString() const +QString ExploseDiceNode::toString(bool withlabel) const { - return QString("ExploseDiceNode [label=\"ExploseDiceNode %1\"]").arg(m_validator->toString()); + if(withlabel) + { + return QString("%1 [label=\"ExploseDiceNode %2\"]").arg(m_id).arg(m_validator->toString()); + } + else + { + return m_id; + } } qint64 ExploseDiceNode::getPriority() const { diff --git a/node/explosedicenode.h b/node/explosedicenode.h index f5d0f6e..65c0abd 100644 --- a/node/explosedicenode.h +++ b/node/explosedicenode.h @@ -16,7 +16,7 @@ public: virtual ~ExploseDiceNode(); virtual void run(ExecutionNode* previous = NULL); virtual void setValidator(Validator* ); - virtual QString toString()const; + virtual QString toString(bool )const; virtual qint64 getPriority() const; protected: diff --git a/node/helpnode.cpp b/node/helpnode.cpp index 6108e4d..d5fc2c9 100644 --- a/node/helpnode.cpp +++ b/node/helpnode.cpp @@ -29,9 +29,16 @@ void HelpNode::run(ExecutionNode* previous) m_nextNode->run(this); } } -QString HelpNode::toString() const +QString HelpNode::toString(bool wl) const { - return QObject::tr("Rolisteam Dice Parser:\nFull documentation at: %1 \n").arg(m_path); + if(wl) + { + return QString("%1 [label=\"Rolisteam Dice Parser:\nFull documentation at: %2\"]").arg(m_id).arg(m_path); + } + else + { + return m_id; + } } qint64 HelpNode::getPriority() const diff --git a/node/helpnode.h b/node/helpnode.h index 88a0842..c492e66 100644 --- a/node/helpnode.h +++ b/node/helpnode.h @@ -26,7 +26,7 @@ public: * @brief toString * @return */ - virtual QString toString()const; + virtual QString toString(bool )const; /** * @brief getPriority * @return diff --git a/node/jumpbackwardnode.cpp b/node/jumpbackwardnode.cpp index be759ce..b0a5c8e 100644 --- a/node/jumpbackwardnode.cpp +++ b/node/jumpbackwardnode.cpp @@ -34,9 +34,16 @@ qint64 JumpBackwardNode::getPriority() const { return 4; } -QString JumpBackwardNode::toString() const +QString JumpBackwardNode::toString(bool wl) const { - return QString("JumpBackwardNode"); + if(wl) + { + return QString("%1 [label=\"JumpBackwardNode\"]").arg(m_id); + } + else + { + return m_id; + } } void JumpBackwardNode::run(ExecutionNode* previous) { diff --git a/node/jumpbackwardnode.h b/node/jumpbackwardnode.h index 469c64a..a89d0d3 100644 --- a/node/jumpbackwardnode.h +++ b/node/jumpbackwardnode.h @@ -43,7 +43,7 @@ public: * @brief toString * @return */ - virtual QString toString() const; + virtual QString toString(bool) const; /** * @brief getPriority * @return diff --git a/node/keepdiceexecnode.cpp b/node/keepdiceexecnode.cpp index a225ac4..492e69c 100644 --- a/node/keepdiceexecnode.cpp +++ b/node/keepdiceexecnode.cpp @@ -62,9 +62,16 @@ void KeepDiceExecNode::setDiceKeepNumber(quint64 n) { m_numberOfDice = n; } -QString KeepDiceExecNode::toString() const +QString KeepDiceExecNode::toString(bool wl) const { - return QString("KeepDiceExecNode [label=\"KeepDiceExecNode %1\"]").arg(m_numberOfDice); + if(wl) + { + return QString("%1 [label=\"KeepDiceExecNode %1\"]").arg(m_id).arg(m_numberOfDice); + } + else + { + return m_id; + } } qint64 KeepDiceExecNode::getPriority() const { diff --git a/node/keepdiceexecnode.h b/node/keepdiceexecnode.h index 01f5028..f86daa5 100644 --- a/node/keepdiceexecnode.h +++ b/node/keepdiceexecnode.h @@ -34,7 +34,7 @@ public: virtual void run(ExecutionNode *previous); virtual void setDiceKeepNumber(quint64 ); - virtual QString toString()const; + virtual QString toString(bool)const; virtual qint64 getPriority() const; private: quint64 m_numberOfDice; diff --git a/node/listaliasnode.cpp b/node/listaliasnode.cpp index ddb8ac9..7af202c 100644 --- a/node/listaliasnode.cpp +++ b/node/listaliasnode.cpp @@ -58,14 +58,23 @@ QString ListAliasNode::buildList() const } return result; } -QString ListAliasNode::toString() const +QString ListAliasNode::toString(bool wl) const { - QStringList resultList; - foreach(DiceAlias* key, *m_aliasList) - { - resultList << "{" <getCommand() << key->getValue()<< "}"; - } - return QString("ListAliasNode [label=\"ListAliasNode %1\"]").arg(resultList.join(",")); + QStringList resultList; + foreach(DiceAlias* key, *m_aliasList) + { + resultList << "{" <getCommand() << key->getValue()<< "}"; + } + + if(wl) + { + return QString("%1 [label=\"ListAliasNode %2\"]").arg(m_id).arg(resultList.join(",")); + } + else + { + return m_id; + } + } qint64 ListAliasNode::getPriority() const diff --git a/node/listaliasnode.h b/node/listaliasnode.h index e8f8b0f..2f83a1b 100644 --- a/node/listaliasnode.h +++ b/node/listaliasnode.h @@ -42,7 +42,7 @@ public: * @brief toString * @return */ - virtual QString toString() const; + virtual QString toString(bool) const; /** * @brief buildList * @return diff --git a/node/listsetrollnode.cpp b/node/listsetrollnode.cpp index ce2f2ac..9f15d36 100644 --- a/node/listsetrollnode.cpp +++ b/node/listsetrollnode.cpp @@ -39,9 +39,17 @@ QStringList ListSetRollNode::getList() { return m_values; } -QString ListSetRollNode::toString() const +QString ListSetRollNode::toString(bool wl) const { - return QString("ListSetRollNode [label=\"ListSetRoll list:%1\"]").arg(m_values.join(',')); + if(wl) + { + return QString("%1 [label=\"ListSetRoll list:%2\"]").arg(m_id).arg(m_values.join(",")); + } + else + { + return m_id; + } + } qint64 ListSetRollNode::getPriority() const { diff --git a/node/numbernode.cpp b/node/numbernode.cpp index 55ee752..e2da54f 100644 --- a/node/numbernode.cpp +++ b/node/numbernode.cpp @@ -48,11 +48,11 @@ QString NumberNode::toString(bool withLabel) const { if(withLabel) { - return QString("NumberNode%2 [label=\"NumberNode %1\"]").arg(m_number).arg(m_number); + return QString("%1 [label=\"NumberNode %2\"]").arg(m_id).arg(m_number); } else { - return QString("NumberNode%1").arg(m_number); + return m_id; } } qint64 NumberNode::getPriority() const diff --git a/node/parenthesesnode.cpp b/node/parenthesesnode.cpp index 2876147..3398f0a 100644 --- a/node/parenthesesnode.cpp +++ b/node/parenthesesnode.cpp @@ -49,9 +49,16 @@ void ParenthesesNode::run(ExecutionNode* /*previous*/) m_nextNode->run(this); } } -QString ParenthesesNode::toString() const +QString ParenthesesNode::toString(bool b) const { - return "ParenthesesNode"; + if(wl) + { + return QString("%1 [label=\"ParenthesesNode\"]").arg(m_id); + } + else + { + return m_id; + } } qint64 ParenthesesNode::getPriority() const { diff --git a/node/parenthesesnode.h b/node/parenthesesnode.h index 999e7bd..fbb1caf 100644 --- a/node/parenthesesnode.h +++ b/node/parenthesesnode.h @@ -34,7 +34,7 @@ public: virtual void run(ExecutionNode* previous = NULL); void setInternelNode(ExecutionNode* node); - virtual QString toString()const; + virtual QString toString(bool)const; virtual qint64 getPriority() const; private: ExecutionNode* m_internalNode; diff --git a/node/rerolldicenode.cpp b/node/rerolldicenode.cpp index 7798f61..ce8f109 100644 --- a/node/rerolldicenode.cpp +++ b/node/rerolldicenode.cpp @@ -48,7 +48,15 @@ void RerollDiceNode::setValidator(Validator* val) } QString RerollDiceNode::toString(bool wl) const { - return QString("RerollDiceNode [label=\"RerollDiceNode validatior:%1\"").arg(m_validator->toString()); + if(wl) + { + return QString("%1 [label=\"RerollDiceNode validatior: %2\"]").arg(m_id).arg(m_validator->toString()); + } + else + { + return m_id; + } + //return QString("RerollDiceNode [label=\"RerollDiceNode validatior:%1\""); } void RerollDiceNode::setAddingMode(bool b) { diff --git a/node/scalaroperatornode.cpp b/node/scalaroperatornode.cpp index dead500..7b13f50 100644 --- a/node/scalaroperatornode.cpp +++ b/node/scalaroperatornode.cpp @@ -159,10 +159,14 @@ QString ScalarOperatorNode::toString(bool wl) const break; } -if(wl) - return QString("ScalarOperatorNode [label=\"ScalarOperatorNode %1\"").arg(op); -else - return QString("ScalarOperatorNode"); + if(wl) + { + return QString("%1 [label=\"ScalarOperatorNode %2\"]").arg(m_id).arg(op); + } + else + { + return m_id; + } } qint64 ScalarOperatorNode::getPriority() const { diff --git a/node/sortresult.cpp b/node/sortresult.cpp index 727810e..ffece63 100644 --- a/node/sortresult.cpp +++ b/node/sortresult.cpp @@ -112,10 +112,14 @@ void SortResultNode::setSortAscending(bool asc) } QString SortResultNode::toString(bool wl) const { -if(wl) - return QString("SortResultNode [label=\"SortResultNode %1\"").arg(m_ascending ? "Ascending":"Descending"); -else - return QString("SortResultNode"); + if(wl) + { + return QString("%1 [label=\"SortResultNode %2\"]").arg(m_id).arg(m_ascending ? "Ascending":"Descending"); + } + else + { + return m_id; + } } qint64 SortResultNode::getPriority() const diff --git a/node/startingnode.cpp b/node/startingnode.cpp index 15ea053..b57c630 100644 --- a/node/startingnode.cpp +++ b/node/startingnode.cpp @@ -15,13 +15,17 @@ void StartingNode::run(ExecutionNode*) } QString StartingNode::toString(bool withlabel) const { -if(withlabel) - return "StartingNode [shape=box]"; -else - return "StartingNode"; + if(withlabel) + { + return QString("%1 [label=\"StartingNode %2\"]").arg(m_id); + } + else + { + return m_id; + } } -} + qint64 StartingNode::getPriority() const { qint64 priority=0; -- cgit v1.2.3-70-g09d2 From 1dc11051931fd074b886a4e1fe0df5d747e87e20 Mon Sep 17 00:00:00 2001 From: Renaud G Date: Thu, 20 Aug 2015 11:58:30 +0200 Subject: add bool parameter --- node/listsetrollnode.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/node/listsetrollnode.h b/node/listsetrollnode.h index 4a11da2..5f381f5 100644 --- a/node/listsetrollnode.h +++ b/node/listsetrollnode.h @@ -37,7 +37,7 @@ public: ListSetRollNode(); virtual ~ListSetRollNode(); virtual void run(ExecutionNode* previous = NULL); - virtual QString toString()const; + virtual QString toString(bool)const; virtual qint64 getPriority() const; QStringList getList(); -- cgit v1.2.3-70-g09d2 From 831f75a83ca3e5734d3c110af584a0f3bf7430e7 Mon Sep 17 00:00:00 2001 From: Renaud G Date: Thu, 20 Aug 2015 12:25:21 +0200 Subject: add bool for toString() in result. --- node/executionnode.cpp | 16 ++++++++++------ result/diceresult.cpp | 11 +++++++++-- result/diceresult.h | 2 +- result/result.cpp | 19 ++++++++++--------- result/result.h | 3 ++- result/scalarresult.cpp | 11 +++++++++-- result/scalarresult.h | 2 +- result/stringresult.cpp | 11 +++++++++-- 8 files changed, 51 insertions(+), 24 deletions(-) diff --git a/node/executionnode.cpp b/node/executionnode.cpp index c6f3915..0d15825 100644 --- a/node/executionnode.cpp +++ b/node/executionnode.cpp @@ -9,7 +9,6 @@ ExecutionNode::ExecutionNode() } ExecutionNode::~ExecutionNode() { - if(NULL!=m_result) { delete m_result; @@ -55,19 +54,24 @@ ExecutionNode* ExecutionNode::getPreviousNode() const } void ExecutionNode::generateDotTree(QString& s) { - s.append(toString()); + s.append(toString(true)); + s.append(";\n"); + if(NULL!=m_nextNode) { + s.append(toString(false)); s.append(" -> "); - s.append(m_nextNode->toString()); - s.append(" [label=\"nextNode\"];\n"); + s.append(m_nextNode->toString(false)); + s.append("\n"); +// s.append(" [label=\"nextNode\"];\n"); m_nextNode->generateDotTree(s); } else { + s.append(toString(false)); s.append(" -> "); - s.append("NULL"); - s.append(" [label=\"nextNode\"];\n"); + s.append("NULL;\n;"); + // s.append(" [label=\"nextNode\"];\n"); m_result->generateDotTree(s); } diff --git a/result/diceresult.cpp b/result/diceresult.cpp index 95122f1..65d4a0b 100644 --- a/result/diceresult.cpp +++ b/result/diceresult.cpp @@ -82,12 +82,19 @@ qreal DiceResult::getScalarResult() return 0; } -QString DiceResult::toString() +QString DiceResult::toString(bool wl) { QStringList scalarSum; foreach(Die* die,m_diceValues) { scalarSum << QString::number(die->getValue()); } - return QString("DiceResult_Value_%1_dice_%2").arg(getScalarResult()).arg(scalarSum.join('_')); + if(wl) + { + return QString("%3 [label=\"DiceResult_Value_%1_dice_%2\"]").arg(getScalarResult()).arg(scalarSum.join('_')).arg(m_id); + } + else + { + return m_id; + } } diff --git a/result/diceresult.h b/result/diceresult.h index 07378d1..84a4621 100644 --- a/result/diceresult.h +++ b/result/diceresult.h @@ -65,7 +65,7 @@ public: * @brief toString * @return */ - virtual QString toString(); + virtual QString toString(bool wl); private: qreal getScalarResult(); diff --git a/result/result.cpp b/result/result.cpp index 257045c..6451e63 100644 --- a/result/result.cpp +++ b/result/result.cpp @@ -20,9 +20,10 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "result.h" +#include Result::Result() - : m_previous(NULL) + : m_previous(NULL),m_id(QUuid::createUuid().toString()) { } @@ -47,22 +48,22 @@ bool Result::hasResultOfType(RESULT_TYPE type) const } void Result::generateDotTree(QString& s) { - s.append(toString()); + s.append(toString(true)); + s.append(";\n"); + if(NULL!=m_previous) { + s.append(toString(false)); s.append(" -> "); - s.append(m_previous->toString()); - s.append(" [label=\"previousResult\"];\n"); + s.append(m_previous->toString(true)); + s.append("\n"); m_previous->generateDotTree(s); } { s.append(" -> "); - s.append("NULL"); + s.append("NULL;\n"); s.append(" [label=\"previousResult\"];\n"); } } -/*QString Result::toString() -{ - return QString(); -}*/ + diff --git a/result/result.h b/result/result.h index 3d635bc..7fd32da 100644 --- a/result/result.h +++ b/result/result.h @@ -77,11 +77,12 @@ public: * @brief toString * @return */ - virtual QString toString() = 0; + virtual QString toString(bool wl) = 0; protected: int m_resultTypes;/// @brief private: Result* m_previous;/// @brief + QString m_id; }; diff --git a/result/scalarresult.cpp b/result/scalarresult.cpp index a998608..9168938 100644 --- a/result/scalarresult.cpp +++ b/result/scalarresult.cpp @@ -36,7 +36,14 @@ QVariant ScalarResult::getResult(Result::RESULT_TYPE type) return m_value; } -QString ScalarResult::toString() +QString ScalarResult::toString(bool wl) { - return QString("ScalarResult_Value_%1").arg(m_value); + if(wl) + { + return QString("%2 [label=\"ScalarResult %1\"]").arg(m_value).arg(m_id); + } + else + { + return m_id; + } } diff --git a/result/scalarresult.h b/result/scalarresult.h index 8a0fa11..f441c9b 100644 --- a/result/scalarresult.h +++ b/result/scalarresult.h @@ -49,7 +49,7 @@ public: * @brief toString * @return */ - virtual QString toString(); + virtual QString toString(bool); private: qreal m_value; diff --git a/result/stringresult.cpp b/result/stringresult.cpp index 4dbd577..b7dc39d 100644 --- a/result/stringresult.cpp +++ b/result/stringresult.cpp @@ -31,7 +31,14 @@ QVariant StringResult::getResult(RESULT_TYPE type) return QVariant(); } -QString StringResult::toString() +QString StringResult::toString(bool wl) { - return QString("StringResult_value_%1").arg(getText().replace(" ","_")); + if(wl) + { + return QString("%2 [label=\"StringResult_value_%1\"]").arg(getText().replace(" ","_")).arg(m_id); + } + else + { + return m_id; + } } -- cgit v1.2.3-70-g09d2 From b7a58837e1ad1412a5fece212d4619bedc4a5d4c Mon Sep 17 00:00:00 2001 From: Renaud G Date: Thu, 20 Aug 2015 12:29:05 +0200 Subject: fix compilation --- node/helpnode.cpp | 3 +-- result/stringresult.h | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/node/helpnode.cpp b/node/helpnode.cpp index d5fc2c9..376f48a 100644 --- a/node/helpnode.cpp +++ b/node/helpnode.cpp @@ -14,8 +14,7 @@ void HelpNode::run(ExecutionNode* previous) { if(previous->getResult() == NULL) { - txtResult->setText(toString()); - + txtResult->setText(tr("Rolisteam Dice Parser:\nFull documentation at: %1").arg(m_path)); } else { diff --git a/result/stringresult.h b/result/stringresult.h index 5a6b26c..37739a2 100644 --- a/result/stringresult.h +++ b/result/stringresult.h @@ -36,7 +36,7 @@ public: * @brief toString * @return */ - virtual QString toString(); + virtual QString toString(bool ); private: QString m_value; }; -- cgit v1.2.3-70-g09d2 From f2216bbcba3938f496873d28a6fda0aa51784a20 Mon Sep 17 00:00:00 2001 From: Renaud G Date: Thu, 20 Aug 2015 12:29:45 +0200 Subject: fix compilation --- result/result.h | 2 +- result/stringresult.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/result/result.h b/result/result.h index 7fd32da..3f16535 100644 --- a/result/result.h +++ b/result/result.h @@ -80,9 +80,9 @@ public: virtual QString toString(bool wl) = 0; protected: int m_resultTypes;/// @brief + QString m_id; private: Result* m_previous;/// @brief - QString m_id; }; diff --git a/result/stringresult.h b/result/stringresult.h index 5a6b26c..4f41431 100644 --- a/result/stringresult.h +++ b/result/stringresult.h @@ -36,7 +36,7 @@ public: * @brief toString * @return */ - virtual QString toString(); + virtual QString toString(bool); private: QString m_value; }; -- cgit v1.2.3-70-g09d2 From d4061b6d9660d8dfc0a478fb252b93ec3dfd0f1c Mon Sep 17 00:00:00 2001 From: Renaud G Date: Thu, 20 Aug 2015 12:31:23 +0200 Subject: fix compilation --- node/helpnode.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/node/helpnode.cpp b/node/helpnode.cpp index 376f48a..d4a5d4b 100644 --- a/node/helpnode.cpp +++ b/node/helpnode.cpp @@ -14,7 +14,7 @@ void HelpNode::run(ExecutionNode* previous) { if(previous->getResult() == NULL) { - txtResult->setText(tr("Rolisteam Dice Parser:\nFull documentation at: %1").arg(m_path)); + txtResult->setText(QObject::tr("Rolisteam Dice Parser:\nFull documentation at: %1").arg(m_path)); } else { -- cgit v1.2.3-70-g09d2 From d0aed2adeb87bfd969ec24444d3e27928bbea5ff Mon Sep 17 00:00:00 2001 From: Renaud G Date: Thu, 20 Aug 2015 12:32:25 +0200 Subject: fix compilation --- node/parenthesesnode.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/node/parenthesesnode.cpp b/node/parenthesesnode.cpp index 3398f0a..d859632 100644 --- a/node/parenthesesnode.cpp +++ b/node/parenthesesnode.cpp @@ -51,7 +51,7 @@ void ParenthesesNode::run(ExecutionNode* /*previous*/) } QString ParenthesesNode::toString(bool b) const { - if(wl) + if(b) { return QString("%1 [label=\"ParenthesesNode\"]").arg(m_id); } -- cgit v1.2.3-70-g09d2 From 0bbdc72494d7d3c769346a24d0f0aa9b7fe63fb9 Mon Sep 17 00:00:00 2001 From: Renaud G Date: Thu, 20 Aug 2015 12:36:03 +0200 Subject: fix compilation --- node/scalaroperatornode.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/node/scalaroperatornode.cpp b/node/scalaroperatornode.cpp index 7b13f50..4bd2347 100644 --- a/node/scalaroperatornode.cpp +++ b/node/scalaroperatornode.cpp @@ -181,27 +181,31 @@ qint64 ScalarOperatorNode::getPriority() const } void ScalarOperatorNode::generateDotTree(QString& s) { - s.append(toString()); + s.append(toString(true)); + s.append(";\n"); + if(NULL!=m_nextNode) { + s.append(toString(false)); s.append(" -> "); - s.append(m_nextNode->toString()); - s.append(" [label=\"nextNode\"];\n"); + s.append(m_nextNode->toString(false)); + s.append(";\n"); m_nextNode->generateDotTree(s); } else { + s.append(toString(false)); s.append(" -> "); - s.append("NULL"); - s.append(" [label=\"nextNode\"];\n"); + s.append("NULL"); + s.append(" [label=\"nextNode\"];\n"); } QString str; str.append("\n"); if(NULL!=m_internalNode) { - str.append(toString()); + str.append(toString(false)); str.append(" -> "); - str.append(m_internalNode->toString()); + str.append(m_internalNode->toString(false)); str.append(" [label=\"internalNode\"];\n"); m_internalNode->generateDotTree(str); } -- cgit v1.2.3-70-g09d2 From 784c00cc2e0d224723b2480b5a7776ccd26c90b3 Mon Sep 17 00:00:00 2001 From: Renaud G Date: Thu, 20 Aug 2015 12:52:50 +0200 Subject: improve the dot generation. --- node/executionnode.cpp | 11 ++++++++--- result/diceresult.cpp | 2 +- result/result.cpp | 3 ++- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/node/executionnode.cpp b/node/executionnode.cpp index 0d15825..cdda93d 100644 --- a/node/executionnode.cpp +++ b/node/executionnode.cpp @@ -3,7 +3,7 @@ #include ExecutionNode::ExecutionNode() - : m_nextNode(NULL),m_result(NULL),m_previousNode(NULL),m_id(QUuid::createUuid().toString()) + : m_nextNode(NULL),m_result(NULL),m_previousNode(NULL),m_id(QString("\"%1\"").arg(QUuid::createUuid().toString()) { } @@ -62,7 +62,7 @@ void ExecutionNode::generateDotTree(QString& s) s.append(toString(false)); s.append(" -> "); s.append(m_nextNode->toString(false)); - s.append("\n"); + s.append(";\n"); // s.append(" [label=\"nextNode\"];\n"); m_nextNode->generateDotTree(s); } @@ -71,7 +71,12 @@ void ExecutionNode::generateDotTree(QString& s) s.append(toString(false)); s.append(" -> "); s.append("NULL;\n;"); - // s.append(" [label=\"nextNode\"];\n"); + + + s.append(toString(false)); + s.append(" ->"); + s.append(m_result->toString(false)); + s.append(" [label=\"Result\"];\n"); m_result->generateDotTree(s); } diff --git a/result/diceresult.cpp b/result/diceresult.cpp index 65d4a0b..6c46de0 100644 --- a/result/diceresult.cpp +++ b/result/diceresult.cpp @@ -91,7 +91,7 @@ QString DiceResult::toString(bool wl) } if(wl) { - return QString("%3 [label=\"DiceResult_Value_%1_dice_%2\"]").arg(getScalarResult()).arg(scalarSum.join('_')).arg(m_id); + return QString("%3 [label=\"DiceResult Value %1 dice %2\"]").arg(getScalarResult()).arg(scalarSum.join('_')).arg(m_id); } else { diff --git a/result/result.cpp b/result/result.cpp index 6451e63..401123a 100644 --- a/result/result.cpp +++ b/result/result.cpp @@ -60,8 +60,9 @@ void Result::generateDotTree(QString& s) m_previous->generateDotTree(s); } { + s.append(toString(false)); s.append(" -> "); - s.append("NULL;\n"); + s.append("NULL"); s.append(" [label=\"previousResult\"];\n"); } -- cgit v1.2.3-70-g09d2 From 594bede3485085f0211e60a3ab30050b651c884e Mon Sep 17 00:00:00 2001 From: Renaud G Date: Thu, 20 Aug 2015 12:54:18 +0200 Subject: fix compilation --- node/executionnode.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/node/executionnode.cpp b/node/executionnode.cpp index cdda93d..f759884 100644 --- a/node/executionnode.cpp +++ b/node/executionnode.cpp @@ -3,7 +3,7 @@ #include ExecutionNode::ExecutionNode() - : m_nextNode(NULL),m_result(NULL),m_previousNode(NULL),m_id(QString("\"%1\"").arg(QUuid::createUuid().toString()) + : m_nextNode(NULL),m_result(NULL),m_previousNode(NULL),m_id(QString("\"%1\"").arg(QUuid::createUuid().toString())) { } -- cgit v1.2.3-70-g09d2 From 8a66f62a1f9226620d16af07c3afd580ddd5a65c Mon Sep 17 00:00:00 2001 From: Renaud G Date: Thu, 20 Aug 2015 12:57:29 +0200 Subject: Add new line at the end --- diceparser.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/diceparser.cpp b/diceparser.cpp index 8f930a0..b3add42 100644 --- a/diceparser.cpp +++ b/diceparser.cpp @@ -942,6 +942,7 @@ void DiceParser::writeDownDotTree(QString filepath) QTextStream in(&file); in << str; } + in << "\n"; } void DiceParser::setPathToHelp(QString l) { -- cgit v1.2.3-70-g09d2 From 8a4a770104ba75b770671d3e69be6687736f7c8e Mon Sep 17 00:00:00 2001 From: Renaud G Date: Thu, 20 Aug 2015 12:57:57 +0200 Subject: change new line position --- diceparser.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/diceparser.cpp b/diceparser.cpp index b3add42..6d043a1 100644 --- a/diceparser.cpp +++ b/diceparser.cpp @@ -933,7 +933,7 @@ void DiceParser::writeDownDotTree(QString filepath) { QString str("digraph ExecutionTree {\n"); m_start->generateDotTree(str); - str.append("}"); + str.append("}\n"); QFile file(filepath); @@ -942,7 +942,7 @@ void DiceParser::writeDownDotTree(QString filepath) QTextStream in(&file); in << str; } - in << "\n"; + } void DiceParser::setPathToHelp(QString l) { -- cgit v1.2.3-70-g09d2 From 489baf54f6c4d5f511012f2a2eadb97ba80b551d Mon Sep 17 00:00:00 2001 From: Renaud G Date: Thu, 20 Aug 2015 12:59:10 +0200 Subject: escaped the id for result --- result/result.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/result/result.cpp b/result/result.cpp index 401123a..7b6633c 100644 --- a/result/result.cpp +++ b/result/result.cpp @@ -23,7 +23,7 @@ #include Result::Result() - : m_previous(NULL),m_id(QUuid::createUuid().toString()) + : m_previous(NULL),m_id(QString("\"%1\"").arg(QUuid::createUuid().toString())) { } -- cgit v1.2.3-70-g09d2 From 065c8f53cebd098d11695eaec07c178d78737c8e Mon Sep 17 00:00:00 2001 From: Renaud G Date: Thu, 20 Aug 2015 13:00:38 +0200 Subject: remove useless ; --- node/executionnode.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/node/executionnode.cpp b/node/executionnode.cpp index f759884..abcb7cf 100644 --- a/node/executionnode.cpp +++ b/node/executionnode.cpp @@ -70,7 +70,7 @@ void ExecutionNode::generateDotTree(QString& s) { s.append(toString(false)); s.append(" -> "); - s.append("NULL;\n;"); + s.append("NULL;\n"); s.append(toString(false)); -- cgit v1.2.3-70-g09d2 From 4c96c3f33cbb0552275e4a87046ac0a8fa88162c Mon Sep 17 00:00:00 2001 From: Renaud G Date: Thu, 20 Aug 2015 15:25:26 +0200 Subject: fix little issues --- node/dicerollernode.cpp | 7 ++----- node/keepdiceexecnode.cpp | 2 +- node/startingnode.cpp | 2 +- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/node/dicerollernode.cpp b/node/dicerollernode.cpp index 213c8ec..fa73185 100644 --- a/node/dicerollernode.cpp +++ b/node/dicerollernode.cpp @@ -61,10 +61,7 @@ void DiceRollerNode::run(ExecutionNode* previous) m_nextNode->run(this); } } - } - - - + } } quint64 DiceRollerNode::getFaces() @@ -75,7 +72,7 @@ QString DiceRollerNode::toString(bool wl) const { if(wl) { - return QString("%1 [label=DiceRollerNode]").arg(m_id); + return QString("%1 [label=DiceRollerNode faces: %2]").arg(m_id).arg(m_faces); } else { diff --git a/node/keepdiceexecnode.cpp b/node/keepdiceexecnode.cpp index 492e69c..7407d30 100644 --- a/node/keepdiceexecnode.cpp +++ b/node/keepdiceexecnode.cpp @@ -66,7 +66,7 @@ QString KeepDiceExecNode::toString(bool wl) const { if(wl) { - return QString("%1 [label=\"KeepDiceExecNode %1\"]").arg(m_id).arg(m_numberOfDice); + return QString("%1 [label=\"KeepDiceExecNode %2\"]").arg(m_id).arg(m_numberOfDice); } else { diff --git a/node/startingnode.cpp b/node/startingnode.cpp index b57c630..42fba6f 100644 --- a/node/startingnode.cpp +++ b/node/startingnode.cpp @@ -17,7 +17,7 @@ QString StartingNode::toString(bool withlabel) const { if(withlabel) { - return QString("%1 [label=\"StartingNode %2\"]").arg(m_id); + return QString("%1 [label=\"StartingNode\"]").arg(m_id); } else { -- cgit v1.2.3-70-g09d2 From 4a7faef6ead8e92839f7d615bc510218cc8dd63f Mon Sep 17 00:00:00 2001 From: Renaud G Date: Thu, 20 Aug 2015 16:11:34 +0200 Subject: add comments --- node/dicerollernode.cpp | 25 +------------------------ node/dicerollernode.h | 36 ++++++++++++++++++++++-------------- 2 files changed, 23 insertions(+), 38 deletions(-) diff --git a/node/dicerollernode.cpp b/node/dicerollernode.cpp index fa73185..73a7218 100644 --- a/node/dicerollernode.cpp +++ b/node/dicerollernode.cpp @@ -8,30 +8,7 @@ #include -//DiceRoller::DiceRoller(QMutex* mutex,DiceResult* diceResult,int faces,int count) -// : m_mutex(mutex),m_sharedDiceResult(diceResult),m_faces(faces),m_diceCount(count) -//{ -//} - -//void DiceRoller::run() -//{ -// for(quint64 i=0; i < m_diceCount ; ++i) -// { -// Die* die = new Die(); -// die->setFaces(m_faces); -// die->roll(); -// m_mutex->lock(); -// m_sharedDiceResult->insertResult(die); -// m_mutex->unlock(); -// } -//} - - - -////////////////////////////////////////////////// -/// \brief DiceRollerNode::DiceRollerNode -////////////////////////////////////////////////// DiceRollerNode::DiceRollerNode(quint64 faces,qint64 offset) : m_faces(faces),m_diceResult(new DiceResult()),m_offset(offset) { @@ -72,7 +49,7 @@ QString DiceRollerNode::toString(bool wl) const { if(wl) { - return QString("%1 [label=DiceRollerNode faces: %2]").arg(m_id).arg(m_faces); + return QString("%1 [label=\"DiceRollerNode faces: %2\"]").arg(m_id).arg(m_faces); } else { diff --git a/node/dicerollernode.h b/node/dicerollernode.h index 402ef40..808676f 100644 --- a/node/dicerollernode.h +++ b/node/dicerollernode.h @@ -2,35 +2,43 @@ #define DICEROLLERNODE_H #include -#include -#include #include "executionnode.h" #include "result/diceresult.h" -//class DiceRoller : public QRunnable -//{ -//public: -// DiceRoller(QMutex* mutex,DiceResult* diceResult,int faces,int count); -// virtual void run (); -//private: -// QMutex* m_mutex; -// DiceResult* m_sharedDiceResult; -// int m_faces; -// quint64 m_diceCount; -//}; /** - * @brief The DiceRollerNode class + * @brief The DiceRollerNode class rolls dice of one kind. */ class DiceRollerNode : public ExecutionNode { public: + /** + * @brief DiceRollerNode builds an instance + * @param faces, number of faces of dices + * @param offset, first value of dice. + */ DiceRollerNode(quint64 faces, qint64 offset = 1); + /** + * @brief run - starts to roll dice. + */ virtual void run(ExecutionNode*); + /** + * @brief getFaces accessor + * @return the face count + */ quint64 getFaces(); + /** + * @brief toString + * @param wl + * @return use to generate dot tree; + */ virtual QString toString(bool wl)const; + /** + * @brief getPriority + * @return priority for dice roll: 4 (higher) + */ virtual qint64 getPriority() const; //private members private: -- cgit v1.2.3-70-g09d2 From 43e3a211a7eba64c350ca22d2c3a9542c439a2ea Mon Sep 17 00:00:00 2001 From: "Renaud G." Date: Wed, 26 Aug 2015 08:08:56 +0200 Subject: Update HelpMe.md add docs on fudge and fate system. --- HelpMe.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/HelpMe.md b/HelpMe.md index a1bffbc..90743cc 100644 --- a/HelpMe.md +++ b/HelpMe.md @@ -30,6 +30,7 @@ Roll five ten-faced die. Roll 777 six-faced die. + Thanks of several operations and option, you can tune a bit you rolling command. ## List of operator @@ -123,6 +124,15 @@ Result: 3.5 Roll 2 dice and add 3 to the sum of those dice. Then the result is used for rolling dice. +### Roll dice in Range + +> 4d[-1-1] + +Rolling 4 dice with value between -1 to 1. (Fudge/Fate system) + +> 3d[0-9] + +Rolling 3 dice with 10 faces starting at 0. ## Arithmetic and Dice -- cgit v1.2.3-70-g09d2 From 7cd8f3af73c873f235b1ed8888b469c6f5dc323c Mon Sep 17 00:00:00 2001 From: "Renaud G." Date: Wed, 26 Aug 2015 08:11:26 +0200 Subject: Update HelpMe.md Replace it --- HelpMe.md | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/HelpMe.md b/HelpMe.md index 90743cc..ed51bab 100644 --- a/HelpMe.md +++ b/HelpMe.md @@ -99,6 +99,15 @@ Explose while the value fits the Validator (See Validator for more details about Reroll the die if its value fits the Validator and add the new value to the previous one. It does that only once. +### Roll dice in Range + +> 4d[-1-1] + +Rolling 4 dice with value between -1 to 1. (Fudge/Fate system) + +> 3d[0-9] + +Rolling 3 dice with 10 faces starting at 0. ## Arithmetic @@ -124,16 +133,6 @@ Result: 3.5 Roll 2 dice and add 3 to the sum of those dice. Then the result is used for rolling dice. -### Roll dice in Range - -> 4d[-1-1] - -Rolling 4 dice with value between -1 to 1. (Fudge/Fate system) - -> 3d[0-9] - -Rolling 3 dice with 10 faces starting at 0. - ## Arithmetic and Dice It is possible to use arithmetic opearation on dice. Please pay attention that the default operation to translate a -- cgit v1.2.3-70-g09d2