aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt37
-rw-r--r--booleancondition.cpp2
-rw-r--r--cli/CMakeLists.txt2
-rw-r--r--cli/main.cpp48
-rw-r--r--diceparser.cpp57
-rw-r--r--highlightdice.cpp2
-rw-r--r--include/diceparser.h67
-rw-r--r--include/diceparserhelper.h30
-rw-r--r--node/dicerollernode.cpp8
-rw-r--r--node/executionnode.cpp6
-rw-r--r--node/executionnode.h21
-rw-r--r--node/forloopnode.cpp2
-rw-r--r--node/ifnode.cpp2
-rw-r--r--node/jumpbackwardnode.cpp5
-rw-r--r--node/keepdiceexecnode.cpp7
-rw-r--r--node/listsetrollnode.cpp6
-rw-r--r--node/mergenode.cpp4
-rw-r--r--node/occurencecountnode.cpp1
-rw-r--r--node/paintnode.cpp2
-rw-r--r--node/rerolldicenode.cpp3
-rw-r--r--node/scalaroperatornode.cpp33
-rw-r--r--node/scalaroperatornode.h2
-rw-r--r--node/valueslistnode.cpp2
-rw-r--r--node/variablenode.cpp2
-rw-r--r--operationcondition.cpp2
-rw-r--r--result/diceresult.cpp8
-rw-r--r--result/diceresult.h2
-rw-r--r--result/result.cpp9
-rw-r--r--result/result.h16
-rw-r--r--result/scalarresult.cpp9
-rw-r--r--result/scalarresult.h2
-rw-r--r--result/stringresult.cpp15
-rw-r--r--result/stringresult.h4
-rw-r--r--tests/dice/CMakeLists.txt3
-rw-r--r--tests/dice/tst_dice.cpp4
35 files changed, 235 insertions, 190 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9a9a340..e06bdac 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.5)
-project(diceparser)
+project(diceparser VERSION 1.9.0 DESCRIPTION "Parser of dice command")
set(QT_REQUIRED_VERSION "5.12.0")
find_package(Qt5 ${QT_REQUIRED_VERSION} CONFIG REQUIRED COMPONENTS Core Test Gui Svg)
@@ -53,11 +53,42 @@ SET( dice_sources
node/valueslistnode.cpp
)
-add_library(diceparser SHARED ${dice_sources} )
-target_link_libraries(diceparser PUBLIC Qt5::Core Qt5::Gui Qt5::Svg)
+add_library(diceparser_shared SHARED ${dice_sources} )
+add_library(diceparser_static STATIC ${dice_sources} )
+
+target_include_directories(diceparser_shared PRIVATE include)
+target_include_directories(diceparser_static PRIVATE include)
+
+SET_TARGET_PROPERTIES(diceparser_static PROPERTIES OUTPUT_NAME diceparser CLEAN_DIRECT_OUTPUT 1)
+SET_TARGET_PROPERTIES(diceparser_shared PROPERTIES OUTPUT_NAME diceparser CLEAN_DIRECT_OUTPUT 1)
+
+target_link_libraries(diceparser_shared PUBLIC Qt5::Core Qt5::Gui Qt5::Svg)
+target_link_libraries(diceparser_static PUBLIC Qt5::Core Qt5::Gui Qt5::Svg)
+
+set_target_properties(diceparser_shared PROPERTIES VERSION ${PROJECT_VERSION})
+set_target_properties(diceparser_shared PROPERTIES SOVERSION 1)
+#target_link_libraries(diceparsersta PROPERTIES VERSION ${PROJECT_VERSION})
+
+set_target_properties(diceparser_shared PROPERTIES PUBLIC_HEADER "include/diceparser.h;include/highlightdice.h;include/parsingtoolbox.h;include/dicealias.h;include/diceparserhelper.h")
+#set_target_properties(diceparsersta 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)
+
+
+include(GNUInstallDirs)
+
+install(TARGETS diceparser_shared
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+
+install(TARGETS diceparser_static
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
+
+configure_file(diceparser.pc.in diceparser.pc @ONLY)
+
+install(FILES ${CMAKE_BINARY_DIR}/diceparser.pc DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/pkgconfig)
+
diff --git a/booleancondition.cpp b/booleancondition.cpp
index f62c900..c81f5ab 100644
--- a/booleancondition.cpp
+++ b/booleancondition.cpp
@@ -159,5 +159,5 @@ qint64 BooleanCondition::valueToScalar() const
m_value->run(nullptr);
auto result= m_value->getResult();
- return result->getResult(Result::SCALAR).toInt();
+ return result->getResult(Dice::RESULT_TYPE::SCALAR).toInt();
}
diff --git a/cli/CMakeLists.txt b/cli/CMakeLists.txt
index 215287d..5d79b3c 100644
--- a/cli/CMakeLists.txt
+++ b/cli/CMakeLists.txt
@@ -74,6 +74,8 @@ SET( cli_sources
set(documentation_files ../HelpMe.md ../README.md)
add_executable( dice ${cli_sources} ${dice_QM} ${documentation_files})
+target_include_directories(dice PRIVATE ../include)
+
target_link_libraries(dice diceparser ${Qt5Core_LIBRARIES} ${Qt5Gui_LIBRARIES} ${Qt5Svg_LIBRARIES})
INSTALL_TARGETS(/bin dice)
diff --git a/cli/main.cpp b/cli/main.cpp
index d6f6398..958d96f 100644
--- a/cli/main.cpp
+++ b/cli/main.cpp
@@ -35,6 +35,7 @@
#include <QCoreApplication>
#endif
+#include "dicealias.h"
#include "diceparser.h"
#include "displaytoolbox.h"
#include "highlightdice.h"
@@ -115,7 +116,7 @@ QString diceToMarkdown(QJsonArray array, bool withColor, bool allSameColor, bool
}
void displayJSon(QString scalarText, QString resultStr, QJsonArray array, bool withColor, QString cmd, QString error,
- QString warning, QString comment, bool allSameFaceCount, bool allSameColor)
+ QString warning, QString comment, bool allSameFaceCount, bool allSameColor)
{
Q_UNUSED(withColor);
QJsonDocument doc;
@@ -133,7 +134,7 @@ void displayJSon(QString scalarText, QString resultStr, QJsonArray array, bool w
out << doc.toJson() << "\n";
}
void displayMarkdown(QString scalarText, QString resultStr, QJsonArray array, bool withColor, QString cmd,
- QString error, QString warning, QString comment, bool allSameFaceCount, bool allSameColor)
+ QString error, QString warning, QString comment, bool allSameFaceCount, bool allSameColor)
{
Q_UNUSED(withColor);
QString str("```Markdown\n");
@@ -165,7 +166,7 @@ void displayMarkdown(QString scalarText, QString resultStr, QJsonArray array, bo
out << str;
}
QString displaySVG(QString scalarText, QString resultStr, QJsonArray array, bool withColor, QString cmd, QString error,
- QString warning, QString comment, bool allSameFaceCount, bool allSameColor)
+ QString warning, QString comment, bool allSameFaceCount, bool allSameColor)
{
QString str(
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" "
@@ -222,16 +223,16 @@ QString displaySVG(QString scalarText, QString resultStr, QJsonArray array, bool
#ifdef PAINTER_OP
void displayImage(QString scalarText, QString resultStr, QJsonArray array, bool withColor, QString cmd, QString error,
- QString warning, QString comment, bool allSameFaceCount, bool allSameColor)
+ QString warning, QString comment, bool allSameFaceCount, bool allSameColor)
{
- auto svg= displaySVG(
- scalarText, resultStr, array, withColor, cmd, error, warning, comment, allSameFaceCount, allSameColor);
+ auto svg= displaySVG(scalarText, resultStr, array, withColor, cmd, error, warning, comment, allSameFaceCount,
+ allSameColor);
out << DisplayToolBox::makeImage(svg.toUtf8());
}
#endif
void displayCommandResult(QString scalarText, QString resultStr, QJsonArray array, bool withColor, QString cmd,
- QString error, QString warning, QString comment, bool allSameFaceCount, bool allSameColor)
+ QString error, QString warning, QString comment, bool allSameFaceCount, bool allSameColor)
{
// TODO display warning
if(!error.isEmpty())
@@ -405,26 +406,26 @@ int startDiceParsing(QStringList& cmds, QString& treeFile, bool withColor, EXPOR
{
case TERMINAL:
displayCommandResult(scalarText, resultStr, array, withColor, cmdRework, error, warnings, comment,
- allSameFaceCount, allSameColor);
+ allSameFaceCount, allSameColor);
break;
case SVG:
out << displaySVG(scalarText, resultStr, array, withColor, cmdRework, error, warnings, comment,
- allSameFaceCount, allSameColor)
+ allSameFaceCount, allSameColor)
<< "\n";
break;
case BOT:
case MARKDOWN:
displayMarkdown(scalarText, resultStr, array, withColor, cmdRework, error, warnings, comment,
- allSameFaceCount, allSameColor);
+ allSameFaceCount, allSameColor);
break;
case JSON:
displayJSon(scalarText, resultStr, array, withColor, cmdRework, error, warnings, comment,
- allSameFaceCount, allSameColor);
+ allSameFaceCount, allSameColor);
break;
#ifdef PAINTER_OP
case IMAGE:
displayImage(scalarText, resultStr, array, withColor, cmdRework, error, warnings, comment,
- allSameFaceCount, allSameColor);
+ allSameFaceCount, allSameColor);
break;
#endif
}
@@ -466,38 +467,39 @@ int main(int argc, char* argv[])
QCommandLineParser optionParser;
QCommandLineOption color(QStringList() << "c"
<< "color-off",
- "Disable color to highlight result");
+ "Disable color to highlight result");
QCommandLineOption version(QStringList() << "v"
<< "version",
- "Show the version and quit.");
+ "Show the version and quit.");
QCommandLineOption reset(QStringList() << "reset-settings", "Erase the settings and use the default parameters");
QCommandLineOption alias(QStringList() << "a"
<< "alias",
- "path to alias json files: <aliasfile>", "aliasfile");
+ "path to alias json files: <aliasfile>", "aliasfile");
QCommandLineOption character(QStringList() << "s"
<< "charactersheet",
- "set Parameters to simulate character sheet: <sheetfile>", "sheetfile");
+ "set Parameters to simulate character sheet: <sheetfile>", "sheetfile");
QCommandLineOption markdown(QStringList() << "m"
<< "markdown",
- "The output is formatted in markdown.");
+ "The output is formatted in markdown.");
QCommandLineOption bot(QStringList() << "b"
<< "bot",
- "Discord bot.");
+ "Discord bot.");
QCommandLineOption svg(QStringList() << "g"
<< "svg",
- "The output is formatted in svg.");
+ "The output is formatted in svg.");
QCommandLineOption json(QStringList() << "j"
<< "json",
- "The output is formatted in json.");
+ "The output is formatted in json.");
QCommandLineOption dotFile(QStringList() << "d"
<< "dot-file",
- "Instead of rolling dice, generate the execution tree and write it in <dotfile>", "dotfile");
+ "Instead of rolling dice, generate the execution tree and write it in <dotfile>",
+ "dotfile");
QCommandLineOption translation(QStringList() << "t"
<< "translation",
- "path to the translation file: <translationfile>", "translationfile");
+ "path to the translation file: <translationfile>", "translationfile");
QCommandLineOption help(QStringList() << "h"
<< "help",
- "Display this help");
+ "Display this help");
optionParser.addOption(color);
optionParser.addOption(version);
diff --git a/diceparser.cpp b/diceparser.cpp
index 4ec44ef..da838f1 100644
--- a/diceparser.cpp
+++ b/diceparser.cpp
@@ -29,6 +29,7 @@
#include "node/bind.h"
#include "node/countexecutenode.h"
#include "node/dicerollernode.h"
+#include "node/executionnode.h"
#include "node/explodedicenode.h"
#include "node/filternode.h"
#include "node/groupnode.h"
@@ -180,7 +181,7 @@ bool DiceParser::parseLine(QString str, bool allowAlias)
if(!hasInstruction)
{
m_errorMap.insert(
- ExecutionNode::NOTHING_UNDERSTOOD,
+ Dice::ERROR_CODE::NOTHING_UNDERSTOOD,
QObject::tr("Nothing was understood. To roll dice: !1d6 - full documation: "
"<a "
"href=\"https://github.com/Rolisteam/DiceParser/blob/master/HelpMe.md\">https://github.com/"
@@ -190,7 +191,7 @@ bool DiceParser::parseLine(QString str, bool allowAlias)
{
auto i= m_command.size() - str.size();
m_warningMap.insert(
- ExecutionNode::UNEXPECTED_CHARACTER,
+ Dice::ERROR_CODE::UNEXPECTED_CHARACTER,
QObject::tr("Unexpected character at %1 - end of command was ignored \"%2\"").arg(i).arg(str));
}
if(!m_errorMap.isEmpty())
@@ -226,7 +227,7 @@ bool DiceParser::readExpression(QString& str, ExecutionNode*& node)
}
else
{
- m_warningMap.insert(ExecutionNode::BAD_SYNTAXE,
+ m_warningMap.insert(Dice::ERROR_CODE::BAD_SYNTAXE,
QObject::tr("Expected closing parenthesis - can't validate the inside."));
}
}
@@ -392,11 +393,11 @@ QList<qreal> DiceParser::getLastIntegerResults()
bool scalarDone= false;
while((result != nullptr) && (!scalarDone))
{
- if(result->hasResultOfType(Result::SCALAR))
+ if(result->hasResultOfType(Dice::RESULT_TYPE::SCALAR))
{
if(!alreadyVisitedNode.contains(result->getId()))
{
- resultValues << result->getResult(Result::SCALAR).toReal();
+ resultValues << result->getResult(Dice::RESULT_TYPE::SCALAR).toReal();
alreadyVisitedNode << result->getId();
}
scalarDone= true;
@@ -417,9 +418,9 @@ QStringList DiceParser::getStringResult()
bool found= false;
while((nullptr != result) && (!found))
{
- if(result->hasResultOfType(Result::STRING))
+ if(result->hasResultOfType(Dice::RESULT_TYPE::STRING))
{
- str= result->getResult(Result::STRING).toString();
+ str= result->getResult(Dice::RESULT_TYPE::STRING).toString();
found= true;
}
result= result->getPrevious();
@@ -440,7 +441,7 @@ QStringList DiceParser::getAllStringResult(bool& hasAlias)
while(nullptr != result)
{
- if(result->hasResultOfType(Result::STRING))
+ if(result->hasResultOfType(Dice::RESULT_TYPE::STRING))
{
StringResult* stringResult= dynamic_cast<StringResult*>(result);
if(nullptr != stringResult)
@@ -465,7 +466,7 @@ QStringList DiceParser::getAllDiceResult(bool& hasAlias)
while(nullptr != result)
{
- if(result->hasResultOfType(Result::DICE_LIST))
+ if(result->hasResultOfType(Dice::RESULT_TYPE::DICE_LIST))
{
DiceResult* stringResult= dynamic_cast<DiceResult*>(result);
if(nullptr != stringResult)
@@ -508,7 +509,7 @@ void DiceParser::getDiceResultFromAllInstruction(QList<ExportedDiceResult>& resu
ExportedDiceResult nodeResult;
while(nullptr != result)
{
- if(result->hasResultOfType(Result::DICE_LIST))
+ if(result->hasResultOfType(Dice::RESULT_TYPE::DICE_LIST))
{
DiceResult* diceResult= dynamic_cast<DiceResult*>(result);
QList<HighLightDice> list;
@@ -540,7 +541,7 @@ void DiceParser::getLastDiceResult(QList<ExportedDiceResult>& diceValuesList, bo
Result* result= next->getResult();
while(nullptr != result)
{
- if(result->hasResultOfType(Result::DICE_LIST))
+ if(result->hasResultOfType(Dice::RESULT_TYPE::DICE_LIST))
{
DiceResult* diceResult= dynamic_cast<DiceResult*>(result);
if(nullptr != diceResult)
@@ -604,7 +605,7 @@ bool DiceParser::hasIntegerResultNotInFirst()
bool result= false;
for(auto node : m_startNodes)
{
- result|= hasResultOfType(Result::SCALAR, node);
+ result|= hasResultOfType(Dice::RESULT_TYPE::SCALAR, node);
}
return result;
}
@@ -614,7 +615,7 @@ bool DiceParser::hasDiceResult()
bool result= false;
for(auto node : m_startNodes)
{
- result|= hasResultOfType(Result::DICE_LIST, node);
+ result|= hasResultOfType(Dice::RESULT_TYPE::DICE_LIST, node);
}
return result;
}
@@ -623,11 +624,11 @@ bool DiceParser::hasStringResult()
bool result= false;
for(auto node : m_startNodes)
{
- result|= hasResultOfType(Result::STRING, node);
+ result|= hasResultOfType(Dice::RESULT_TYPE::STRING, node);
}
return result;
}
-bool DiceParser::hasResultOfType(Result::RESULT_TYPE type, ExecutionNode* node, bool notthelast)
+bool DiceParser::hasResultOfType(Dice::RESULT_TYPE type, ExecutionNode* node, bool notthelast)
{
bool scalarDone= false;
ExecutionNode* next= getLeafNode(node);
@@ -653,7 +654,7 @@ QList<qreal> DiceParser::getSumOfDiceResult()
bool found= false;
while((nullptr != result) && (!found))
{
- if(result->hasResultOfType(Result::DICE_LIST))
+ if(result->hasResultOfType(Dice::RESULT_TYPE::DICE_LIST))
{
DiceResult* myDiceResult= dynamic_cast<DiceResult*>(result);
if(nullptr != myDiceResult)
@@ -704,7 +705,7 @@ bool DiceParser::readDice(QString& str, ExecutionNode*& node)
if(max < 1)
{
m_errorMap.insert(
- ExecutionNode::BAD_SYNTAXE,
+ Dice::ERROR_CODE::BAD_SYNTAXE,
QObject::tr("Dice with %1 face(s) does not exist. Please, put a value higher than 0").arg(max));
return false;
}
@@ -759,7 +760,7 @@ bool DiceParser::readDice(QString& str, ExecutionNode*& node)
else
{
m_errorMap.insert(
- ExecutionNode::BAD_SYNTAXE,
+ Dice::ERROR_CODE::BAD_SYNTAXE,
QObject::tr(
"List is missing after the L operator. Please, add it (e.g : 1L[sword,spear,gun,arrow])"));
}
@@ -1087,7 +1088,7 @@ bool DiceParser::readOption(QString& str, ExecutionNode* previous) //,
}
else
{
- m_errorMap.insert(ExecutionNode::BAD_SYNTAXE,
+ m_errorMap.insert(Dice::ERROR_CODE::BAD_SYNTAXE,
QObject::tr("Validator is missing after the c operator. Please, change it"));
}
}
@@ -1103,7 +1104,7 @@ bool DiceParser::readOption(QString& str, ExecutionNode* previous) //,
if(!m_parsingToolbox->isValidValidator(previous, validator))
{
m_errorMap.insert(
- ExecutionNode::BAD_SYNTAXE,
+ Dice::ERROR_CODE::BAD_SYNTAXE,
QObject::tr("Validator is missing after the %1 operator. Please, change it")
.arg(operatorName == Reroll ? "r" : "a"));
}
@@ -1123,7 +1124,7 @@ bool DiceParser::readOption(QString& str, ExecutionNode* previous) //,
}
else
{
- m_errorMap.insert(ExecutionNode::BAD_SYNTAXE,
+ m_errorMap.insert(Dice::ERROR_CODE::BAD_SYNTAXE,
QObject::tr("Validator is missing after the %1 operator. Please, change it")
.arg(operatorName == Reroll ?
QStringLiteral("r") :
@@ -1140,7 +1141,7 @@ bool DiceParser::readOption(QString& str, ExecutionNode* previous) //,
{
if(!m_parsingToolbox->isValidValidator(previous, validator))
{
- m_errorMap.insert(ExecutionNode::ENDLESS_LOOP_ERROR,
+ m_errorMap.insert(Dice::ERROR_CODE::ENDLESS_LOOP_ERROR,
QObject::tr("This condition %1 introduces an endless loop. Please, change it")
.arg(validator->toString()));
}
@@ -1152,7 +1153,7 @@ bool DiceParser::readOption(QString& str, ExecutionNode* previous) //,
}
else
{
- m_errorMap.insert(ExecutionNode::BAD_SYNTAXE,
+ m_errorMap.insert(Dice::ERROR_CODE::BAD_SYNTAXE,
QObject::tr("Validator is missing after the e operator. Please, change it"));
}
}
@@ -1345,9 +1346,9 @@ void DiceParser::setComment(const QString& comment)
m_comment= comment;
}
-QMap<ExecutionNode::DICE_ERROR_CODE, QString> DiceParser::getErrorMap()
+QMap<Dice::ERROR_CODE, QString> DiceParser::getErrorMap()
{
- QMap<ExecutionNode::DICE_ERROR_CODE, QString> map;
+ QMap<Dice::ERROR_CODE, QString> map;
for(auto start : m_startNodes)
{
@@ -1362,7 +1363,7 @@ QMap<ExecutionNode::DICE_ERROR_CODE, QString> DiceParser::getErrorMap()
}
QString DiceParser::humanReadableError()
{
- QMapIterator<ExecutionNode::DICE_ERROR_CODE, QString> i(m_errorMap);
+ QMapIterator<Dice::ERROR_CODE, QString> i(m_errorMap);
QString str("");
while(i.hasNext())
{
@@ -1372,7 +1373,7 @@ QString DiceParser::humanReadableError()
}
/// list
- QMapIterator<ExecutionNode::DICE_ERROR_CODE, QString> j(getErrorMap());
+ QMapIterator<Dice::ERROR_CODE, QString> j(getErrorMap());
while(j.hasNext())
{
j.next();
@@ -1384,7 +1385,7 @@ QString DiceParser::humanReadableError()
QString DiceParser::humanReadableWarning()
{
- QMapIterator<ExecutionNode::DICE_ERROR_CODE, QString> i(m_warningMap);
+ QMapIterator<Dice::ERROR_CODE, QString> i(m_warningMap);
QString str("");
while(i.hasNext())
{
diff --git a/highlightdice.cpp b/highlightdice.cpp
index 02941d5..c2abdb6 100644
--- a/highlightdice.cpp
+++ b/highlightdice.cpp
@@ -17,7 +17,7 @@
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
-#include "highlightdice.h"
+#include "include/highlightdice.h"
HighLightDice::HighLightDice(QList<qint64> result, bool isHighlighted, QString color, bool displayed, quint64 faces)
: m_result(result), m_hasHighlight(isHighlighted), m_color(color), m_displayed(displayed), m_faces(faces)
diff --git a/include/diceparser.h b/include/diceparser.h
index 8ecfb50..230d571 100644
--- a/include/diceparser.h
+++ b/include/diceparser.h
@@ -24,10 +24,11 @@
#include <QMap>
#include <QString>
+#include <vector>
-#include "dicealias.h"
#include "highlightdice.h"
-#include "node/executionnode.h"
+#include "diceparserhelper.h"
+//#include "node/executionnode.h"
typedef QList<HighLightDice> ListDiceResult;
typedef QMap<quint64, ListDiceResult> ExportedDiceResult;
@@ -35,6 +36,8 @@ typedef QMap<quint64, ListDiceResult> ExportedDiceResult;
class ExplodeDiceNode;
class ParsingToolBox;
class DiceRollerNode;
+class DiceAlias;
+class ExecutionNode;
/**
* @page DiceParser Dice Parser
*
@@ -123,18 +126,6 @@ public:
*
*/
void start();
-
- /**
- * @brief displayResult
- */
- QString displayResult();
- /**
- * @brief readExpression
- * @param str
- * @param node
- * @return
- */
- bool readExpression(QString& str, ExecutionNode*& node);
/**
* @brief displayDotTree - Write the execution tree into file using dot format.
* @param filepath absolute or relative path to the tree file.
@@ -204,7 +195,7 @@ public:
* @brief getErrorList
* @return
*/
- QMap<ExecutionNode::DICE_ERROR_CODE, QString> getErrorMap();
+ QMap<Dice::ERROR_CODE, QString> getErrorMap();
/**
* @brief setPathToHelp set the path to the documentation, this path must be adatped to the lang of application etc…
* @param l the path.
@@ -226,15 +217,7 @@ public:
* @return true when the command has separator, false otherwise.
*/
bool hasSeparator() const;
- /**
- * @brief readIfInstruction reads the current command to build if node with proper parameters.
- * @param str is the command string, if IF istruction is found, the str will be changed, in other case the string is
- * unmodified
- * @param trueNode is the branch's beginning to be executed if the IfNode is true.
- * @param falseNode is the branch's beginning to be executed if the IfNode is false.
- * @return true, ifNode has been found, false otherwise
- */
- bool readIfInstruction(QString& str, ExecutionNode*& trueNode, ExecutionNode*& falseNode);
+
/**
* @brief setVariableDictionary
* @param variables
@@ -243,20 +226,33 @@ public:
QString getComment() const;
void setComment(const QString& comment);
- bool readOptionFromNull(QString& str, ExecutionNode*& node);
- bool readOperatorFromNull(QString& str, ExecutionNode*& node);
-
- bool readInstructionList(QString& str);
void getDiceResultFromAllInstruction(QList<ExportedDiceResult>& resultList);
QString humanReadableWarning();
bool readValuesList(QString& str, ExecutionNode*& node);
-protected:
- bool readParameterNode(QString& str, ExecutionNode*& node);
-
private:
/**
+ * @brief readIfInstruction reads the current command to build if node with proper parameters.
+ * @param str is the command string, if IF istruction is found, the str will be changed, in other case the string is
+ * unmodified
+ * @param trueNode is the branch's beginning to be executed if the IfNode is true.
+ * @param falseNode is the branch's beginning to be executed if the IfNode is false.
+ * @return true, ifNode has been found, false otherwise
+ */
+ bool readIfInstruction(QString& str, ExecutionNode*& trueNode, ExecutionNode*& falseNode);
+ bool readInstructionList(QString& str);
+ bool readOptionFromNull(QString& str, ExecutionNode*& node);
+ bool readOperatorFromNull(QString& str, ExecutionNode*& node);
+ bool readParameterNode(QString& str, ExecutionNode*& node);
+ /**
+ * @brief readExpression
+ * @param str
+ * @param node
+ * @return
+ */
+ bool readExpression(QString& str, ExecutionNode*& node);
+ /**
* @brief readDice
* @param str
* @return
@@ -336,7 +332,8 @@ private:
* @param notthelast
* @return
*/
- bool hasResultOfType(Result::RESULT_TYPE, ExecutionNode* node, bool notthelast= false);
+ bool hasResultOfType(Dice::RESULT_TYPE, ExecutionNode* node, bool notthelast= false);
+ bool readBlocInstruction(QString& str, ExecutionNode*& resultnode);
private:
QMap<QString, DiceOperator>* m_mapDiceOp;
@@ -345,17 +342,15 @@ private:
QList<DiceAlias*>* m_aliasList;
QStringList* m_commandList;
- QMap<ExecutionNode::DICE_ERROR_CODE, QString> m_errorMap;
- QMap<ExecutionNode::DICE_ERROR_CODE, QString> m_warningMap;
+ QMap<Dice::ERROR_CODE, QString> m_errorMap;
+ QMap<Dice::ERROR_CODE, QString> m_warningMap;
ExecutionNode* m_start= nullptr;
std::vector<ExecutionNode*> m_startNodes;
- // ExecutionNode* m_current;
QString m_command;
ParsingToolBox* m_parsingToolbox;
QString m_helpPath;
bool m_currentTreeHasSeparator;
- bool readBlocInstruction(QString& str, ExecutionNode*& resultnode);
QString m_comment;
};
diff --git a/include/diceparserhelper.h b/include/diceparserhelper.h
index 4f53293..3ca4f15 100644
--- a/include/diceparserhelper.h
+++ b/include/diceparserhelper.h
@@ -1,4 +1,34 @@
#ifndef DICEPARSERHELPER_H
#define DICEPARSERHELPER_H
+namespace Dice
+{
+
+enum class ERROR_CODE : int
+{
+ NO_DICE_ERROR,
+ DIE_RESULT_EXPECTED,
+ BAD_SYNTAXE,
+ ENDLESS_LOOP_ERROR,
+ DIVIDE_BY_ZERO,
+ NOTHING_UNDERSTOOD,
+ NO_DICE_TO_ROLL,
+ TOO_MANY_DICE,
+ NO_VARIBALE,
+ INVALID_INDEX,
+ UNEXPECTED_CHARACTER,
+ NO_PREVIOUS_ERROR
+};
+
+/**
+ * @brief The RESULT_TYPE enum or combinaison
+ */
+enum class RESULT_TYPE : int
+{
+ NONE= 0,
+ SCALAR= 1,
+ STRING= 2,
+ DICE_LIST= 4
+};
+}
#endif // DICEPARSERHELPER_H
diff --git a/node/dicerollernode.cpp b/node/dicerollernode.cpp
index f57d3e3..f87908f 100644
--- a/node/dicerollernode.cpp
+++ b/node/dicerollernode.cpp
@@ -19,10 +19,10 @@ void DiceRollerNode::run(ExecutionNode* previous)
Result* result= previous->getResult();
if(nullptr != result)
{
- auto num= result->getResult(Result::SCALAR).toReal();
+ auto num= result->getResult(Dice::RESULT_TYPE::SCALAR).toReal();
if(num <= 0)
{
- m_errors.insert(NO_DICE_TO_ROLL, QObject::tr("No dice to roll"));
+ m_errors.insert(Dice::ERROR_CODE::NO_DICE_TO_ROLL, QObject::tr("No dice to roll"));
}
m_diceCount= num > 0 ? static_cast<quint64>(num) : 0;
m_result->setPrevious(result);
@@ -30,7 +30,7 @@ void DiceRollerNode::run(ExecutionNode* previous)
auto possibleValue= static_cast<quint64>(std::abs((m_max - m_min) + 1));
if(possibleValue < m_diceCount && m_unique)
{
- m_errors.insert(TOO_MANY_DICE,
+ m_errors.insert(Dice::ERROR_CODE::TOO_MANY_DICE,
QObject::tr("More unique values asked than possible values (D operator)"));
return;
}
@@ -62,7 +62,7 @@ void DiceRollerNode::run(ExecutionNode* previous)
quint64 DiceRollerNode::getFaces() const
{
- return std::abs(m_max - m_min) + 1;
+ return static_cast<quint64>(std::abs(m_max - m_min) + 1);
}
std::pair<qint64, qint64> DiceRollerNode::getRange() const
diff --git a/node/executionnode.cpp b/node/executionnode.cpp
index 5bee091..4545934 100644
--- a/node/executionnode.cpp
+++ b/node/executionnode.cpp
@@ -6,7 +6,7 @@ ExecutionNode::ExecutionNode()
: m_previousNode(nullptr)
, m_result(nullptr)
, m_nextNode(nullptr)
- , m_errors(QMap<ExecutionNode::DICE_ERROR_CODE, QString>())
+ , m_errors(QMap<Dice::ERROR_CODE, QString>())
, m_id(QString("\"%1\"").arg(QUuid::createUuid().toString()))
{
}
@@ -40,7 +40,7 @@ ExecutionNode* ExecutionNode::getNextNode()
{
return m_nextNode;
}
-QMap<ExecutionNode::DICE_ERROR_CODE, QString> ExecutionNode::getExecutionErrorMap()
+QMap<Dice::ERROR_CODE, QString> ExecutionNode::getExecutionErrorMap()
{
if(nullptr != m_nextNode)
{
@@ -97,5 +97,5 @@ qint64 ExecutionNode::getScalarResult()
{
if(m_result == nullptr)
return 0;
- return m_result->getResult(Result::SCALAR).toInt();
+ return m_result->getResult(Dice::RESULT_TYPE::SCALAR).toInt();
}
diff --git a/node/executionnode.h b/node/executionnode.h
index e8eca1f..62bc5a5 100644
--- a/node/executionnode.h
+++ b/node/executionnode.h
@@ -1,8 +1,8 @@
#ifndef EXECUTIONNODE_H
#define EXECUTIONNODE_H
+#include "diceparserhelper.h"
#include "result/result.h"
-#include <QDebug>
/**
* @brief The ExecutionNode class
@@ -10,21 +10,6 @@
class ExecutionNode
{
public:
- enum DICE_ERROR_CODE
- {
- NO_DICE_ERROR,
- DIE_RESULT_EXPECTED,
- BAD_SYNTAXE,
- ENDLESS_LOOP_ERROR,
- DIVIDE_BY_ZERO,
- NOTHING_UNDERSTOOD,
- NO_DICE_TO_ROLL,
- TOO_MANY_DICE,
- NO_VARIBALE,
- INVALID_INDEX,
- UNEXPECTED_CHARACTER,
- NO_PREVIOUS_ERROR
- };
/**
* @brief ExecutionNode
*/
@@ -72,7 +57,7 @@ public:
* @brief getErrorList
* @return
*/
- virtual QMap<ExecutionNode::DICE_ERROR_CODE, QString> getExecutionErrorMap();
+ virtual QMap<Dice::ERROR_CODE, QString> getExecutionErrorMap();
/**
* @brief generateDotTree
@@ -109,7 +94,7 @@ protected:
/**
* @brief m_errors
*/
- QMap<ExecutionNode::DICE_ERROR_CODE, QString> m_errors;
+ QMap<Dice::ERROR_CODE, QString> m_errors;
QString m_id;
};
diff --git a/node/forloopnode.cpp b/node/forloopnode.cpp
index f65a389..aba6ff4 100644
--- a/node/forloopnode.cpp
+++ b/node/forloopnode.cpp
@@ -58,7 +58,7 @@ void ForLoopNode::run(ExecutionNode* previous)
tmp= tmp->getNextNode();
}
Result* internalResult= tmp->getResult();
- auto value= internalResult->getResult(Result::SCALAR).toInt();
+ auto value= internalResult->getResult(Dice::RESULT_TYPE::SCALAR).toInt();
Die* neodie= new Die();
*neodie= *dice;
diff --git a/node/ifnode.cpp b/node/ifnode.cpp
index 5470e15..10b2f79 100644
--- a/node/ifnode.cpp
+++ b/node/ifnode.cpp
@@ -45,7 +45,7 @@ void IfNode::run(ExecutionNode* previous)
if(nullptr != m_result)
{
- qreal value= previousResult->getResult(Result::SCALAR).toReal();
+ qreal value= previousResult->getResult(Dice::RESULT_TYPE::SCALAR).toReal();
if(nullptr != m_validator)
{
diff --git a/node/jumpbackwardnode.cpp b/node/jumpbackwardnode.cpp
index 15c7063..2870854 100644
--- a/node/jumpbackwardnode.cpp
+++ b/node/jumpbackwardnode.cpp
@@ -96,7 +96,7 @@ void JumpBackwardNode::run(ExecutionNode* previous)
if(nullptr != result)
{
//--i;
- if(/*(i==0)&&*/ (result->hasResultOfType(Result::DICE_LIST)))
+ if(/*(i==0)&&*/ (result->hasResultOfType(Dice::RESULT_TYPE::DICE_LIST)))
{
found= true;
m_backwardNode= parent;
@@ -118,7 +118,8 @@ void JumpBackwardNode::run(ExecutionNode* previous)
}
if(nullptr == result)
{
- m_errors.insert(DIE_RESULT_EXPECTED,
+ m_errors.insert(
+ Dice::ERROR_CODE::DIE_RESULT_EXPECTED,
QObject::tr(" The @ operator expects dice result. Please check the documentation to fix your command."));
}
else
diff --git a/node/keepdiceexecnode.cpp b/node/keepdiceexecnode.cpp
index 42b4c40..688c27b 100644
--- a/node/keepdiceexecnode.cpp
+++ b/node/keepdiceexecnode.cpp
@@ -58,9 +58,10 @@ void KeepDiceExecNode::run(ExecutionNode* previous)
if(m_numberOfDice > static_cast<qint64>(diceList.size()))
{
- m_errors.insert(TOO_MANY_DICE, QObject::tr(" You ask to keep %1 dice but the result only has %2")
- .arg(m_numberOfDice)
- .arg(diceList.size()));
+ m_errors.insert(Dice::ERROR_CODE::TOO_MANY_DICE,
+ QObject::tr(" You ask to keep %1 dice but the result only has %2")
+ .arg(m_numberOfDice)
+ .arg(diceList.size()));
}
for(auto& tmp : diceList.mid(static_cast<int>(m_numberOfDice), -1))
diff --git a/node/listsetrollnode.cpp b/node/listsetrollnode.cpp
index ffa0f03..565a609 100644
--- a/node/listsetrollnode.cpp
+++ b/node/listsetrollnode.cpp
@@ -62,11 +62,11 @@ void ListSetRollNode::run(ExecutionNode* previous)
Result* result= previous->getResult();
if(nullptr != result)
{
- quint64 diceCount= result->getResult(Result::SCALAR).toReal();
+ quint64 diceCount= result->getResult(Dice::RESULT_TYPE::SCALAR).toReal();
if(diceCount > static_cast<quint64>(m_values.size()) && m_unique)
{
- m_errors.insert(
- TOO_MANY_DICE, QObject::tr("More unique values asked than possible values (L operator)"));
+ m_errors.insert(Dice::ERROR_CODE::TOO_MANY_DICE,
+ QObject::tr("More unique values asked than possible values (L operator)"));
}
else
{
diff --git a/node/mergenode.cpp b/node/mergenode.cpp
index 4a11a76..c4c1543 100644
--- a/node/mergenode.cpp
+++ b/node/mergenode.cpp
@@ -29,7 +29,7 @@ void MergeNode::run(ExecutionNode* previous)
{
if(nullptr == previous)
{
- m_errors.insert(ExecutionNode::NO_PREVIOUS_ERROR, QObject::tr("No previous node before Merge operator"));
+ m_errors.insert(Dice::ERROR_CODE::NO_PREVIOUS_ERROR, QObject::tr("No previous node before Merge operator"));
return;
}
@@ -69,7 +69,7 @@ void MergeNode::run(ExecutionNode* previous)
}
}
auto it= std::find_if(pastResult.begin(), pastResult.end(),
- [tmpResult](const Result* a) { return (a == tmpResult->getPrevious()); });
+ [tmpResult](const Result* a) { return (a == tmpResult->getPrevious()); });
if(it == pastResult.end())
{
pastResult.push_back(previousLast->getResult());
diff --git a/node/occurencecountnode.cpp b/node/occurencecountnode.cpp
index e0117ef..0d69d2a 100644
--- a/node/occurencecountnode.cpp
+++ b/node/occurencecountnode.cpp
@@ -20,6 +20,7 @@
#include "occurencecountnode.h"
#include "result/diceresult.h"
#include "result/stringresult.h"
+#include <QVector>
OccurenceCountNode::OccurenceCountNode() : ExecutionNode() {}
diff --git a/node/paintnode.cpp b/node/paintnode.cpp
index 02c7230..fe5a324 100644
--- a/node/paintnode.cpp
+++ b/node/paintnode.cpp
@@ -61,7 +61,7 @@ void PainterNode::run(ExecutionNode* previous)
m_previousNode= previous;
if(nullptr == previous)
{
- m_errors.insert(ExecutionNode::NO_PREVIOUS_ERROR, QObject::tr("No previous node before Paint operator"));
+ m_errors.insert(Dice::ERROR_CODE::NO_PREVIOUS_ERROR, QObject::tr("No previous node before Paint operator"));
return;
}
Result* previousResult= previous->getResult();
diff --git a/node/rerolldicenode.cpp b/node/rerolldicenode.cpp
index 56ee6d9..18e8bba 100644
--- a/node/rerolldicenode.cpp
+++ b/node/rerolldicenode.cpp
@@ -79,7 +79,8 @@ void RerollDiceNode::run(ExecutionNode* previous)
}
else
{
- m_errors.insert(ExecutionNode::DIE_RESULT_EXPECTED,
+ m_errors.insert(
+ Dice::ERROR_CODE::DIE_RESULT_EXPECTED,
QObject::tr(
" The a operator expects dice result. Please check the documentation and fix your command."));
}
diff --git a/node/scalaroperatornode.cpp b/node/scalaroperatornode.cpp
index 3a26fc7..9edbcdc 100644
--- a/node/scalaroperatornode.cpp
+++ b/node/scalaroperatornode.cpp
@@ -69,28 +69,29 @@ void ScalarOperatorNode::run(ExecutionNode* previous)
switch(m_arithmeticOperator)
{
case Die::PLUS:
- m_scalarResult->setValue(add(previousResult->getResult(Result::SCALAR).toReal(),
- internalResult->getResult(Result::SCALAR).toReal()));
+ m_scalarResult->setValue(add(previousResult->getResult(Dice::RESULT_TYPE::SCALAR).toReal(),
+ internalResult->getResult(Dice::RESULT_TYPE::SCALAR).toReal()));
break;
case Die::MINUS:
- m_scalarResult->setValue(substract(previousResult->getResult(Result::SCALAR).toReal(),
- internalResult->getResult(Result::SCALAR).toReal()));
+ m_scalarResult->setValue(substract(previousResult->getResult(Dice::RESULT_TYPE::SCALAR).toReal(),
+ internalResult->getResult(Dice::RESULT_TYPE::SCALAR).toReal()));
break;
case Die::MULTIPLICATION:
- m_scalarResult->setValue(multiple(previousResult->getResult(Result::SCALAR).toReal(),
- internalResult->getResult(Result::SCALAR).toReal()));
+ m_scalarResult->setValue(multiple(previousResult->getResult(Dice::RESULT_TYPE::SCALAR).toReal(),
+ internalResult->getResult(Dice::RESULT_TYPE::SCALAR).toReal()));
break;
case Die::DIVIDE:
- m_scalarResult->setValue(divide(previousResult->getResult(Result::SCALAR).toReal(),
- internalResult->getResult(Result::SCALAR).toReal()));
+ m_scalarResult->setValue(divide(previousResult->getResult(Dice::RESULT_TYPE::SCALAR).toReal(),
+ internalResult->getResult(Dice::RESULT_TYPE::SCALAR).toReal()));
break;
case Die::INTEGER_DIVIDE:
- m_scalarResult->setValue(static_cast<int>(divide(previousResult->getResult(Result::SCALAR).toReal(),
- internalResult->getResult(Result::SCALAR).toReal())));
+ m_scalarResult->setValue(
+ static_cast<int>(divide(previousResult->getResult(Dice::RESULT_TYPE::SCALAR).toReal(),
+ internalResult->getResult(Dice::RESULT_TYPE::SCALAR).toReal())));
break;
case Die::POW:
- m_scalarResult->setValue(pow(previousResult->getResult(Result::SCALAR).toReal(),
- internalResult->getResult(Result::SCALAR).toReal()));
+ m_scalarResult->setValue(pow(previousResult->getResult(Dice::RESULT_TYPE::SCALAR).toReal(),
+ internalResult->getResult(Dice::RESULT_TYPE::SCALAR).toReal()));
break;
}
}
@@ -128,7 +129,7 @@ qreal ScalarOperatorNode::divide(qreal a, qreal b)
{
if(qFuzzyCompare(b, 0))
{
- m_errors.insert(DIVIDE_BY_ZERO, QObject::tr("Division by zero"));
+ m_errors.insert(Dice::ERROR_CODE::DIVIDE_BY_ZERO, QObject::tr("Division by zero"));
return 0;
}
return static_cast<qreal>(a / b);
@@ -240,12 +241,12 @@ void ScalarOperatorNode::generateDotTree(QString& s)
}
s.append(str);
}
-QMap<ExecutionNode::DICE_ERROR_CODE, QString> ScalarOperatorNode::getExecutionErrorMap()
+QMap<Dice::ERROR_CODE, QString> ScalarOperatorNode::getExecutionErrorMap()
{
if(nullptr != m_internalNode)
{
auto keys= m_internalNode->getExecutionErrorMap().keys();
- for(ExecutionNode::DICE_ERROR_CODE& key : keys)
+ for(const auto& key : keys)
{
m_errors.insert(key, m_internalNode->getExecutionErrorMap().value(key));
}
@@ -253,7 +254,7 @@ QMap<ExecutionNode::DICE_ERROR_CODE, QString> ScalarOperatorNode::getExecutionEr
if(nullptr != m_nextNode)
{
auto keys= m_nextNode->getExecutionErrorMap().keys();
- for(ExecutionNode::DICE_ERROR_CODE& key : keys)
+ for(auto const& key : keys)
{
m_errors.insert(key, m_nextNode->getExecutionErrorMap().value(key));
}
diff --git a/node/scalaroperatornode.h b/node/scalaroperatornode.h
index 2ac89b0..a58a8d3 100644
--- a/node/scalaroperatornode.h
+++ b/node/scalaroperatornode.h
@@ -76,7 +76,7 @@ public:
* @brief getErrorList
* @return
*/
- virtual QMap<ExecutionNode::DICE_ERROR_CODE, QString> getExecutionErrorMap();
+ virtual QMap<Dice::ERROR_CODE, QString> getExecutionErrorMap();
/**
* @brief getArithmeticOperator
* @return
diff --git a/node/valueslistnode.cpp b/node/valueslistnode.cpp
index b31ee84..d378350 100644
--- a/node/valueslistnode.cpp
+++ b/node/valueslistnode.cpp
@@ -16,7 +16,7 @@ void ValuesListNode::run(ExecutionNode* previous)
auto result= node->getResult();
if(!result)
continue;
- auto val= result->getResult(Result::SCALAR).toInt();
+ auto val= result->getResult(Dice::RESULT_TYPE::SCALAR).toInt();
Die* die= new Die();
auto dyna= dynamic_cast<VariableNode*>(node);
if(nullptr != dyna)
diff --git a/node/variablenode.cpp b/node/variablenode.cpp
index 1d13a2c..e45214d 100644
--- a/node/variablenode.cpp
+++ b/node/variablenode.cpp
@@ -24,7 +24,7 @@ void VariableNode::run(ExecutionNode* previous)
}
else
{
- m_errors.insert(NO_VARIBALE, QObject::tr("No variable at index:%1").arg(m_index + 1));
+ m_errors.insert(Dice::ERROR_CODE::NO_VARIBALE, QObject::tr("No variable at index:%1").arg(m_index + 1));
}
}
diff --git a/operationcondition.cpp b/operationcondition.cpp
index 53a994d..67b10fc 100644
--- a/operationcondition.cpp
+++ b/operationcondition.cpp
@@ -131,5 +131,5 @@ qint64 OperationCondition::valueToScalar() const
m_value->run(nullptr);
auto result= m_value->getResult();
- return result->getResult(Result::SCALAR).toInt();
+ return result->getResult(Dice::RESULT_TYPE::SCALAR).toInt();
}
diff --git a/result/diceresult.cpp b/result/diceresult.cpp
index e66fc4f..23b925e 100644
--- a/result/diceresult.cpp
+++ b/result/diceresult.cpp
@@ -25,7 +25,7 @@
DiceResult::DiceResult() : m_operator(Die::PLUS)
{
- m_resultTypes= (DICE_LIST | SCALAR);
+ m_resultTypes= (static_cast<int>(Dice::RESULT_TYPE::DICE_LIST) | static_cast<int>(Dice::RESULT_TYPE::SCALAR));
m_homogeneous= true;
}
void DiceResult::insertResult(Die* die)
@@ -63,15 +63,15 @@ DiceResult::~DiceResult()
m_diceValues.clear();
}
}
-QVariant DiceResult::getResult(RESULT_TYPE type)
+QVariant DiceResult::getResult(Dice::RESULT_TYPE type)
{
switch(type)
{
- case SCALAR:
+ case Dice::RESULT_TYPE::SCALAR:
{
return getScalarResult();
}
- case DICE_LIST:
+ case Dice::RESULT_TYPE::DICE_LIST:
{
return QVariant();
}
diff --git a/result/diceresult.h b/result/diceresult.h
index 54e0b57..ce8ffb7 100644
--- a/result/diceresult.h
+++ b/result/diceresult.h
@@ -61,7 +61,7 @@ public:
* @brief getScalar
* @return
*/
- virtual QVariant getResult(RESULT_TYPE);
+ virtual QVariant getResult(Dice::RESULT_TYPE);
/**
* @brief toString
* @return
diff --git a/result/result.cpp b/result/result.cpp
index edd00e4..983f1f4 100644
--- a/result/result.cpp
+++ b/result/result.cpp
@@ -22,7 +22,10 @@
#include "result.h"
#include <QUuid>
-Result::Result() : m_resultTypes(NONE), m_id(QString("\"%1\"").arg(QUuid::createUuid().toString())), m_previous(nullptr)
+Result::Result()
+ : m_resultTypes(static_cast<int>(Dice::RESULT_TYPE::NONE))
+ , m_id(QString("\"%1\"").arg(QUuid::createUuid().toString()))
+ , m_previous(nullptr)
{
}
Result::~Result() {}
@@ -43,9 +46,9 @@ bool Result::isStringResult() const
return false;
}
void Result::clear() {}
-bool Result::hasResultOfType(RESULT_TYPE type) const
+bool Result::hasResultOfType(Dice::RESULT_TYPE type) const
{
- return (m_resultTypes & type);
+ return (m_resultTypes & static_cast<int>(type));
}
void Result::generateDotTree(QString& s)
{
diff --git a/result/result.h b/result/result.h
index 8f31c05..a34c74f 100644
--- a/result/result.h
+++ b/result/result.h
@@ -22,7 +22,7 @@
#ifndef RESULT_H
#define RESULT_H
-//#include <Qt>
+#include "diceparserhelper.h"
#include <QString>
#include <QVariant>
/**
@@ -32,16 +32,6 @@ class Result
{
public:
/**
- * @brief The RESULT_TYPE enum or combinaison
- */
- enum RESULT_TYPE
- {
- NONE= 0,
- SCALAR= 1,
- STRING= 2,
- DICE_LIST= 4
- };
- /**
* @brief Result
*/
Result();
@@ -54,12 +44,12 @@ public:
* @brief isScalar
* @return
*/
- virtual bool hasResultOfType(RESULT_TYPE) const;
+ virtual bool hasResultOfType(Dice::RESULT_TYPE) const;
/**
* @brief getScalar
* @return
*/
- virtual QVariant getResult(RESULT_TYPE)= 0;
+ virtual QVariant getResult(Dice::RESULT_TYPE)= 0;
/**
* @brief getPrevious
* @return
diff --git a/result/scalarresult.cpp b/result/scalarresult.cpp
index 089c4b8..ec2b5f0 100644
--- a/result/scalarresult.cpp
+++ b/result/scalarresult.cpp
@@ -21,18 +21,15 @@
***************************************************************************/
#include "scalarresult.h"
-ScalarResult::ScalarResult()
-{
- m_resultTypes= Result::SCALAR;
-}
+ScalarResult::ScalarResult() {}
void ScalarResult::setValue(qreal i)
{
m_value= i;
}
-QVariant ScalarResult::getResult(Result::RESULT_TYPE type)
+QVariant ScalarResult::getResult(Dice::RESULT_TYPE type)
{
- if(SCALAR == type)
+ if(Dice::RESULT_TYPE::SCALAR == type)
{
return m_value;
}
diff --git a/result/scalarresult.h b/result/scalarresult.h
index c20de0f..1eac73c 100644
--- a/result/scalarresult.h
+++ b/result/scalarresult.h
@@ -39,7 +39,7 @@ public:
* @brief getResult
* @return
*/
- virtual QVariant getResult(Result::RESULT_TYPE);
+ virtual QVariant getResult(Dice::RESULT_TYPE);
/**
* @brief setValue
* @param i
diff --git a/result/stringresult.cpp b/result/stringresult.cpp
index a44e24e..d5a7880 100644
--- a/result/stringresult.cpp
+++ b/result/stringresult.cpp
@@ -3,20 +3,21 @@
StringResult::StringResult()
{
m_highlight= true;
- m_resultTypes= Result::STRING;
+ m_resultTypes= static_cast<int>(Dice::RESULT_TYPE::STRING);
}
void StringResult::setText(QString text)
{
m_value= text;
}
StringResult::~StringResult() {}
-bool StringResult::hasResultOfType(RESULT_TYPE resultType) const
+bool StringResult::hasResultOfType(Dice::RESULT_TYPE resultType) const
{
- if(resultType & Result::STRING)
+
+ if(resultType == Dice::RESULT_TYPE::STRING)
{
return true;
}
- else if(resultType & Result::SCALAR)
+ else if(resultType == Dice::RESULT_TYPE::SCALAR)
{
bool ok= false;
getText().toInt(&ok);
@@ -28,13 +29,13 @@ QString StringResult::getText() const
{
return m_value;
}
-QVariant StringResult::getResult(RESULT_TYPE type)
+QVariant StringResult::getResult(Dice::RESULT_TYPE type)
{
switch(type)
{
- case STRING:
+ case Dice::RESULT_TYPE::STRING:
return getText();
- case SCALAR:
+ case Dice::RESULT_TYPE::SCALAR:
return getText().toInt();
default:
return QVariant();
diff --git a/result/stringresult.h b/result/stringresult.h
index ec6c3ce..0e469fe 100644
--- a/result/stringresult.h
+++ b/result/stringresult.h
@@ -31,7 +31,7 @@ public:
* @brief getScalar
* @return
*/
- virtual QVariant getResult(RESULT_TYPE);
+ virtual QVariant getResult(Dice::RESULT_TYPE);
/**
* @brief toString
* @return
@@ -40,7 +40,7 @@ public:
virtual void setHighLight(bool);
virtual bool hasHighLight() const;
- virtual bool hasResultOfType(RESULT_TYPE resultType) const;
+ virtual bool hasResultOfType(Dice::RESULT_TYPE resultType) const;
virtual Result* getCopy() const;
private:
diff --git a/tests/dice/CMakeLists.txt b/tests/dice/CMakeLists.txt
index 4065cc5..fef1a7b 100644
--- a/tests/dice/CMakeLists.txt
+++ b/tests/dice/CMakeLists.txt
@@ -5,5 +5,8 @@ find_package(Qt5Test REQUIRED)
set(test_source testnode.cpp tst_dice.cpp)
add_executable(test_dice ${test_source} )
+
+target_include_directories(test_dice PRIVATE ../../include)
+
target_link_libraries(test_dice diceparser Qt5::Test)
add_test(tst_diceparser test_dice)
diff --git a/tests/dice/tst_dice.cpp b/tests/dice/tst_dice.cpp
index 1fe2641..4da3474 100644
--- a/tests/dice/tst_dice.cpp
+++ b/tests/dice/tst_dice.cpp
@@ -524,7 +524,7 @@ void TestDice::keepTest()
if(error)
return;
- auto resultScore= keepN.getResult()->getResult(Result::SCALAR).toInt();
+ auto resultScore= keepN.getResult()->getResult(Dice::RESULT_TYPE::SCALAR).toInt();
QCOMPARE(score, resultScore);
}
@@ -609,7 +609,7 @@ void TestDice::countTest()
node.run(nullptr);
- QCOMPARE(score, countN.getResult()->getResult(Result::SCALAR).toInt());
+ QCOMPARE(score, countN.getResult()->getResult(Dice::RESULT_TYPE::SCALAR).toInt());
countN.setValidator(nullptr);
}