38 T from_string(
const std::string& s);
41 double from_string<double>(
const std::string& s) {
46 int from_string<int>(
const std::string& s) {
51 bool from_string<bool>(
const std::string& s) {
54 }
else if (s ==
"false") {
57 throw std::out_of_range(
"cannot parse into boolean: " + s);
65 explicit SetVariableAction(
const std::string& action_name,
const std::string& data_name,
67 :
Action(action_name), data_name_(data_name), data_ptr_(data_ptr), value_(value) {}
68 ActionPtr
clone()
const override {
69 return std::make_unique<SetVariableAction>(
name(), data_name_, data_ptr_, value_);
73 void to_json(Json& j)
const override {
80 std::string data_name_;
90 const std::string& data_name, T* data_ptr)
91 :
ActionFactory(action_name, action_desc), data_name_(data_name), data_ptr_(data_ptr) {}
93 auto value = c.
get<T>(data_name_);
94 return std::make_unique<SetVariableAction<T>>(
name(), data_name_, data_ptr_, value);
96 ActionPtr
make(
const std::string& s)
const override {
97 auto value = from_string<T>(s);
104 std::string data_name_;
141 #define DEFINE_SET_STATE_ACTION(xName, xname, xdescription, xState, xOperatorBlock) \
142 class xName : public ::cloe::Action { \
144 xName(const std::string& name, xState* ptr) : ::cloe::Action(name), ptr_(ptr) {} \
145 ::cloe::ActionPtr clone() const override { return std::make_unique<xName>(name(), ptr_); } \
146 void operator()(const ::cloe::Sync&, ::cloe::TriggerRegistrar&) override { xOperatorBlock } \
147 void to_json(::cloe::Json&) const override {} \
153 class _X_FACTORY(xName) : public ::cloe::ActionFactory { \
155 using ActionType = xName; \
157 _X_FACTORY(xName)(xState * ptr) : ::cloe::ActionFactory(xname, xdescription), ptr_(ptr) {} \
159 ::cloe::ActionPtr make(const ::cloe::Conf&) const override { \
160 return std::make_unique<xName>(name(), ptr_); \
163 ::cloe::ActionPtr make(const std::string&) const override { \
164 return std::make_unique<xName>(name(), ptr_); \
206 #define DEFINE_SET_DATA_ACTION(xName, xActionName, xActionDesc, xDataType, xAttributeName, \
207 xAttributeType, xOperatorBlock) \
208 class xName : public ::cloe::Action { \
210 xName(const std::string& action_name, xDataType* ptr, const std::string& attribute_name, \
211 const xAttributeType attribute_value) \
212 : ::cloe::Action(action_name) \
214 , name_(attribute_name) \
215 , value_(attribute_value) {} \
216 ::cloe::ActionPtr clone() const override { \
217 return std::make_unique<xName>(name(), ptr_, name_, value_); \
219 void operator()(const ::cloe::Sync&, ::cloe::TriggerRegistrar&) override { xOperatorBlock } \
220 bool is_significant() const override { return false; } \
221 void to_json(::cloe::Json& j) const override { \
230 xAttributeType value_; \
233 class _X_FACTORY(xName) : public ::cloe::ActionFactory { \
235 using ActionType = xName; \
237 (xDataType * ptr) : ::cloe::ActionFactory(xActionName, xActionDesc), ptr_(ptr) {} \
239 ::cloe::ActionPtr make(const ::cloe::Conf& c) const override { \
240 auto value = c.get<xAttributeType>(xAttributeName); \
241 return std::make_unique<xName>(name(), ptr_, xAttributeName, value); \
244 ::cloe::ActionPtr make(const std::string& s) const override { \
245 auto value = ::cloe::actions::from_string<xAttributeType>(s); \
246 return make(::fable::Conf{::fable::Json{ \
247 {xAttributeName, value}, \
Definition: trigger.hpp:607
const std::string & name() const
Definition: entity.hpp:67
Definition: trigger.hpp:290
Definition: trigger.hpp:433
Definition: set_action.hpp:86
ActionPtr make(const std::string &s) const override
Definition: set_action.hpp:96
ActionPtr make(const Conf &c) const override
Definition: set_action.hpp:92
Definition: set_action.hpp:63
ActionPtr clone() const override
Definition: set_action.hpp:68
void operator()(const Sync &, TriggerRegistrar &) override
Definition: set_action.hpp:71
bool is_significant() const override
Definition: set_action.hpp:72
T get() const
Definition: conf.hpp:298