#ifndef _LOGIC_H #define _LOGIC_H #include #include 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) : parts(std::make_pair(op, operand)) {} public: std::pair> 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> parts; }; } // namespace logic } // namespace smo #endif