From edc3ba1a56fce36c47128cb6e399608ffdafaf04 Mon Sep 17 00:00:00 2001 From: Renaud G Date: Sun, 27 Sep 2020 13:02:59 +0200 Subject: clean up diceparser code. Cli build is piloted from an cmake option. --- CMakeLists.txt | 12 ++--- compositevalidator.cpp | 44 ++++++++-------- diceparser.cpp | 136 +------------------------------------------------ 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 + 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 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::pairconvertAlias(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 dieListResult; - - while(nullptr != result) - { - if(result->hasResultOfType(Dice::RESULT_TYPE::DICE_LIST)) - { - DiceResult* stringResult= dynamic_cast(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& diceValuesList, -bool& homogeneous) const -{ - QSet 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(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 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; -- cgit v1.2.3-70-g09d2