bus: Add interface for sd-event

With these interfaces user can attach a sd-event event loop object
with sdbusplus::bus::bus.

Change-Id: I09dcc54e532162ae5e53d446772ab5bddaa4a0a4
Signed-off-by: Yi Li <adamliyi@msn.com>
diff --git a/sdbusplus/bus.hpp b/sdbusplus/bus.hpp
index 5ec1ff7..25c7c49 100644
--- a/sdbusplus/bus.hpp
+++ b/sdbusplus/bus.hpp
@@ -3,6 +3,7 @@
 #include <memory>
 #include <climits>
 #include <systemd/sd-bus.h>
+#include <systemd/sd-event.h>
 #include <sdbusplus/message.hpp>
 
 namespace sdbusplus
@@ -178,6 +179,28 @@
         return std::string(unique);
     }
 
+    /** @brief Attach the bus with a sd-event event loop object.
+     *
+     *  @param[in] event - sd_event object.
+     *  @param[in] priority - priority of bus event source.
+     */
+    void attach_event(sd_event* event, int priority)
+    {
+        sd_bus_attach_event(_bus.get(), event, priority);
+    }
+
+    /** @brief Detach the bus from its sd-event event loop object */
+    void detach_event()
+    {
+        sd_bus_detach_event(_bus.get());
+    }
+
+    /** @brief Get the sd-event event loop object of the bus */
+    auto get_event()
+    {
+        return sd_bus_get_event(_bus.get());
+    }
+
     friend struct server::interface::interface;
     friend struct server::manager::manager;
     template<class... Args> friend struct server::object::object;