1//============================================================================
2//
3// SSSS tt lll lll
4// SS SS tt ll ll
5// SS tttttt eeee ll ll aaaa
6// SSSS tt ee ee ll ll aa
7// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
8// SS SS tt ee ll ll aa aa
9// SSSS ttt eeeee llll llll aaaaa
10//
11// Copyright (c) 1995-2019 by Bradford W. Mott, Stephen Anthony
12// and the Stella Team
13//
14// See the file "License.txt" for information on usage and redistribution of
15// this file, and for a DISCLAIMER OF ALL WARRANTIES.
16//============================================================================
17
18#ifndef EXPRESSION_HXX
19#define EXPRESSION_HXX
20
21#include "bspf.hxx"
22
23/**
24 This class provides an implementation of an expression node, which
25 is a construct that is given two other expressions and evaluates and
26 returns the result. When placed in a tree, a collection of such nodes
27 can represent complex expression statements.
28
29 @author Stephen Anthony
30*/
31class Expression
32{
33 public:
34 Expression(Expression* lhs = nullptr, Expression* rhs = nullptr)
35 : myLHS(lhs), myRHS(rhs) { }
36 virtual ~Expression() = default;
37
38 virtual Int32 evaluate() const { return 0; }
39
40 protected:
41 unique_ptr<Expression> myLHS, myRHS;
42
43 private:
44 // Following constructors and assignment operators not supported
45 Expression(const Expression&) = delete;
46 Expression(Expression&&) = delete;
47 Expression& operator=(const Expression&) = delete;
48 Expression& operator=(Expression&&) = delete;
49};
50
51static const Expression EmptyExpression;
52
53#endif
54