diff options
| author | 2020-09-27 13:02:59 +0200 | |
|---|---|---|
| committer | 2020-09-27 13:04:58 +0200 | |
| commit | edc3ba1a56fce36c47128cb6e399608ffdafaf04 (patch) | |
| tree | d97369ac3f3676c35405b6d4cfe5678aa6015a0b | |
| parent | f21d85618079a21f9c30d5397e16a7f837819457 (diff) | |
| download | OneRoll-edc3ba1a56fce36c47128cb6e399608ffdafaf04.tar.gz OneRoll-edc3ba1a56fce36c47128cb6e399608ffdafaf04.zip | |
clean up diceparser code.
Cli build is piloted from an cmake option.
| -rw-r--r-- | CMakeLists.txt | 12 | ||||
| -rw-r--r-- | compositevalidator.cpp | 44 | ||||
| -rw-r--r-- | diceparser.cpp | 136 | ||||
| -rw-r--r-- | node/numbernode.cpp | 1 |
4 files changed, 31 insertions, 162 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index d1b0f93..c1eec8d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,6 +8,8 @@ find_package(Qt5 ${QT_REQUIRED_VERSION} CONFIG REQUIRED COMPONENTS Core Test Gui enable_testing(true) include_directories(${CMAKE_CURRENT_SOURCE_DIR} result node) +option(BUILD_CLI OFF) + SET( dice_sources ${CMAKE_CURRENT_SOURCE_DIR}/diceparser.cpp ${CMAKE_CURRENT_SOURCE_DIR}/range.cpp @@ -35,7 +37,6 @@ SET( dice_sources ${CMAKE_CURRENT_SOURCE_DIR}/node/listsetrollnode.cpp ${CMAKE_CURRENT_SOURCE_DIR}/node/numbernode.cpp ${CMAKE_CURRENT_SOURCE_DIR}/node/parenthesesnode.cpp - # ${CMAKE_CURRENT_SOURCE_DIR}/ node/forloopnode.cpp ${CMAKE_CURRENT_SOURCE_DIR}/node/paintnode.cpp ${CMAKE_CURRENT_SOURCE_DIR}/node/rerolldicenode.cpp ${CMAKE_CURRENT_SOURCE_DIR}/node/scalaroperatornode.cpp @@ -79,12 +80,11 @@ set_target_properties(diceparser_shared PROPERTIES SOVERSION 1) set_target_properties(diceparser_shared PROPERTIES PUBLIC_HEADER "include/diceparser.h;include/highlightdice.h;include/parsingtoolbox.h;include/dicealias.h;include/diceparserhelper.h") -add_subdirectory(cli) -add_subdirectory( tests ) -#add_subdirectory(irc) -#add_subdirectory(mobile) -#add_subdirectory(webserver) +IF(BUILD_CLI) + add_subdirectory(cli) +ENDIF() +add_subdirectory( tests ) include(GNUInstallDirs) diff --git a/compositevalidator.cpp b/compositevalidator.cpp index 4b7b11c..b0f127d 100644 --- a/compositevalidator.cpp +++ b/compositevalidator.cpp @@ -21,6 +21,8 @@ ***************************************************************************/ #include "compositevalidator.h" +#include <map> + CompositeValidator::CompositeValidator() {} CompositeValidator::~CompositeValidator() @@ -73,27 +75,29 @@ qint64 CompositeValidator::hasValid(Die* b, bool recursive, bool unhighlight) co QString CompositeValidator::toString() { - QString str= ""; - /*switch (m_operator) + // m_validatorList + QStringList validatorsTextList; + std::transform(m_validatorList.begin(), m_validatorList.end(), std::back_inserter(validatorsTextList), + [](Validator* validator) { return validator->toString(); }); + QStringList operatorTextList; + std::transform( + 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]; + }); + + if(validatorsTextList.size() - 1 != operatorTextList.size()) + return QString("Error - operator and validator count don't fit"); + + QStringList result; + int i= 0; + for(auto text : validatorsTextList) { - 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; + result << text << operatorTextList[i]; + + ++i; } - return QString("[%1%2]").arg(str).arg(m_value);*/ - return str; + return result.join(" "); } Dice::CONDITION_STATE testAND(Dice::CONDITION_STATE before, Dice::CONDITION_STATE current) @@ -144,7 +148,7 @@ Dice::CONDITION_STATE CompositeValidator::isValidRangeSize(const std::pair<qint6 } std::size_t i= 0; - Dice::CONDITION_STATE val = Dice::CONDITION_STATE::ERROR_STATE; + Dice::CONDITION_STATE val= Dice::CONDITION_STATE::ERROR_STATE; for(const auto& op : m_operators) { auto currentState= vec[i + 1]; diff --git a/diceparser.cpp b/diceparser.cpp index 7f64b4b..d42716a 100644 --- a/diceparser.cpp +++ b/diceparser.cpp @@ -67,6 +67,7 @@ bool DiceParser::parseLine(QString str, bool allowAlias) { str= m_parsingToolbox->convertAlias(str); } + m_parsingToolbox->clearUp(); m_command= str; auto instructions= m_parsingToolbox->readInstructionList(str, true); m_command.remove(m_parsingToolbox->getComment()); @@ -107,141 +108,6 @@ void DiceParser::start() } } -/* -QStringList DiceParser::stringResult() const -{ - QStringList stringListResult; - for(auto node : m_parsingToolbox->getStartNodes()) - { - ExecutionNode* next= ParsingToolBox::getLeafNode(node); - QString str; - Result* result= next->getResult(); - bool found= false; - while((nullptr != result) && (!found)) - { - if(result->hasResultOfType(Dice::RESULT_TYPE::STRING)) - { - str= result->getResult(Dice::RESULT_TYPE::STRING).toString(); - found= true; - } - result= result->getPrevious(); - } - if(!str.isEmpty()) - stringListResult << str; - } - return stringListResult; -} - -QStringList DiceParser::allDiceResult(bool& hasAlias) const -{ - QStringList stringListResult; - for(auto node : m_parsingToolbox->getStartNodes()) - { - ExecutionNode* next= ParsingToolBox::getLeafNode(node); - Result* result= next->getResult(); - QList<Die*> dieListResult; - - while(nullptr != result) - { - if(result->hasResultOfType(Dice::RESULT_TYPE::DICE_LIST)) - { - DiceResult* stringResult= dynamic_cast<DiceResult*>(result); - if(nullptr != stringResult) - { - for(auto& die : stringResult->getResultList()) - { - if(!dieListResult.contains(die)) - { - dieListResult.removeAll(die); - dieListResult << die; - } - } - hasAlias= true; - } - } - result= result->getPrevious(); - } - for(auto& die : dieListResult) - { - if(die->isHighlighted()) - { - for(qint64& value : die->getListValue()) - { - stringListResult << QString::number(value); - } - } - } - } - - return stringListResult; -}*/ - -/*void DiceParser::lastDiceResult(QList<ExportedDiceResult>& diceValuesList, -bool& homogeneous) const -{ - QSet<QString> alreadySeenDice; - for(auto start : m_parsingToolbox->getStartNodes()) - { - ExportedDiceResult diceValues; - ExecutionNode* next= ParsingToolBox::getLeafNode(start); - Result* result= next->getResult(); - while(nullptr != result) - { - if(result->hasResultOfType(Dice::RESULT_TYPE::DICE_LIST)) - { - DiceResult* diceResult= dynamic_cast<DiceResult*>(result); - if(nullptr != diceResult) - { - if(homogeneous) - { - homogeneous= diceResult->isHomogeneous(); - } - quint64 face= 0; - ListDiceResult listpair; - for(auto& die : diceResult->getResultList()) - { - if(die->hasBeenDisplayed() || -alreadySeenDice.contains(die->getUuid())) continue; - - QList<qint64> valuesResult; - valuesResult.append(die->getValue()); - die->displayed(); - face= die->getFaces(); - if(die->hasChildrenValue()) - { - for(qint64& i : die->getListValue()) - { - valuesResult.append(i); - } - } - HighLightDice hlDice(valuesResult, die->isHighlighted(), -die->getColor(), die->hasBeenDisplayed(), 0); listpair.append(hlDice); - alreadySeenDice << die->getUuid(); - } - if(!listpair.isEmpty()) - { - if(!diceValues.contains(face)) - { - diceValues.insert(face, listpair); - } - else - { - ListDiceResult tmp= diceValues.value(face); - tmp.append(listpair); - diceValues.insert(face, tmp); - } - } - } - } - result= result->getPrevious(); - } - if(!diceValues.isEmpty()) - { - diceValuesList.append(diceValues); - } - } -}*/ - QString DiceParser::diceCommand() const { return m_command; diff --git a/node/numbernode.cpp b/node/numbernode.cpp index 128ae07..e50656e 100644 --- a/node/numbernode.cpp +++ b/node/numbernode.cpp @@ -27,7 +27,6 @@ NumberNode::NumberNode() : m_scalarResult(new ScalarResult()) } NumberNode::~NumberNode() { - /// @todo make sure there is no copy of the internal result. /*if( nullptr != m_scalarResult) { delete m_scalarResult; |