ladybird/Userland/Applications/Calculator/Calculator.h
creator1creeper1 8f552c9979 Calculator: Use KeypadValue class instead of double
Calculator now uses the KeypadValue class instead of double in
its internal calculations. By not constantly converting to
double back-and-forth, we do not use precision simply by, for
example, negating a number. This fixes #7484.
2021-08-03 19:12:06 +04:30

54 lines
1.1 KiB
C++

/*
* Copyright (c) 2019-2020, Sergey Bugaev <bugaevc@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include "KeypadValue.h"
// This type implements the regular calculator
// behavior, such as performing arithmetic
// operations and providing a memory cell.
// It does not deal with number input; you
// have to pass in already parsed double
// values.
class Calculator final {
public:
Calculator();
~Calculator();
enum class Operation {
None,
Add,
Subtract,
Multiply,
Divide,
Sqrt,
Inverse,
Percent,
ToggleSign,
MemClear,
MemRecall,
MemSave,
MemAdd
};
KeypadValue begin_operation(Operation, KeypadValue);
KeypadValue finish_operation(KeypadValue);
bool has_error() const { return m_has_error; }
void clear_operation();
void clear_error() { m_has_error = false; }
private:
Operation m_operation_in_progress { Operation::None };
KeypadValue m_saved_argument { (i64)0 };
KeypadValue m_mem { (i64)0 };
bool m_has_error { false };
};