diff options
author | Brad Bishop <bradleyb@fuzziesquirrel.com> | 2017-02-08 23:57:46 -0500 |
---|---|---|
committer | Brad Bishop <bradleyb@fuzziesquirrel.com> | 2017-02-09 20:37:04 -0500 |
commit | 150147aed2951ba0b5c925b2c4f023c5e01f7272 (patch) | |
tree | ee6bb4039081aa4b72dd130e379e0854920b34d0 /manager.hpp | |
parent | 07934a6447905f97a1ef9ca65c20a7bf8e71564e (diff) | |
download | phosphor-inventory-manager-150147aed2951ba0b5c925b2c4f023c5e01f7272.tar.gz phosphor-inventory-manager-150147aed2951ba0b5c925b2c4f023c5e01f7272.zip |
Use std::any
Replace holder types with std::any.
Change-Id: I0cd8c2804ad4bff79a0cfe93589e699afb095e5f
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
Diffstat (limited to 'manager.hpp')
-rw-r--r-- | manager.hpp | 25 |
1 files changed, 8 insertions, 17 deletions
diff --git a/manager.hpp b/manager.hpp index 9d83ee8..7127ec5 100644 --- a/manager.hpp +++ b/manager.hpp @@ -36,18 +36,13 @@ using ManagerIface = template <typename T> struct MakeInterface { - static std::unique_ptr<details::holder::Base> make( + static any_ns::any make( sdbusplus::bus::bus& bus, const char* path, const Interface& props) { // TODO: pass props to import constructor... - using HolderType = holder::Holder<std::unique_ptr<T>>; - return HolderType::template make_unique<HolderType>( - std::forward<std::unique_ptr<T>>( - std::make_unique<T>( - std::forward<decltype(bus)>(bus), - std::forward<decltype(path)>(path)))); + return any_ns::any(std::make_shared<T>(bus, path)); } }; } // namespace details @@ -128,8 +123,7 @@ class Manager final : decltype(auto) invokeMethod(const char* path, const char* interface, U&& member, Args&& ...args) { - auto& holder = getInterface<std::unique_ptr<T>>(path, interface); - auto& iface = *holder.get(); + auto& iface = getInterface<T>(path, interface); return (iface.*member)(std::forward<Args>(args)...); } @@ -142,8 +136,7 @@ class Manager final : using SigArg = SigArgs::value_type::element_type; private: - using HolderPtr = std::unique_ptr<details::holder::Base>; - using InterfaceComposite = std::map<std::string, HolderPtr>; + using InterfaceComposite = std::map<std::string, any_ns::any>; using ObjectReferences = std::map<std::string, InterfaceComposite>; using Events = std::vector<EventInfo>; @@ -165,9 +158,9 @@ class Manager final : * * @returns A weak reference to the holder instance. */ - details::holder::Base& getInterfaceHolder( + const any_ns::any& getInterfaceHolder( const char*, const char*) const; - details::holder::Base& getInterfaceHolder( + any_ns::any& getInterfaceHolder( const char*, const char*); /** @brief Provides weak references to interface holders. @@ -184,15 +177,13 @@ class Manager final : auto& getInterface(const char* path, const char* interface) { auto& holder = getInterfaceHolder(path, interface); - return static_cast < - details::holder::Holder<T>& >(holder); + return *any_ns::any_cast<std::shared_ptr<T> &>(holder); } template<typename T> auto& getInterface(const char* path, const char* interface) const { auto& holder = getInterfaceHolder(path, interface); - return static_cast < - const details::holder::Holder<T>& >(holder); + return *any_ns::any_cast<T>(holder); } /** @brief Provided for testing only. */ |