diff --git a/smocore/include/concept.h b/smocore/include/concept.h index 3cc1c5b..f97c3f7 100644 --- a/smocore/include/concept.h +++ b/smocore/include/concept.h @@ -1,11 +1,50 @@ #ifndef _CONCEPT_H #define _CONCEPT_H +#include +#include +#include #include -class Concept -: public MentalEntity +namespace smo { +namespace concepts { + +class Comparator +: public MentalEntity, public logic::Operand { +public: + /** EXPLANATION: + * The reference for a Comparator is the fixed mentity or range of mentities + * that this comparator is intended to validate a match against. + * + * There are several mentities against which a comparator can match. At the + * time of writing, we're fairly sure that these will be at minimum, + * qualia, chronomena and mentena. + */ + std::shared_ptr reference; }; +class ComparatorExpression +: public logic::UnaryExpression +{ +public: + ComparatorExpression( + logic::Operator &op, std::shared_ptr &comparator + ) + : logic::UnaryExpression(op, comparator) + {} +}; + +class CombinatorialLogicExpression +: public MentalEntity, public logic::Expression +{ +public: + +}; + +typedef CombinatorialLogicExpression Concept; + +} // namespace concept +} // namespace smo + #endif diff --git a/smocore/include/logic.h b/smocore/include/logic.h new file mode 100644 index 0000000..c52ac91 --- /dev/null +++ b/smocore/include/logic.h @@ -0,0 +1,65 @@ +#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, 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