aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/parsingtoolbox.cpp
diff options
context:
space:
mode:
authorRenaud G <renaud@rolisteam.org>2016-05-05 16:15:42 +0200
committerRenaud G <renaud@rolisteam.org>2016-05-05 16:15:42 +0200
commit64c35992db5352833ccd6cb623dbb9e9362834dc (patch)
tree3c138e6727b059785d9beb8957c051952b1f0830 /parsingtoolbox.cpp
parent30bdb9a0e446350846fc0cac82b8a22c4bdd983f (diff)
parentf34506d0795069a1be216c2c1a5c11c0b369efa6 (diff)
downloadOneRoll-64c35992db5352833ccd6cb623dbb9e9362834dc.tar.gz
OneRoll-64c35992db5352833ccd6cb623dbb9e9362834dc.zip
Merge branch 'master' of github.com:Rolisteam/DiceParser
Diffstat (limited to 'parsingtoolbox.cpp')
-rw-r--r--parsingtoolbox.cpp61
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;
+ }
}
}
-
-
}