66 lines
917 B
C++
66 lines
917 B
C++
#ifndef _LOGIC_H
|
|
#define _LOGIC_H
|
|
|
|
#include <memory>
|
|
#include <vector>
|
|
|
|
namespace smo {
|
|
namespace logic {
|
|
|
|
class ExpressionPart
|
|
{
|
|
};
|
|
|
|
class Operator
|
|
: public ExpressionPart
|
|
{
|
|
};
|
|
|
|
class OperatorAnd
|
|
: public Operator
|
|
{
|
|
};
|
|
|
|
class OperatorOr
|
|
: public Operator
|
|
{
|
|
};
|
|
|
|
class OperatorNot
|
|
: public Operator
|
|
{
|
|
};
|
|
|
|
class Operand
|
|
: public ExpressionPart
|
|
{
|
|
};
|
|
|
|
class UnaryExpression
|
|
: public ExpressionPart
|
|
{
|
|
public:
|
|
UnaryExpression(Operator &op, const std::shared_ptr<Operand> &operand)
|
|
: parts(std::make_pair(op, operand))
|
|
{}
|
|
public:
|
|
std::pair<Operator, std::shared_ptr<Operand>> parts;
|
|
};
|
|
|
|
// Expressions can be chained as parts of a larger expression
|
|
class Expression
|
|
: public ExpressionPart
|
|
{
|
|
public:
|
|
// This will eventually take in some data to be evaluated for a match.
|
|
virtual bool evaluate(void) = 0;
|
|
|
|
public:
|
|
std::vector<std::shared_ptr<ExpressionPart>> parts;
|
|
};
|
|
|
|
} // namespace logic
|
|
} // namespace smo
|
|
|
|
#endif
|