Переглянути джерело

refactor: use X-Macro for ConstraintVisitor

Sam Jaffe 3 місяців тому
батько
коміт
350d254dad
1 змінених файлів з 10 додано та 38 видалено
  1. 10 38
      include/jvalidate/constraint/visitor.h

+ 10 - 38
include/jvalidate/constraint/visitor.h

@@ -2,50 +2,22 @@
 
 #include <jvalidate/forward.h>
 
+#define VISITOR_PURE_VIRTUAL(TYPE) virtual Status visit(TYPE const &) const = 0;
+
 namespace jvalidate::constraint {
+/**
+ * @brief The base interface for visitors to be implemented off of.
+ * Provides a visit function for every provided concrete type of Constraint,
+ * as well as the ExtensionConstraint interface.
+ */
 struct ConstraintVisitor {
   virtual ~ConstraintVisitor() = default;
-
-  virtual Status visit(ExtensionConstraint const &) const = 0;
-
-  virtual Status visit(TypeConstraint const &) const = 0;
-  virtual Status visit(EnumConstraint const &) const = 0;
-  virtual Status visit(AllOfConstraint const &) const = 0;
-  virtual Status visit(AnyOfConstraint const &) const = 0;
-  virtual Status visit(OneOfConstraint const &) const = 0;
-  virtual Status visit(NotConstraint const &) const = 0;
-  virtual Status visit(ConditionalConstraint const &) const = 0;
-
-  virtual Status visit(MaximumConstraint const &) const = 0;
-  virtual Status visit(MinimumConstraint const &) const = 0;
-  virtual Status visit(MultipleOfConstraint const &) const = 0;
-
-  virtual Status visit(MaxLengthConstraint const &) const = 0;
-  virtual Status visit(MinLengthConstraint const &) const = 0;
-  virtual Status visit(PatternConstraint const &) const = 0;
-  virtual Status visit(FormatConstraint const &) const = 0;
-
-  virtual Status visit(AdditionalItemsConstraint const &) const = 0;
-  virtual Status visit(ContainsConstraint const &) const = 0;
-  virtual Status visit(MaxItemsConstraint const &) const = 0;
-  virtual Status visit(MinItemsConstraint const &) const = 0;
-  virtual Status visit(TupleConstraint const &) const = 0;
-  virtual Status visit(UniqueItemsConstraint const &) const = 0;
-
-  virtual Status visit(AdditionalPropertiesConstraint const &) const = 0;
-  virtual Status visit(DependenciesConstraint const &) const = 0;
-  virtual Status visit(MaxPropertiesConstraint const &) const = 0;
-  virtual Status visit(MinPropertiesConstraint const &) const = 0;
-  virtual Status visit(PatternPropertiesConstraint const &) const = 0;
-  virtual Status visit(PropertiesConstraint const &) const = 0;
-  virtual Status visit(PropertyNamesConstraint const &) const = 0;
-  virtual Status visit(RequiredConstraint const &) const = 0;
-
-  virtual Status visit(UnevaluatedItemsConstraint const &) const = 0;
-  virtual Status visit(UnevaluatedPropertiesConstraint const &) const = 0;
+  CONSTRAINT_IMPLEMENTATION_LIST(VISITOR_PURE_VIRTUAL);
 };
 
 template <typename Cons> struct ExtensionConstraintVisitor {
   virtual Status visit(Cons const &) const = 0;
 };
 }
+
+#undef VISITOR_PURE_VIRTUAL