File indexing completed on 2024-04-21 05:50:06

0001 /*
0002     SPDX-FileCopyrightText: 2001-2013 Evan Teran <evan.teran@gmail.com>
0003     SPDX-FileCopyrightText: 1996-2000 Bernd Johannes Wuebben <wuebben@kde.org>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #pragma once
0009 
0010 #include "kcalc_token.h"
0011 #include "knumber.h"
0012 #include "stats.h"
0013 
0014 #include <QQueue>
0015 
0016 class CalcEngine
0017 {
0018 public:
0019     CalcEngine();
0020 
0021     enum CALCULATION_RESULT { SUCCESS, EMPTY_INPUT, MATH_ERROR, SYNTAX_ERROR };
0022 
0023     int calculate(const QQueue<KCalcToken> tokenBuffer, int &errorIndex); // returs 0 on success
0024     KNumber getResult();
0025 
0026     KNumber lastOutput(bool &error) const;
0027 
0028 public:
0029     void StatClearAll();
0030     void StatCount(const KNumber &input);
0031     void StatDataNew(const KNumber &input);
0032     void StatDataDel();
0033     void StatMean(const KNumber &input);
0034     void StatMedian(const KNumber &input);
0035     void StatStdDeviation(const KNumber &input);
0036     void StatStdSample(const KNumber &input);
0037     void StatSum(const KNumber &input);
0038     void StatSumSquares(const KNumber &input);
0039 
0040 public:
0041     void Reset();
0042 
0043 private:
0044     KStats stats;
0045 
0046     QList<KCalcToken> token_stack_;
0047 
0048     const KCalcToken multiplication_Token_ = KCalcToken(KCalcToken::TokenCode::MULTIPLICATION);
0049 
0050     int reduce_Stack_(bool toParentheses = true);
0051     int insert_Binary_Function_Token_In_Stack_(const KCalcToken &token);
0052     int insert_KNumber_Token_In_Stack_(const KCalcToken &token);
0053 
0054     void printStacks_();
0055     bool error_;
0056 
0057     KNumber buffer_result_;
0058 };
0059