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