1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
/***************************************************************************
* Copyright (C) 2014 by Renaud Guezennec *
* http://www.rolisteam.org/contact *
* *
* This file is part of DiceParser *
* *
* DiceParser is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#ifndef SCALAROPERATORNODE_H
#define SCALAROPERATORNODE_H
#include <QMap>
#include <QChar>
#include "executionnode.h"
#include "result/scalarresult.h"
#include "die.h"
/**
* @brief The ScalarOperatorNode class
*/
class ScalarOperatorNode : public ExecutionNode
{
public:
/**
* @brief The ArithmeticOperator enum
*/
//enum ArithmeticOperator {PLUS,MINUS,DIVIDE,MULTIPLICATION};
/**
* @brief ScalarOperatorNode
*/
ScalarOperatorNode();
/**
* @brief ~ScalarOperatorNode
*/
virtual ~ScalarOperatorNode();
/**
* @brief run
*/
virtual void run(ExecutionNode*);
/**
* @brief setInternalNode
* @param node
*/
void setInternalNode(ExecutionNode* node);
/**
* @brief toString
* @param wl
* @return
*/
virtual QString toString(bool wl)const;
/**
* @brief getPriority
* @return
*/
virtual qint64 getPriority() const;
/**
* @brief generateDotTree
* @param s
*/
void generateDotTree(QString& s);
/**
* @brief getErrorList
* @return
*/
virtual QMap<ExecutionNode::DICE_ERROR_CODE,QString> getExecutionErrorMap();
/**
* @brief getArithmeticOperator
* @return
*/
Die::ArithmeticOperator getArithmeticOperator() const;
/**
* @brief setArithmeticOperator
* @param arithmeticOperator
*/
void setArithmeticOperator(const Die::ArithmeticOperator &arithmeticOperator);
/**
* @brief getCopy
* @return
*/
virtual ExecutionNode *getCopy() const;
private:
/**
* @brief add
* @return
*/
static qint64 add(qint64,qint64);
/**
* @brief substract
* @return
*/
static qint64 substract(qint64,qint64);
/**
* @brief divide not static because of error management
* @return
*/
qreal divide(qint64,qint64);
/**
* @brief multiple
* @return
*/
static qint64 multiple(qint64,qint64);
/**
* @brief power
* @return
*/
static qint64 power(qint64,qint64);
private:
ExecutionNode* m_internalNode;
ScalarResult* m_scalarResult;
Die::ArithmeticOperator m_arithmeticOperator;
};
#endif // SCALAROPERATORNODE_H
|