mirror of
https://github.com/RGBCube/serenity
synced 2025-07-28 08:07:44 +00:00
Calculator: Support chaining and repeating operations
The calculator now supports chaining (hitting "1+2+3=" shows "6" instead of "5") and repeating ("2+2===" shows "8") operations. :^)
This commit is contained in:
parent
ef9fd6c286
commit
21cc8f65f5
5 changed files with 126 additions and 72 deletions
|
@ -7,6 +7,7 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include <AK/Optional.h>
|
||||
#include <LibCrypto/BigFraction/BigFraction.h>
|
||||
|
||||
// This type implements the regular calculator
|
||||
|
@ -36,11 +37,13 @@ public:
|
|||
MemClear,
|
||||
MemRecall,
|
||||
MemSave,
|
||||
MemAdd
|
||||
MemAdd,
|
||||
|
||||
Equals
|
||||
};
|
||||
|
||||
Crypto::BigFraction begin_operation(Operation, Crypto::BigFraction);
|
||||
Crypto::BigFraction finish_operation(Crypto::BigFraction);
|
||||
Optional<Crypto::BigFraction> operation_with_literal_argument(Operation, Crypto::BigFraction);
|
||||
Optional<Crypto::BigFraction> operation_without_argument(Operation);
|
||||
|
||||
bool has_error() const { return m_has_error; }
|
||||
|
||||
|
@ -48,8 +51,16 @@ public:
|
|||
void clear_error() { m_has_error = false; }
|
||||
|
||||
private:
|
||||
Operation m_operation_in_progress { Operation::None };
|
||||
Crypto::BigFraction m_saved_argument {};
|
||||
Crypto::BigFraction m_mem {};
|
||||
|
||||
Crypto::BigFraction m_current_value {};
|
||||
|
||||
Operation m_binary_operation_in_progress { Operation::None };
|
||||
Crypto::BigFraction m_binary_operation_saved_left_side {};
|
||||
|
||||
Operation m_previous_operation { Operation::None };
|
||||
Crypto::BigFraction m_previous_binary_operation_right_side {};
|
||||
bool m_has_error { false };
|
||||
|
||||
Crypto::BigFraction finish_binary_operation(Crypto::BigFraction const& left_side, Operation operation, Crypto::BigFraction const& right_side);
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue