25 #ifndef CLOE_TRIGGER_SET_ACTION_HPP_ 26 #define CLOE_TRIGGER_SET_ACTION_HPP_ 40 T from_string(
const std::string& s);
43 double from_string<double>(
const std::string& s) {
48 int from_string<int>(
const std::string& s) {
53 bool from_string<bool>(
const std::string& s) {
56 }
else if (s ==
"false") {
59 throw std::out_of_range(
"cannot parse into boolean: " + s);
67 explicit SetVariableAction(
const std::string& action_name,
const std::string& data_name,
69 :
Action(action_name), data_name_(data_name), data_ptr_(data_ptr), value_(value) {}
70 ActionPtr
clone()
const override {
71 return std::make_unique<SetVariableAction>(
name(), data_name_, data_ptr_, value_);
82 std::string data_name_;
92 const std::string& data_name, T* data_ptr)
93 :
ActionFactory(action_name, action_desc), data_name_(data_name), data_ptr_(data_ptr) {}
95 auto value = c.
get<T>(data_name_);
96 return std::make_unique<SetVariableAction<T>>(
name(), data_name_, data_ptr_, value);
98 ActionPtr
make(
const std::string& s)
const override {
99 auto value = from_string<T>(s);
100 return make(
Conf{Json{
106 std::string data_name_;
143 #define DEFINE_SET_STATE_ACTION(xName, xname, xdescription, xState, xOperatorBlock) \ 144 class xName : public ::cloe::Action { \ 146 xName(const std::string& name, xState* ptr) : ::cloe::Action(name), ptr_(ptr) {} \ 147 ::cloe::ActionPtr clone() const override { return std::make_unique<xName>(name(), ptr_); } \ 148 void operator()(const ::cloe::Sync&, ::cloe::TriggerRegistrar&) override { xOperatorBlock } \ 149 void to_json(::cloe::Json&) const override {} \ 155 class _X_FACTORY(xName) : public ::cloe::ActionFactory { \ 157 using ActionType = xName; \ 159 _X_FACTORY(xName)(xState * ptr) : ::cloe::ActionFactory(xname, xdescription), ptr_(ptr) {} \ 161 ::cloe::ActionPtr make(const ::cloe::Conf&) const override { \ 162 return std::make_unique<xName>(name(), ptr_); \ 165 ::cloe::ActionPtr make(const std::string&) const override { \ 166 return std::make_unique<xName>(name(), ptr_); \ 208 #define DEFINE_SET_DATA_ACTION(xName, xActionName, xActionDesc, xDataType, xAttributeName, \ 209 xAttributeType, xOperatorBlock) \ 210 class xName : public ::cloe::Action { \ 212 xName(const std::string& action_name, xDataType* ptr, const std::string& attribute_name, \ 213 const xAttributeType attribute_value) \ 214 : ::cloe::Action(action_name) \ 216 , name_(attribute_name) \ 217 , value_(attribute_value) {} \ 218 ::cloe::ActionPtr clone() const override { \ 219 return std::make_unique<xName>(name(), ptr_, name_, value_); \ 221 void operator()(const ::cloe::Sync&, ::cloe::TriggerRegistrar&) override { xOperatorBlock } \ 222 bool is_significant() const override { return false; } \ 223 void to_json(::cloe::Json& j) const override { \ 232 xAttributeType value_; \ 235 class _X_FACTORY(xName) : public ::cloe::ActionFactory { \ 237 using ActionType = xName; \ 239 (xDataType * ptr) : ::cloe::ActionFactory(xActionName, xActionDesc), ptr_(ptr) {} \ 241 ::cloe::ActionPtr make(const ::cloe::Conf& c) const override { \ 242 auto value = c.get<xAttributeType>(xAttributeName); \ 243 return std::make_unique<xName>(name(), ptr_, xAttributeName, value); \ 246 ::cloe::ActionPtr make(const std::string& s) const override { \ 247 auto value = ::cloe::actions::from_string<xAttributeType>(s); \ 248 return make(::fable::Conf{::fable::Json{ \ 249 {xAttributeName, value}, \ 257 #endif // CLOE_TRIGGER_SET_ACTION_HPP_
Definition: set_action.hpp:88
T get() const
Definition: conf.hpp:164
Definition: trigger.hpp:442
ActionPtr clone() const override
Definition: set_action.hpp:70
void operator()(const Sync &, TriggerRegistrar &) override
Definition: set_action.hpp:73
Definition: trigger.hpp:616
Definition: coordinator.hpp:36
void to_json(Json &j) const override
Definition: set_action.hpp:75
bool is_significant() const override
Definition: set_action.hpp:74
ActionPtr make(const std::string &s) const override
Definition: set_action.hpp:98
Definition: trigger.hpp:300
std::string name() const
Definition: entity.hpp:68
ActionPtr make(const Conf &c) const override
Definition: set_action.hpp:94
Definition: set_action.hpp:65