summaryrefslogtreecommitdiffstats
path: root/manager.hpp
diff options
context:
space:
mode:
authorBrad Bishop <bradleyb@fuzziesquirrel.com>2017-02-08 23:57:46 -0500
committerBrad Bishop <bradleyb@fuzziesquirrel.com>2017-02-09 20:37:04 -0500
commit150147aed2951ba0b5c925b2c4f023c5e01f7272 (patch)
treeee6bb4039081aa4b72dd130e379e0854920b34d0 /manager.hpp
parent07934a6447905f97a1ef9ca65c20a7bf8e71564e (diff)
downloadphosphor-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.hpp25
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. */
OpenPOWER on IntegriCloud