Line data Source code
1 0 : // Distributed under the MIT License.
2 : // See LICENSE.txt for details.
3 :
4 : #pragma once
5 :
6 : #include <limits>
7 : #include <pup.h>
8 :
9 : #include "Options/Comparator.hpp"
10 : #include "Options/String.hpp"
11 : #include "ParallelAlgorithms/EventsAndTriggers/Trigger.hpp"
12 : #include "Utilities/Serialization/CharmPupable.hpp"
13 : #include "Utilities/TMPL.hpp"
14 :
15 : /// \cond
16 : namespace Tags {
17 : struct Time;
18 : } // namespace Tags
19 : /// \endcond
20 :
21 : namespace Triggers {
22 : /// \ingroup EventsAndTriggersGroup
23 : /// \ingroup TimeGroup
24 : /// Trigger based on a comparison with the time.
25 1 : class TimeCompares : public Trigger {
26 : public:
27 : /// \cond
28 : TimeCompares() = default;
29 : explicit TimeCompares(CkMigrateMessage* /*unused*/) {}
30 : using PUP::able::register_constructor;
31 : WRAPPED_PUPable_decl_template(TimeCompares); // NOLINT
32 : /// \endcond
33 :
34 0 : struct Comparison {
35 0 : using type = Options::Comparator;
36 0 : constexpr static Options::String help = "Comparison type";
37 : };
38 :
39 0 : struct Value {
40 0 : using type = double;
41 0 : constexpr static Options::String help = "Value to compare to";
42 : };
43 :
44 0 : using options = tmpl::list<Comparison, Value>;
45 0 : static constexpr Options::String help{
46 : "Trigger based on a comparison with the time."};
47 :
48 0 : explicit TimeCompares(const Options::Comparator comparator, const double time)
49 : : comparator_(comparator), time_(time) {}
50 :
51 0 : using argument_tags = tmpl::list<Tags::Time>;
52 :
53 0 : bool operator()(const double& time) const { return comparator_(time, time_); }
54 :
55 : // NOLINTNEXTLINE(google-runtime-references)
56 0 : void pup(PUP::er& p) {
57 : p | comparator_;
58 : p | time_;
59 : }
60 :
61 : private:
62 0 : Options::Comparator comparator_{};
63 0 : double time_{};
64 : };
65 : } // namespace Triggers
|