diff options
| author | Patrick Williams <patrick@stwcx.xyz> | 2016-10-17 14:12:12 -0500 |
|---|---|---|
| committer | Patrick Williams <patrick@stwcx.xyz> | 2016-10-20 16:35:51 -0500 |
| commit | 05aab8ba1f881e91cffc342c77811cf5bda62f28 (patch) | |
| tree | b3e7dadb76b39a0863ffc0fcfb37d7f531290c32 | |
| parent | 13f1ef7dc05e686105df0cd0af63fe2a1f54cb53 (diff) | |
| download | sdbusplus-05aab8ba1f881e91cffc342c77811cf5bda62f28.tar.gz sdbusplus-05aab8ba1f881e91cffc342c77811cf5bda62f28.zip | |
manager: add binding for sd_bus_add_object_manager
Change-Id: I9548b7fd7ce12beab10283b29a05ea31a335b03f
Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
| -rw-r--r-- | sdbusplus/bus.hpp | 2 | ||||
| -rw-r--r-- | sdbusplus/manager.hpp | 58 |
2 files changed, 60 insertions, 0 deletions
diff --git a/sdbusplus/bus.hpp b/sdbusplus/bus.hpp index 0156705..119ae52 100644 --- a/sdbusplus/bus.hpp +++ b/sdbusplus/bus.hpp @@ -10,6 +10,7 @@ namespace sdbusplus // Forward declare. namespace server { namespace interface { struct interface; } } +namespace server { namespace manager { struct manager; } } namespace bus { @@ -166,6 +167,7 @@ struct bus } friend struct server::interface::interface; + friend struct server::manager::manager; private: busp_t get() { return _bus.get(); } diff --git a/sdbusplus/manager.hpp b/sdbusplus/manager.hpp new file mode 100644 index 0000000..3513f2a --- /dev/null +++ b/sdbusplus/manager.hpp @@ -0,0 +1,58 @@ +#pragma once + +#include <sdbusplus/slot.hpp> +#include <sdbusplus/bus.hpp> + +namespace sdbusplus +{ + +namespace server +{ + +namespace manager +{ + +/** @class manager + * @brief Provide a C++ holder for a sd-bus object manager. + * + * Wraps sd_bus_add_object_manager so that an sd-bus owned object manager + * can be installed at a path and automatically removed when destructed. + */ +struct manager +{ + /* Define all of the basic class operations: + * Not allowed: + * - Default constructor to avoid nullptrs. + * - Copy operations due to internal unique_ptr. + * Allowed: + * - Move operations. + * - Destructor. + */ + manager() = delete; + manager(const manager&) = delete; + manager& operator=(const manager&) = delete; + manager(manager&&) = default; + manager& operator=(manager&&) = default; + ~manager() = default; + + /** @brief Register an object manager at a path. + * + * @param[in] bus - The bus to register on. + * @param[in] path - The path to register. + */ + manager(sdbusplus::bus::bus& bus, const char* path) : _slot(nullptr) + { + sd_bus_slot* slot = nullptr; + sd_bus_add_object_manager(bus.get(), &slot, path); + + _slot = decltype(_slot){slot}; + } + + private: + slot::slot _slot; + +}; + +} // namespace manager +} // namespace server +} // namespace sdbusplus |

