-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathequation.hpp
36 lines (34 loc) · 1.06 KB
/
equation.hpp
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
// Class descriptor for Equation
// William Immendorf - 2016
#pragma once
#include <deque>
#include <iostream>
#include <queue>
#include <stack>
#include <string>
namespace EquParser
{
class Equation
{
private:
std::string infix_equation = "";
std::queue<std::string> rpn_equation;
void convert_to_rpn();
protected:
// Rules for handling characters in raw infix equation
enum LastAdded { Queue, Stack, None };
virtual bool handle_input(const char c, std::deque<std::string> & output_queue, std::stack<char> & operator_stack, LastAdded last_added) const;
virtual bool handle_term(const std::string term, std::stack<double> & result_stack) const;
public:
Equation(); // default, blank constructor
Equation(const std::string & equation);
virtual ~Equation();
double evaluate() const;
std::string infix() const;
void infix(const std::string & equation);
void infix(const char * equation);
std::queue<std::string> rpn() const;
std::string rpn_tostring() const;
friend std::ostream & operator<<(std::ostream & os, const Equation & equation);
};
}