diff options
Diffstat (limited to 'src/libparser')
| -rw-r--r-- | src/libparser/compositevalidator.cpp | 10 | ||||
| -rw-r--r-- | src/libparser/dicealias.cpp | 14 | ||||
| -rw-r--r-- | src/libparser/diceroller.cpp | 25 | ||||
| -rw-r--r-- | src/libparser/die.h | 1 | ||||
| -rw-r--r-- | src/libparser/include/diceparser/dicealias.h | 9 | ||||
| -rw-r--r-- | src/libparser/node/allsamenode.h | 2 | ||||
| -rw-r--r-- | src/libparser/node/executionnode.h | 2 | ||||
| -rw-r--r-- | src/libparser/node/filternode.cpp | 2 | ||||
| -rw-r--r-- | src/libparser/node/filternode.h | 1 | ||||
| -rw-r--r-- | src/libparser/node/groupnode.h | 1 | ||||
| -rw-r--r-- | src/libparser/node/jumpbackwardnode.h | 1 | ||||
| -rw-r--r-- | src/libparser/node/keepdiceexecnode.h | 4 | ||||
| -rw-r--r-- | src/libparser/node/roundnode.h | 7 | ||||
| -rw-r--r-- | src/libparser/node/scalaroperatornode.h | 1 | ||||
| -rw-r--r-- | src/libparser/node/uniquenode.h | 3 | ||||
| -rw-r--r-- | src/libparser/node/valueslistnode.h | 2 | ||||
| -rw-r--r-- | src/libparser/parsingtoolbox.cpp | 48 | ||||
| -rw-r--r-- | src/libparser/result/diceresult.cpp | 4 | ||||
| -rw-r--r-- | src/libparser/validator.cpp | 32 | ||||
| -rw-r--r-- | src/libparser/validatorlist.cpp | 2 |
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) |