• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdeutils API Reference
  • KDE Home
  • Contact Us
 

kcalc

  • sources
  • kde-4.14
  • kdeutils
  • kcalc
kcalc_core.h
Go to the documentation of this file.
1 /*
2 Copyright (C) 2001 - 2013 Evan Teran
3  evan.teran@gmail.com
4 
5 Copyright (C) 1996 - 2000 Bernd Johannes Wuebben
6  wuebben@kde.org
7 
8 This program is free software; you can redistribute it and/or
9 modify it under the terms of the GNU General Public License as
10 published by the Free Software Foundation; either version 2 of
11 the License, or (at your option) any later version.
12 
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17 
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>.
20 */
21 
22 #ifndef KCALC_CORE_H_
23 #define KCALC_CORE_H_
24 
25 #include <QStack>
26 #include "stats.h"
27 #include "knumber.h"
28 
29 class CalcEngine {
30 public:
31  // operations that can be stored in calculation stack
32  enum Operation {
33  FUNC_EQUAL,
34  FUNC_PERCENT,
35  FUNC_BRACKET,
36  FUNC_OR,
37  FUNC_XOR,
38  FUNC_AND,
39  FUNC_LSH,
40  FUNC_RSH,
41  FUNC_ADD,
42  FUNC_SUBTRACT,
43  FUNC_MULTIPLY,
44  FUNC_DIVIDE,
45  FUNC_MOD,
46  FUNC_INTDIV,
47  FUNC_BINOM,
48  FUNC_POWER,
49  FUNC_PWR_ROOT
50  };
51 
52  CalcEngine();
53 
54  KNumber lastOutput(bool &error) const;
55 
56  void enterOperation(const KNumber &num, Operation func);
57 
58  void ArcCosDeg(const KNumber &input);
59  void ArcCosRad(const KNumber &input);
60  void ArcCosGrad(const KNumber &input);
61  void ArcSinDeg(const KNumber &input);
62  void ArcSinRad(const KNumber &input);
63  void ArcSinGrad(const KNumber &input);
64  void ArcTangensDeg(const KNumber &input);
65  void ArcTangensRad(const KNumber &input);
66  void ArcTangensGrad(const KNumber &input);
67  void AreaCosHyp(const KNumber &input);
68  void AreaSinHyp(const KNumber &input);
69  void AreaTangensHyp(const KNumber &input);
70  void Complement(const KNumber &input);
71  void CosDeg(const KNumber &input);
72  void CosRad(const KNumber &input);
73  void CosGrad(const KNumber &input);
74  void CosHyp(const KNumber &input);
75  void Cube(const KNumber &input);
76  void CubeRoot(const KNumber &input);
77  void Exp(const KNumber &input);
78  void Exp10(const KNumber &input);
79  void Factorial(const KNumber &input);
80  void Gamma(const KNumber &input);
81  void InvertSign(const KNumber &input);
82  void Ln(const KNumber &input);
83  void Log10(const KNumber &input);
84  void ParenClose(KNumber input);
85  void ParenOpen(const KNumber &input);
86  void Reciprocal(const KNumber &input);
87  void SinDeg(const KNumber &input);
88  void SinGrad(const KNumber &input);
89  void SinRad(const KNumber &input);
90  void SinHyp(const KNumber &input);
91  void Square(const KNumber &input);
92  void SquareRoot(const KNumber &input);
93  void StatClearAll(const KNumber &input);
94  void StatCount(const KNumber &input);
95  void StatDataNew(const KNumber &input);
96  void StatDataDel(const KNumber &input);
97  void StatMean(const KNumber &input);
98  void StatMedian(const KNumber &input);
99  void StatStdDeviation(const KNumber &input);
100  void StatStdSample(const KNumber &input);
101  void StatSum(const KNumber &input);
102  void StatSumSquares(const KNumber &input);
103  void TangensDeg(const KNumber &input);
104  void TangensRad(const KNumber &input);
105  void TangensGrad(const KNumber &input);
106  void TangensHyp(const KNumber &input);
107 
108  void Reset();
109 
110 private:
111  KStats stats;
112 
113  struct Node {
114  KNumber number;
115  Operation operation;
116  };
117 
118  // Stack holds all operations and numbers that have not yet been
119  // processed, e.g. user types "2+3*", the calculation can not be
120  // executed, because "*" has a higher precedence than "+", so we
121  // need to wait for the next number.
122  //
123  // In the stack this would be stored as ((2,+),(3,*),...)
124  //
125  // "enterOperation": If the introduced Operation has lower priority
126  // than the preceding operations in the stack, then we can start to
127  // evaluate the stack (with "evalStack"). Otherwise we append the new
128  // Operation and number to the stack.
129  //
130  // E.g. "2*3+" evaluates to "6+", but "2+3*" can not be evaluated
131  // yet.
132  //
133  // We also take care of brackets, by writing a marker "FUNC_BRACKET"
134  // into the stack, each time the user opens one. When a bracket is
135  // closed, everything in the stack is evaluated until the first
136  // marker "FUNC_BRACKET" found.
137  QStack<Node> stack_;
138 
139  KNumber last_number_;
140 
141  bool percent_mode_;
142 
143  bool evalStack();
144 
145  KNumber evalOperation(const KNumber &arg1, Operation operation, const KNumber &arg2);
146 };
147 
148 
149 #endif
CalcEngine::CosGrad
void CosGrad(const KNumber &input)
Definition: kcalc_core.cpp:443
CalcEngine::Square
void Square(const KNumber &input)
Definition: kcalc_core.cpp:677
CalcEngine::Complement
void Complement(const KNumber &input)
Definition: kcalc_core.cpp:394
CalcEngine::SquareRoot
void SquareRoot(const KNumber &input)
Definition: kcalc_core.cpp:682
CalcEngine::AreaSinHyp
void AreaSinHyp(const KNumber &input)
Definition: kcalc_core.cpp:356
CalcEngine::CosDeg
void CosDeg(const KNumber &input)
Definition: kcalc_core.cpp:404
CalcEngine::enterOperation
void enterOperation(const KNumber &num, Operation func)
Definition: kcalc_core.cpp:825
CalcEngine::StatSumSquares
void StatSumSquares(const KNumber &input)
Definition: kcalc_core.cpp:750
CalcEngine::TangensDeg
void TangensDeg(const KNumber &input)
Definition: kcalc_core.cpp:758
CalcEngine::Reset
void Reset()
Definition: kcalc_core.cpp:878
CalcEngine::FUNC_INTDIV
Definition: kcalc_core.h:46
CalcEngine::Reciprocal
void Reciprocal(const KNumber &input)
Definition: kcalc_core.cpp:592
CalcEngine::TangensHyp
void TangensHyp(const KNumber &input)
Definition: kcalc_core.cpp:803
CalcEngine::CubeRoot
void CubeRoot(const KNumber &input)
Definition: kcalc_core.cpp:491
KStats
Definition: stats.h:28
CalcEngine::ParenOpen
void ParenOpen(const KNumber &input)
Definition: kcalc_core.cpp:587
CalcEngine::FUNC_SUBTRACT
Definition: kcalc_core.h:42
CalcEngine::Exp
void Exp(const KNumber &input)
Definition: kcalc_core.cpp:496
CalcEngine::SinRad
void SinRad(const KNumber &input)
Definition: kcalc_core.cpp:626
CalcEngine::StatMedian
void StatMedian(const KNumber &input)
Definition: kcalc_core.cpp:720
CalcEngine::FUNC_RSH
Definition: kcalc_core.h:40
CalcEngine::TangensRad
void TangensRad(const KNumber &input)
Definition: kcalc_core.cpp:773
CalcEngine::StatMean
void StatMean(const KNumber &input)
Definition: kcalc_core.cpp:712
CalcEngine::FUNC_DIVIDE
Definition: kcalc_core.h:44
CalcEngine::FUNC_PERCENT
Definition: kcalc_core.h:34
CalcEngine::FUNC_MULTIPLY
Definition: kcalc_core.h:43
stats.h
CalcEngine::Cube
void Cube(const KNumber &input)
Definition: kcalc_core.cpp:486
CalcEngine::SinHyp
void SinHyp(const KNumber &input)
Definition: kcalc_core.cpp:665
CalcEngine::StatStdSample
void StatStdSample(const KNumber &input)
Definition: kcalc_core.cpp:736
CalcEngine::SinDeg
void SinDeg(const KNumber &input)
Definition: kcalc_core.cpp:598
CalcEngine::ArcCosGrad
void ArcCosGrad(const KNumber &input)
Definition: kcalc_core.cpp:217
CalcEngine::ArcSinDeg
void ArcSinDeg(const KNumber &input)
Definition: kcalc_core.cpp:240
CalcEngine::ArcTangensDeg
void ArcTangensDeg(const KNumber &input)
Definition: kcalc_core.cpp:298
CalcEngine::ArcCosDeg
void ArcCosDeg(const KNumber &input)
Definition: kcalc_core.cpp:184
CalcEngine::SinGrad
void SinGrad(const KNumber &input)
Definition: kcalc_core.cpp:636
CalcEngine::FUNC_BINOM
Definition: kcalc_core.h:47
CalcEngine::FUNC_AND
Definition: kcalc_core.h:38
CalcEngine::CosHyp
void CosHyp(const KNumber &input)
Definition: kcalc_core.cpp:470
CalcEngine::FUNC_LSH
Definition: kcalc_core.h:39
CalcEngine::Operation
Operation
Definition: kcalc_core.h:32
CalcEngine::AreaTangensHyp
void AreaTangensHyp(const KNumber &input)
Definition: kcalc_core.cpp:372
CalcEngine::FUNC_XOR
Definition: kcalc_core.h:37
CalcEngine::FUNC_BRACKET
Definition: kcalc_core.h:35
CalcEngine::CosRad
void CosRad(const KNumber &input)
Definition: kcalc_core.cpp:433
CalcEngine::Log10
void Log10(const KNumber &input)
Definition: kcalc_core.cpp:561
CalcEngine::StatSum
void StatSum(const KNumber &input)
Definition: kcalc_core.cpp:744
CalcEngine::Factorial
void Factorial(const KNumber &input)
Definition: kcalc_core.cpp:519
CalcEngine::ArcSinGrad
void ArcSinGrad(const KNumber &input)
Definition: kcalc_core.cpp:274
CalcEngine::ArcSinRad
void ArcSinRad(const KNumber &input)
Definition: kcalc_core.cpp:264
CalcEngine::StatClearAll
void StatClearAll(const KNumber &input)
Definition: kcalc_core.cpp:687
KNumber
Definition: knumber.h:30
CalcEngine::AreaCosHyp
void AreaCosHyp(const KNumber &input)
Definition: kcalc_core.cpp:336
CalcEngine::FUNC_PWR_ROOT
Definition: kcalc_core.h:49
CalcEngine::TangensGrad
void TangensGrad(const KNumber &input)
Definition: kcalc_core.cpp:788
CalcEngine::lastOutput
KNumber lastOutput(bool &error) const
Definition: kcalc_core.cpp:179
CalcEngine::FUNC_EQUAL
Definition: kcalc_core.h:33
CalcEngine::FUNC_ADD
Definition: kcalc_core.h:41
CalcEngine::StatDataDel
void StatDataDel(const KNumber &input)
Definition: kcalc_core.cpp:705
CalcEngine::ParenClose
void ParenClose(KNumber input)
Definition: kcalc_core.cpp:574
CalcEngine::Gamma
void Gamma(const KNumber &input)
Definition: kcalc_core.cpp:531
CalcEngine::FUNC_OR
Definition: kcalc_core.h:36
CalcEngine::ArcCosRad
void ArcCosRad(const KNumber &input)
Definition: kcalc_core.cpp:208
CalcEngine::ArcTangensRad
void ArcTangensRad(const KNumber &input)
Definition: kcalc_core.cpp:310
CalcEngine::FUNC_POWER
Definition: kcalc_core.h:48
CalcEngine
Definition: kcalc_core.h:29
CalcEngine::InvertSign
void InvertSign(const KNumber &input)
Definition: kcalc_core.cpp:543
CalcEngine::StatStdDeviation
void StatStdDeviation(const KNumber &input)
Definition: kcalc_core.cpp:728
CalcEngine::StatDataNew
void StatDataNew(const KNumber &input)
Definition: kcalc_core.cpp:699
CalcEngine::CalcEngine
CalcEngine()
Definition: kcalc_core.cpp:173
CalcEngine::Exp10
void Exp10(const KNumber &input)
Definition: kcalc_core.cpp:507
CalcEngine::StatCount
void StatCount(const KNumber &input)
Definition: kcalc_core.cpp:693
QStack< Node >
CalcEngine::FUNC_MOD
Definition: kcalc_core.h:45
knumber.h
CalcEngine::ArcTangensGrad
void ArcTangensGrad(const KNumber &input)
Definition: kcalc_core.cpp:324
CalcEngine::Ln
void Ln(const KNumber &input)
Definition: kcalc_core.cpp:548
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:42:28 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kcalc

Skip menu "kcalc"
  • Main Page
  • Namespace List
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members

kdeutils API Reference

Skip menu "kdeutils API Reference"
  • ark
  • filelight
  • kcalc
  • kcharselect
  • kdf
  • kfloppy
  • kgpg
  • ktimer
  • kwallet
  • sweeper

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal