aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/libparser
diff options
context:
space:
mode:
Diffstat (limited to 'src/libparser')
-rw-r--r--src/libparser/compositevalidator.cpp10
-rw-r--r--src/libparser/dicealias.cpp14
-rw-r--r--src/libparser/diceroller.cpp25
-rw-r--r--src/libparser/die.h1
-rw-r--r--src/libparser/include/diceparser/dicealias.h9
-rw-r--r--src/libparser/node/allsamenode.h2
-rw-r--r--src/libparser/node/executionnode.h2
-rw-r--r--src/libparser/node/filternode.cpp2
-rw-r--r--src/libparser/node/filternode.h1
-rw-r--r--src/libparser/node/groupnode.h1
-rw-r--r--src/libparser/node/jumpbackwardnode.h1
-rw-r--r--src/libparser/node/keepdiceexecnode.h4
-rw-r--r--src/libparser/node/roundnode.h7
-rw-r--r--src/libparser/node/scalaroperatornode.h1
-rw-r--r--src/libparser/node/uniquenode.h3
-rw-r--r--src/libparser/node/valueslistnode.h2
-rw-r--r--src/libparser/parsingtoolbox.cpp48
-rw-r--r--src/libparser/result/diceresult.cpp4
-rw-r--r--src/libparser/validator.cpp32
-rw-r--r--src/libparser/validatorlist.cpp2
20 files changed, 87 insertions, 84 deletions
diff --git a/src/libparser/compositevalidator.cpp b/src/libparser/compositevalidator.cpp
index b0f127d..3b8cdd4 100644
--- a/src/libparser/compositevalidator.cpp
+++ b/src/libparser/compositevalidator.cpp
@@ -81,7 +81,9 @@ QString CompositeValidator::toString()
[](Validator* validator) { return validator->toString(); });
QStringList operatorTextList;
std::transform(
- m_operators.begin(), m_operators.end(), std::back_inserter(operatorTextList), [](LogicOperation validator) {
+ m_operators.begin(), m_operators.end(), std::back_inserter(operatorTextList),
+ [](LogicOperation validator)
+ {
static std::map<LogicOperation, QString> map({{OR, "|"}, {EXCLUSIVE_OR, "^"}, {AND, "&"}, {NONE, ""}});
return map[validator];
});
@@ -136,9 +138,9 @@ Dice::CONDITION_STATE testXOR(Dice::CONDITION_STATE before, Dice::CONDITION_STAT
Dice::CONDITION_STATE CompositeValidator::isValidRangeSize(const std::pair<qint64, qint64>& range) const
{
std::vector<Dice::CONDITION_STATE> vec;
- std::transform(
- m_validatorList.begin(), m_validatorList.end(), std::back_inserter(vec),
- [range](Validator* validator) -> Dice::CONDITION_STATE { return validator->isValidRangeSize(range); });
+ std::transform(m_validatorList.begin(), m_validatorList.end(), std::back_inserter(vec),
+ [range](Validator* validator) -> Dice::CONDITION_STATE
+ { return validator->isValidRangeSize(range); });
auto itError= std::find(vec.begin(), vec.end(), Dice::CONDITION_STATE::ERROR_STATE);
diff --git a/src/libparser/dicealias.cpp b/src/libparser/dicealias.cpp
index 67e3046..736f2ec 100644
--- a/src/libparser/dicealias.cpp
+++ b/src/libparser/dicealias.cpp
@@ -131,7 +131,7 @@ DiceAlias::DiceAlias(QString pattern, QString command, QString comment, bool isR
, m_command(command)
, m_comment(comment)
, m_type(isReplace ? REPLACE : REGEXP)
- , m_isEnable(isEnable)
+ , m_disable(isEnable)
{
}
@@ -145,13 +145,13 @@ DiceAlias::DiceAlias(const DiceAlias& alias)
m_command= alias.command();
m_comment= alias.comment();
m_pattern= alias.pattern();
- m_isEnable= alias.isEnable();
+ m_disable= alias.isDisable();
m_type= alias.isReplace() ? REPLACE : REGEXP;
}
bool DiceAlias::resolved(QString& str)
{
- if(!m_isEnable)
+ if(m_disable)
return false;
if((m_type == REPLACE) && (str.contains(m_pattern)))
@@ -209,14 +209,14 @@ void DiceAlias::setReplace(bool b)
}
}
-bool DiceAlias::isEnable() const
+bool DiceAlias::isDisable() const
{
- return m_isEnable;
+ return m_disable;
}
-void DiceAlias::setEnable(bool b)
+void DiceAlias::setDisable(bool b)
{
- m_isEnable= b;
+ m_disable= b;
}
QString DiceAlias::comment() const
diff --git a/src/libparser/diceroller.cpp b/src/libparser/diceroller.cpp
index 3c315f6..5396ef8 100644
--- a/src/libparser/diceroller.cpp
+++ b/src/libparser/diceroller.cpp
@@ -63,18 +63,21 @@ void DiceRoller::readErrorAndWarning()
void DiceRoller::start()
{
- auto future= QtConcurrent::run([this]() {
- if(m_diceparser.parseLine(m_command))
+ auto future= QtConcurrent::run(
+ [this]()
{
- m_diceparser.start();
- readErrorAndWarning();
- auto jsonstr= m_diceparser.resultAsJSon([](const QString& value, const QString&, bool) { return value; });
- QJsonDocument doc= QJsonDocument::fromJson(jsonstr.toLocal8Bit());
- auto json= doc.object();
- m_result= json["scalar"].toString().toDouble();
- emit resultChanged();
- }
- });
+ if(m_diceparser.parseLine(m_command))
+ {
+ m_diceparser.start();
+ readErrorAndWarning();
+ auto jsonstr
+ = m_diceparser.resultAsJSon([](const QString& value, const QString&, bool) { return value; });
+ QJsonDocument doc= QJsonDocument::fromJson(jsonstr.toLocal8Bit());
+ auto json= doc.object();
+ m_result= json["scalar"].toString().toDouble();
+ emit resultChanged();
+ }
+ });
}
QString DiceRoller::error() const
diff --git a/src/libparser/die.h b/src/libparser/die.h
index 0fe36fd..ea6712e 100644
--- a/src/libparser/die.h
+++ b/src/libparser/die.h
@@ -150,7 +150,6 @@ private:
bool m_highlighted{true};
qint64 m_maxValue{0};
qint64 m_base{0};
- qint64 m_occurence{1};
QString m_color;
Dice::ArithmeticOperator m_op;
diff --git a/src/libparser/include/diceparser/dicealias.h b/src/libparser/include/diceparser/dicealias.h
index 05d5a0b..cd8763e 100644
--- a/src/libparser/include/diceparser/dicealias.h
+++ b/src/libparser/include/diceparser/dicealias.h
@@ -43,7 +43,8 @@ public:
* @param key
* @param isReplace
*/
- DiceAlias(QString pattern, QString command, QString comment= QString{}, bool isReplace= true, bool isEnable= true);
+ DiceAlias(QString pattern, QString command, QString comment= QString{}, bool isReplace= true,
+ bool isDisable= false);
DiceAlias(const DiceAlias& alias);
/**
* @brief ~DiceAlias
@@ -94,12 +95,12 @@ public:
* @brief isEnable
* @return
*/
- bool isEnable() const;
+ bool isDisable() const;
/**
* @brief setEnable
* @param b
*/
- void setEnable(bool b);
+ void setDisable(bool b);
/**
* @brief getComment
* @return
@@ -116,7 +117,7 @@ private:
QString m_command;
QString m_comment;
RESOLUTION_TYPE m_type;
- bool m_isEnable;
+ bool m_disable{false};
};
#endif // DICEALIAS_H
diff --git a/src/libparser/node/allsamenode.h b/src/libparser/node/allsamenode.h
index e5c1dc2..ea67c14 100644
--- a/src/libparser/node/allsamenode.h
+++ b/src/libparser/node/allsamenode.h
@@ -10,7 +10,7 @@ class AllSameNode : public ExecutionNode
{
public:
AllSameNode();
-// virtual ~AllSameNode();
+ // virtual ~AllSameNode();
virtual void run(ExecutionNode* previous);
/**
diff --git a/src/libparser/node/executionnode.h b/src/libparser/node/executionnode.h
index 6dba052..cacd307 100644
--- a/src/libparser/node/executionnode.h
+++ b/src/libparser/node/executionnode.h
@@ -84,7 +84,7 @@ public:
virtual qint64 getScalarResult();
- bool isValid(bool condition, Dice::ERROR_CODE code , const QString& errorTxt, bool error = true);
+ bool isValid(bool condition, Dice::ERROR_CODE code, const QString& errorTxt, bool error= true);
protected:
/**
diff --git a/src/libparser/node/filternode.cpp b/src/libparser/node/filternode.cpp
index af3d166..3274e15 100644
--- a/src/libparser/node/filternode.cpp
+++ b/src/libparser/node/filternode.cpp
@@ -1,7 +1,7 @@
#include "filternode.h"
#include "validatorlist.h"
-FilterNode::FilterNode() : m_diceResult(new DiceResult()), m_eachValue(false)
+FilterNode::FilterNode() : m_diceResult(new DiceResult())
{
m_result= m_diceResult;
}
diff --git a/src/libparser/node/filternode.h b/src/libparser/node/filternode.h
index 7af6fe2..4022aa3 100644
--- a/src/libparser/node/filternode.h
+++ b/src/libparser/node/filternode.h
@@ -34,7 +34,6 @@ public:
private:
DiceResult* m_diceResult;
ValidatorList* m_validatorList;
- bool m_eachValue;
};
#endif // FILTERNODE_H
diff --git a/src/libparser/node/groupnode.h b/src/libparser/node/groupnode.h
index 72e795c..982eb6d 100644
--- a/src/libparser/node/groupnode.h
+++ b/src/libparser/node/groupnode.h
@@ -39,6 +39,7 @@ public:
void setExceptedValue(qint64 exceptedValue);
void sort();
+
private:
qint64 m_exceptedValue= 0;
};
diff --git a/src/libparser/node/jumpbackwardnode.h b/src/libparser/node/jumpbackwardnode.h
index 2e14a00..4de2a05 100644
--- a/src/libparser/node/jumpbackwardnode.h
+++ b/src/libparser/node/jumpbackwardnode.h
@@ -61,6 +61,7 @@ public:
*/
virtual ExecutionNode* getCopy() const override;
virtual void execute(ExecutionNode* previous= nullptr) override;
+
private:
DiceResult* m_diceResult;
ExecutionNode* m_backwardNode;
diff --git a/src/libparser/node/keepdiceexecnode.h b/src/libparser/node/keepdiceexecnode.h
index 0dd6616..e6bd998 100644
--- a/src/libparser/node/keepdiceexecnode.h
+++ b/src/libparser/node/keepdiceexecnode.h
@@ -34,13 +34,13 @@ public:
virtual ~KeepDiceExecNode();
virtual void run(ExecutionNode* previous);
- virtual void setDiceKeepNumber(ExecutionNode* valueNode );
+ virtual void setDiceKeepNumber(ExecutionNode* valueNode);
virtual QString toString(bool) const;
virtual qint64 getPriority() const;
virtual ExecutionNode* getCopy() const;
private:
- ExecutionNode* m_numberOfDiceNode = nullptr;
+ ExecutionNode* m_numberOfDiceNode= nullptr;
DiceResult* m_diceResult;
};
diff --git a/src/libparser/node/roundnode.h b/src/libparser/node/roundnode.h
index 0bf49b7..a16e886 100644
--- a/src/libparser/node/roundnode.h
+++ b/src/libparser/node/roundnode.h
@@ -7,7 +7,8 @@
class RoundNode : public ExecutionNode
{
public:
- enum Mode {
+ enum Mode
+ {
FLOOR,
CEIL,
ROUND
@@ -16,10 +17,10 @@ public:
// ExecutionNode interface
public:
- void run(ExecutionNode *previous);
+ void run(ExecutionNode* previous);
QString toString(bool withLabel) const;
qint64 getPriority() const;
- ExecutionNode *getCopy() const;
+ ExecutionNode* getCopy() const;
void setCommand(ExecutionNode* cmd);
private:
diff --git a/src/libparser/node/scalaroperatornode.h b/src/libparser/node/scalaroperatornode.h
index 73e0bef..fbb30a8 100644
--- a/src/libparser/node/scalaroperatornode.h
+++ b/src/libparser/node/scalaroperatornode.h
@@ -94,7 +94,6 @@ public:
*/
virtual ExecutionNode* getCopy() const override;
-
void setNextNode(ExecutionNode* node) override;
private:
diff --git a/src/libparser/node/uniquenode.h b/src/libparser/node/uniquenode.h
index 039ba11..adab4fc 100644
--- a/src/libparser/node/uniquenode.h
+++ b/src/libparser/node/uniquenode.h
@@ -26,7 +26,8 @@
#include "result/diceresult.h"
/**
- * @brief The UniqueNode class is an ExecutionNode. It is dedicated to unique result of one dice into one dimension array.
+ * @brief The UniqueNode class is an ExecutionNode. It is dedicated to unique result of one dice into one dimension
+ * array.
*/
class UniqueNode : public ExecutionNode
{
diff --git a/src/libparser/node/valueslistnode.h b/src/libparser/node/valueslistnode.h
index 100f275..e37babd 100644
--- a/src/libparser/node/valueslistnode.h
+++ b/src/libparser/node/valueslistnode.h
@@ -18,7 +18,7 @@ public:
private:
std::vector<ExecutionNode*> m_data;
- DiceResult* m_diceResult = nullptr;
+ DiceResult* m_diceResult= nullptr;
};
#endif // VALUESLISTNODE_H
diff --git a/src/libparser/parsingtoolbox.cpp b/src/libparser/parsingtoolbox.cpp
index 23e0cbb..2d9c08d 100644
--- a/src/libparser/parsingtoolbox.cpp
+++ b/src/libparser/parsingtoolbox.cpp
@@ -763,7 +763,6 @@ bool ParsingToolBox::readString(QString& str, QString& strResult)
str= str.remove(0, 1);
int i= 0;
- int j= 0;
bool previousEscape= false;
QString result;
/*&&
@@ -780,7 +779,6 @@ bool ParsingToolBox::readString(QString& str, QString& strResult)
if(previousEscape && str[i] != '\"')
{
result+= '\\';
- ++j;
}
result+= str[i];
previousEscape= false;
@@ -942,20 +940,12 @@ bool ParsingToolBox::readStopAtFirst(QString& str)
Dice::CONDITION_STATE ParsingToolBox::isValidValidator(ExecutionNode* previous, ValidatorList* val)
{
- auto node= getNode<DiceRollerNode>(previous);
- if(node)
- return val->isValidRangeSize(node->getRange());
+ auto res= Dice::CONDITION_STATE::ERROR_STATE;
+ DiceResult* result= dynamic_cast<DiceResult*>(previous->getResult());
+ if(result)
+ res= Dice::CONDITION_STATE::REACHABLE;
- auto listNode= getNode<ValuesListNode>(previous);
-
- if(!listNode)
- return Dice::CONDITION_STATE::ERROR_STATE;
-
- auto dice= dynamic_cast<DiceResult*>(listNode->getResult());
- if(!dice)
- return Dice::CONDITION_STATE::ERROR_STATE;
-
- return Dice::CONDITION_STATE::REACHABLE;
+ return res;
}
template <typename T>
T* ParsingToolBox::getNode(ExecutionNode* previous)
@@ -1081,9 +1071,7 @@ void ParsingToolBox::setStartNodes(std::vector<ExecutionNode*> nodes)
void ParsingToolBox::readProbability(QStringList& str, QList<Range>& ranges)
{
- quint64 totalDistance= 0;
quint64 undefDistance= 0;
- int undefCount= 0;
int maxValue= 0;
int i= 0;
int j= 0;
@@ -1103,7 +1091,7 @@ void ParsingToolBox::readProbability(QStringList& str, QList<Range>& ranges)
Range range;
range.setValue(start, end);
ranges.append(range);
- totalDistance+= static_cast<quint64>(end - start + 1);
+ // totalDistance+= static_cast<quint64>(end - start + 1);
++i;
}
else // percentage
@@ -1112,7 +1100,7 @@ void ParsingToolBox::readProbability(QStringList& str, QList<Range>& ranges)
Range range;
range.setStart(start);
ranges.append(range);
- ++undefCount;
+ //++undefCount;
undefDistance+= static_cast<quint64>(start);
}
if((end > maxValue) || (i == 1))
@@ -1771,12 +1759,14 @@ bool ParsingToolBox::readOption(QString& str, ExecutionNode* previous) //,
if(nullptr != validatorList)
{
auto validity= isValidValidator(previous, validatorList);
+ if(validity != Dice::CONDITION_STATE::ERROR_STATE)
+ {
+ CountExecuteNode* countNode= new CountExecuteNode();
+ countNode->setValidatorList(validatorList);
- CountExecuteNode* countNode= new CountExecuteNode();
- countNode->setValidatorList(validatorList);
-
- previous->setNextNode(countNode);
- found= true;
+ previous->setNextNode(countNode);
+ found= true;
+ }
}
else
{
@@ -2048,6 +2038,8 @@ ExplodeDiceNode* ParsingToolBox::addExplodeDiceNode(qint64 value, ExecutionNode*
auto valList= new ValidatorList();
valList->setValidators(QList<Validator*>() << condition);
auto validity= isValidValidator(previous, valList);
+ Q_ASSERT(validity != Dice::CONDITION_STATE::ERROR_STATE);
+
explodeDiceNode->setValidatorList(valList);
previous->setNextNode(explodeDiceNode);
return explodeDiceNode;
@@ -2276,10 +2268,10 @@ QString ParsingToolBox::convertAlias(QString str)
{
for(auto& cmd : m_aliasList)
{
- if(cmd->isEnable())
- {
- cmd->resolved(str);
- }
+ if(cmd->isDisable())
+ continue;
+
+ cmd->resolved(str);
}
return str;
}
diff --git a/src/libparser/result/diceresult.cpp b/src/libparser/result/diceresult.cpp
index d25c93b..8a66986 100644
--- a/src/libparser/result/diceresult.cpp
+++ b/src/libparser/result/diceresult.cpp
@@ -51,8 +51,8 @@ void DiceResult::setResultList(QList<Die*> list)
m_diceValues.removeAll(it);
/*m_diceValues.erase(
- std::remove_if(m_diceValues.begin(), m_diceValues.end(), [list](Die* die) { return list.contains(die); }),
- m_diceValues.end());*/
+ std::remove_if(m_diceValues.begin(), m_diceValues.end(), [list](Die* die) { return
+ list.contains(die); }), m_diceValues.end());*/
qDeleteAll(m_diceValues.begin(), m_diceValues.end());
m_diceValues.clear();
diff --git a/src/libparser/validator.cpp b/src/libparser/validator.cpp
index 201574b..a001b9e 100644
--- a/src/libparser/validator.cpp
+++ b/src/libparser/validator.cpp
@@ -28,13 +28,15 @@ template <typename Functor>
qint64 Validator::onEach(const std::vector<Die*>& b, bool recursive, bool unlight, Functor functor) const
{
qint64 result= 0;
- std::for_each(b.begin(), b.end(), [this, recursive, unlight, functor, &result](Die* die) {
- if(hasValid(die, recursive, unlight))
- {
- ++result;
- functor(die, recursive, unlight);
- }
- });
+ std::for_each(b.begin(), b.end(),
+ [this, recursive, unlight, functor, &result](Die* die)
+ {
+ if(hasValid(die, recursive, unlight))
+ {
+ ++result;
+ functor(die, recursive, unlight);
+ }
+ });
return result;
}
@@ -42,13 +44,15 @@ template <typename Functor>
qint64 Validator::onEachValue(const std::vector<Die*>& b, bool recursive, bool unlight, Functor functor) const
{
qint64 result= 0;
- std::for_each(b.begin(), b.end(), [this, recursive, unlight, functor, &result](Die* die) {
- if(hasValid(die, recursive, unlight))
- {
- ++result;
- functor(die, recursive, unlight);
- }
- });
+ std::for_each(b.begin(), b.end(),
+ [this, recursive, unlight, functor, &result](Die* die)
+ {
+ if(hasValid(die, recursive, unlight))
+ {
+ ++result;
+ functor(die, recursive, unlight);
+ }
+ });
return result;
}
diff --git a/src/libparser/validatorlist.cpp b/src/libparser/validatorlist.cpp
index 41bc24f..bc8ed21 100644
--- a/src/libparser/validatorlist.cpp
+++ b/src/libparser/validatorlist.cpp
@@ -39,7 +39,7 @@ void mergeResultsAsAND(const ValidatorResult& diceList, ValidatorResult& result)
val.appendValidDice(dice.first, dice.second);
}
result= val;
- result.setAllTrue(diceList.allTrue() & result.allTrue());
+ result.setAllTrue(diceList.allTrue() && result.allTrue());
}
void mergeResultsAsExeclusiveOR(const ValidatorResult& diceList, ValidatorResult& result)