Chrysalis - Pattern
Loading...
Searching...
No Matches
ComparisonArgument.h
Go to the documentation of this file.
1#ifndef CHRYSALIS_COMPARISONARGUMENT_H
2#define CHRYSALIS_COMPARISONARGUMENT_H
3
4#define COMPARISONS (Equal)(NotEqual)(Greater)(GreaterEqual)(Less)(LessEqual)
5
7
11namespace Chrysalis {
14 protected:
15 explicit ComparisonArgument(args::number&& value1, args::number&& value2);
16 public:
17 #define FORWARD_DECLARE(r, data, Name) class Name;
18 BOOST_PP_SEQ_FOR_EACH(FORWARD_DECLARE, _, COMPARISONS)
19 #undef FORWARD_DECLARE
20 protected:
21 std::expected<bool, Error> calculate() const override;
22 virtual bool evaluate(double a, double b) const = 0;
23
26 };
27 namespace args {
29 }
30
31 #define DECLARE_COMPARISON(r, data, Name) \
32 class ComparisonArgument::Name: public ComparisonArgument { \
33 PROVIDE_SERIALIZATION_ACCESS(ComparisonArgument::Name) \
34 public: \
35 explicit Name(args::number&& value1, args::number&& value2) \
36 : ComparisonArgument(std::move(value1), std::move(value2)) {} \
37 protected: \
38 bool evaluate(double a, double b) const override; \
39 }; \
40 SERIALIZE_DERIVED_CONSTRUCTION(ComparisonArgument::Name, ComparisonArgument, value1_, value2_);
41 BOOST_PP_SEQ_FOR_EACH(DECLARE_COMPARISON, _, COMPARISONS)
42 #undef DECLARE_COMPARISON
43}
45
46#endif //CHRYSALIS_COMPARISONARGUMENT_H
#define FORWARD_DECLARE(r, data, Name)
Definition BinaryFunctionArgument.h:17
#define COMPARISONS
Definition ComparisonArgument.h:4
#define DECLARE_COMPARISON(r, data, Name)
Definition ComparisonArgument.h:31
Definition ComparisonArgument.h:12
args::number value1_
Definition ComparisonArgument.h:24
std::expected< bool, Error > calculate() const override
Definition ComparisonArgument.cpp:8
virtual bool evaluate(double a, double b) const =0
args::number value2_
Definition ComparisonArgument.h:25
ComparisonArgument(args::number &&value1, args::number &&value2)
Definition ComparisonArgument.cpp:5
Definition Argument.h:26
ComparisonArgument compare
Definition ComparisonArgument.h:28
std::unique_ptr< BaseArgument< double > > number
Definition BaseArgument.h:25
Definition Argument.h:9
#define SERIALIZE_DERIVED_FROM(Base,...)
Definition serialization.h:71