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<