summaryrefslogtreecommitdiff
path: root/Applications/Calculator/Calculator.h
blob: d65bab7ba8478ad75814f00f5321c1e73262bbed (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#pragma once

// 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
    };

    double begin_operation(Operation, double);
    double finish_operation(double);

    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 };
    double m_saved_argument { 0.0 };
    double m_mem { 0.0 };
    bool m_has_error { false };
};