Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include "Utilities/ErrorHandling/Error.hpp" 7 : 8 : /// \cond 9 : namespace Options { 10 : class Option; 11 : template <typename T> 12 : struct create_from_yaml; 13 : } // namespace Options 14 : namespace PUP { 15 : class er; 16 : } // namespace PUP 17 : /// \endcond 18 : 19 : namespace Options { 20 : /// An option-creatable mathematical comparison. 21 1 : class Comparator { 22 : public: 23 0 : enum class Comparison { 24 : EqualTo, 25 : NotEqualTo, 26 : LessThan, 27 : GreaterThan, 28 : LessThanOrEqualTo, 29 : GreaterThanOrEqualTo 30 : }; 31 : 32 0 : Comparator() = default; 33 0 : Comparator(Comparison comparison); 34 : 35 : template <typename T1, typename T2> 36 0 : bool operator()(const T1& t1, const T2& t2) const { 37 : switch (comparison_) { 38 : case Comparison::EqualTo: 39 : return t1 == t2; 40 : case Comparison::NotEqualTo: 41 : return t1 != t2; 42 : case Comparison::LessThan: 43 : return t1 < t2; 44 : case Comparison::GreaterThan: 45 : return t1 > t2; 46 : case Comparison::LessThanOrEqualTo: 47 : return t1 <= t2; 48 : case Comparison::GreaterThanOrEqualTo: 49 : return t1 >= t2; 50 : default: 51 : ERROR("Invalid comparison"); 52 : } 53 : } 54 : 55 : // NOLINTNEXTLINE(google-runtime-references) 56 0 : void pup(PUP::er& p); 57 : 58 : private: 59 0 : Comparison comparison_; 60 : }; 61 : 62 : template <> 63 0 : struct create_from_yaml<Comparator> { 64 : template <typename Metavariables> 65 0 : static Comparator create(const Option& options) { 66 : return create_impl(options); 67 : } 68 : 69 : private: 70 0 : static Comparator create_impl(const Option& options); 71 : }; 72 : } // namespace Options