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 return CallbackResult::Ok;
76 void to_json(Json& j)
const override {
83 std::string data_name_;
93 const std::string& data_name, T* data_ptr)
94 :
ActionFactory(action_name, action_desc), data_name_(data_name), data_ptr_(data_ptr) {}
96 auto value = c.
get<T>(data_name_);
97 return std::make_unique<SetVariableAction<T>>(
name(), data_name_, data_ptr_, value);
99 ActionPtr
make(
const std::string& s)
const override {
100 auto value = from_string<T>(s);
107 std::string data_name_;
144 #define DEFINE_SET_STATE_ACTION(xName, xname, xdescription, xState, xOperatorBlock) \
145 class xName : public ::cloe::Action { \
147 xName(const std::string& name, xState* ptr) : ::cloe::Action(name), ptr_(ptr) {} \
148 ::cloe::ActionPtr clone() const override { return std::make_unique<xName>(name(), ptr_); } \
149 ::cloe::CallbackResult operator()(const ::cloe::Sync&, ::cloe::TriggerRegistrar&) override { \
151 return ::cloe::CallbackResult::Ok; \
153 void to_json(::cloe::Json&) const override {} \
159 class _X_FACTORY(xName) : public ::cloe::ActionFactory { \
161 using ActionType = xName; \
163 _X_FACTORY(xName)(xState * ptr) : ::cloe::ActionFactory(xname, xdescription), ptr_(ptr) {} \
165 ::cloe::ActionPtr make(const ::cloe::Conf&) const override { \
166 return std::make_unique<xName>(name(), ptr_); \
169 ::cloe::ActionPtr make(const std::string&) const override { \
170 return std::make_unique<xName>(name(), ptr_); \
212 #define DEFINE_SET_DATA_ACTION(xName, xActionName, xActionDesc, xDataType, xAttributeName, \
213 xAttributeType, xOperatorBlock) \
214 class xName : public ::cloe::Action { \
216 xName(const std::string& action_name, xDataType* ptr, const std::string& attribute_name, \
217 const xAttributeType attribute_value) \
218 : ::cloe::Action(action_name) \
220 , name_(attribute_name) \
221 , value_(attribute_value) {} \
222 ::cloe::ActionPtr clone() const override { \
223 return std::make_unique<xName>(name(), ptr_, name_, value_); \
225 ::cloe::CallbackResult operator()(const ::cloe::Sync&, ::cloe::TriggerRegistrar&) override { \
227 return ::cloe::CallbackResult::Ok; \
229 bool is_significant() const override { return false; } \
230 void to_json(::cloe::Json& j) const override { \
239 xAttributeType value_; \
242 class _X_FACTORY(xName) : public ::cloe::ActionFactory { \
244 using ActionType = xName; \
246 (xDataType * ptr) : ::cloe::ActionFactory(xActionName, xActionDesc), ptr_(ptr) {} \
248 ::cloe::ActionPtr make(const ::cloe::Conf& c) const override { \
249 auto value = c.get<xAttributeType>(xAttributeName); \
250 return std::make_unique<xName>(name(), ptr_, xAttributeName, value); \
253 ::cloe::ActionPtr make(const std::string& s) const override { \
254 auto value = ::cloe::actions::from_string<xAttributeType>(s); \
255 return make(::fable::Conf{::fable::Json{ \
256 {xAttributeName, value}, \
Definition: trigger.hpp:619
const std::string & name() const
Definition: entity.hpp:67
Definition: trigger.hpp:290
Definition: trigger.hpp:437
Definition: set_action.hpp:89
ActionPtr make(const std::string &s) const override
Definition: set_action.hpp:99
ActionPtr make(const Conf &c) const override
Definition: set_action.hpp:95
Definition: set_action.hpp:63
ActionPtr clone() const override
Definition: set_action.hpp:68
bool is_significant() const override
Definition: set_action.hpp:75
CallbackResult operator()(const Sync &, TriggerRegistrar &) override
Definition: set_action.hpp:71
T get() const
Definition: conf.hpp:166
CallbackResult
Definition: trigger.hpp:514