diff options
| author | 2016-05-05 16:15:42 +0200 | |
|---|---|---|
| committer | 2016-05-05 16:15:42 +0200 | |
| commit | 64c35992db5352833ccd6cb623dbb9e9362834dc (patch) | |
| tree | 3c138e6727b059785d9beb8957c051952b1f0830 /parsingtoolbox.cpp | |
| parent | 30bdb9a0e446350846fc0cac82b8a22c4bdd983f (diff) | |
| parent | f34506d0795069a1be216c2c1a5c11c0b369efa6 (diff) | |
| download | OneRoll-64c35992db5352833ccd6cb623dbb9e9362834dc.tar.gz OneRoll-64c35992db5352833ccd6cb623dbb9e9362834dc.zip | |
Merge branch 'master' of github.com:Rolisteam/DiceParser
Diffstat (limited to 'parsingtoolbox.cpp')
| -rw-r--r-- | parsingtoolbox.cpp | 61 |
1 files changed, 27 insertions, 34 deletions
diff --git a/parsingtoolbox.cpp b/parsingtoolbox.cpp index 7950e4d..38221f9 100644 --- a/parsingtoolbox.cpp +++ b/parsingtoolbox.cpp @@ -27,8 +27,12 @@ QHash<QString,QString>* ParsingToolBox::m_variableHash = NULL; ParsingToolBox::ParsingToolBox() + : m_logicOp(new QMap<QString,BooleanCondition::LogicOperator>()), + m_logicOperation(new QMap<QString,CompositeValidator::LogicOperation>()), + m_conditionOperation(new QMap<QString,OperationCondition::ConditionOperator>()), + m_arithmeticOperation(new QHash<QString,ScalarOperatorNode::ArithmeticOperator>()) { - m_logicOp = new QMap<QString,BooleanCondition::LogicOperator>(); + //m_logicOp = ; m_logicOp->insert(">=",BooleanCondition::GreaterOrEqual); m_logicOp->insert("<=",BooleanCondition::LesserOrEqual); m_logicOp->insert("<",BooleanCondition::LesserThan); @@ -36,16 +40,16 @@ ParsingToolBox::ParsingToolBox() m_logicOp->insert(">",BooleanCondition::GreaterThan); - m_logicOperation = new QMap<QString,CompositeValidator::LogicOperation>(); + //m_logicOperation = ; m_logicOperation->insert("|",CompositeValidator::OR); m_logicOperation->insert("^",CompositeValidator::EXCLUSIVE_OR); m_logicOperation->insert("&",CompositeValidator::AND); - m_conditionOperation = new QMap<QString,OperationCondition::ConditionOperator>(); + // m_conditionOperation = ; m_conditionOperation->insert("%",OperationCondition::Modulo); - m_arithmeticOperation = new QHash<QString,ScalarOperatorNode::ArithmeticOperator>(); + //m_arithmeticOperation = new QHash<QString,ScalarOperatorNode::ArithmeticOperator>(); m_arithmeticOperation->insert(QStringLiteral("+"),ScalarOperatorNode::PLUS); m_arithmeticOperation->insert(QStringLiteral("-"),ScalarOperatorNode::MINUS); m_arithmeticOperation->insert(QStringLiteral("*"),ScalarOperatorNode::MULTIPLICATION); @@ -425,18 +429,11 @@ bool ParsingToolBox::readDiceRange(QString& str,qint64& start, qint64& end) str=str.remove(0,1); return true; } - else - { - return false; - } } } - else - { - return false; - } } } + return false; } ParsingToolBox::LIST_OPERATOR ParsingToolBox::readListOperator(QString& str) @@ -493,7 +490,7 @@ void ParsingToolBox::readProbability(QStringList& str,QList<Range>& ranges) int i=0; int j=0; //range - foreach(QString line,str) + for(QString line:str) { int pos = line.indexOf('['); if(-1!=pos) @@ -511,7 +508,7 @@ void ParsingToolBox::readProbability(QStringList& str,QList<Range>& ranges) totalDistance += end-start+1; ++i; } - else + else//pourcentage { Range range; range.setStart(start); @@ -528,29 +525,25 @@ void ParsingToolBox::readProbability(QStringList& str,QList<Range>& ranges) } - qint64 totalDistPourcent = totalDistance * undefDistance / (100-undefDistance); - - if(totalDistPourcent<undefCount) + if(undefDistance!=0) { - totalDistPourcent = undefCount; - } - - for(int i = 0; i< ranges.size(); ++i) - { - Range tmp = ranges.at(i); - if(!tmp.isFullyDefined()) + qreal ratio = (qreal)100.0 / (qreal)undefDistance; + qint64 realStart=0; + for(int i = 0; i< ranges.size(); ++i) { - int dist = tmp.getStart(); - tmp.setStart(maxValue+1); - maxValue+=1; - double truc = undefDistance*1.0/dist; - - tmp.setEnd(maxValue+(truc*totalDistPourcent)); - maxValue = maxValue+(truc*totalDistPourcent); - ranges[i]=tmp; + Range tmp = ranges.at(i); + if(!tmp.isFullyDefined()) + { + int dist = tmp.getStart(); + tmp.setStart(realStart+1); + double truc = dist*ratio; + + tmp.setEnd(realStart+truc); + realStart = tmp.getEnd(); + //qDebug() <<"start:"<< tmp.getStart() << "end:"<< realStart; + ranges[i]=tmp; + } } } - - } |