aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorRenaud G <renaud@rolisteam.org>2020-09-27 13:02:59 +0200
committerRenaud G <renaud@rolisteam.org>2020-09-27 13:04:58 +0200
commitedc3ba1a56fce36c47128cb6e399608ffdafaf04 (patch)
treed97369ac3f3676c35405b6d4cfe5678aa6015a0b
parentf21d85618079a21f9c30d5397e16a7f837819457 (diff)
downloadOneRoll-edc3ba1a56fce36c47128cb6e399608ffdafaf04.tar.gz
OneRoll-edc3ba1a56fce36c47128cb6e399608ffdafaf04.zip
clean up diceparser code.
Cli build is piloted from an cmake option.
-rw-r--r--CMakeLists.txt12
-rw-r--r--compositevalidator.cpp44
-rw-r--r--diceparser.cpp136
-rw-r--r--node/numbernode.cpp1
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;