#pragma once

#include "expression.h"
#include "expptr.h"
#include "unsupportedopexception.h"
#include "debug.h"

enum BOp { PLUS, MULTIPLY };

class BinaryExpression : public Expression
	{
		ExpPtr _left;
		ExpPtr _right;
		BOp _operation;
		
	public:
        BinaryExpression(BOp operation, const ExpPtr & left, const ExpPtr & right) :Expression(false),_operation(operation), _left(left), _right(right){};
        double eval(); 
	};


	
double BinaryExpression :: eval()
	{
	double a,b;

	*dout << '(' ;
	switch (_operation)
		{
		case PLUS: {*dout << "+"; break;}
		case MULTIPLY: {*dout << "*"; break;}
		}
	*dout << "b,"; 
	a = _left->eval();
	*dout << ",";
	b = _right->eval();
	switch (_operation)
		{
		case PLUS: {_value = a + b; break;}
		case MULTIPLY: {_value = a * b; break;}
		}
	*dout << ')';
	_isEvaluated = true;

	return (_value);
	}