Enable multiple actions per event
Reduce the number of dbus signal callbacks by enabling
multiple actions for a single event.
Change-Id: I944eea6ac450c2ea9a201e724765edbef4e677b4
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
diff --git a/generated.mako.cpp b/generated.mako.cpp
index 984f00b..fdde31c 100644
--- a/generated.mako.cpp
+++ b/generated.mako.cpp
@@ -59,16 +59,17 @@
details::make_filter(filters::${e['filter']['type']}),
% endif
% if e['action'].get('args'):
- details::make_action(actions::${e['action']['type']}(
+ std::vector<details::ActionBasePtr>({details::make_action(actions::${e['action']['type']}(
% for i, a in enumerate(e['action']['args']):
% if i + 1 == len(e['action']['args']):
- "${a['value']}"))
+ "${a['value']}"))})
% else:
"${a['value']}",
% endif
% endfor
% else:
- details::make_action(actions::${e['action']['type']})
+ std::vector<details::ActionBasePtr>(
+ {details::make_action(actions::${e['action']['type']})})
% endif
),
},
diff --git a/manager.cpp b/manager.cpp
index b7a1634..00bf833 100644
--- a/manager.cpp
+++ b/manager.cpp
@@ -145,10 +145,11 @@
void Manager::signal(sdbusplus::message::message &msg, auto &args)
{
auto &filter = *std::get<1>(args);
- auto &action = *std::get<2>(args);
+ auto &actions = std::get<2>(args);
if(filter(msg, *this)) {
- action(*this);
+ for (auto &action: actions)
+ (*action)(*this);
}
}
diff --git a/manager.hpp b/manager.hpp
index 47bd8b1..b9df746 100644
--- a/manager.hpp
+++ b/manager.hpp
@@ -97,7 +97,7 @@
using Event = std::tuple<
const char *,
details::FilterBasePtr,
- details::ActionBasePtr>;
+ std::vector<details::ActionBasePtr>>;
using SigArgs = std::vector<
std::unique_ptr<
std::tuple<