Removed duplicated Holder adapters
Refactor copy/pasted action/filter/interface object
adapter types into a single templated framework.
Change-Id: Iafbd814572a7db13fddc5314617e310fe5f0a062
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
diff --git a/actions.hpp b/actions.hpp
index ff08019..0966ee4 100644
--- a/actions.hpp
+++ b/actions.hpp
@@ -2,6 +2,7 @@
#include <utility>
#include <memory>
+#include "utils.hpp"
namespace phosphor
{
@@ -9,106 +10,34 @@
{
namespace manager
{
+
class Manager;
+namespace details
+{
+using ActionBase = holder::CallableBase<void, Manager&>;
+using ActionBasePtr = std::shared_ptr<ActionBase>;
+template <typename T>
+using Action = holder::CallableHolder<T, void, Manager&>;
+
+/** @brief make_action
+ *
+ * Adapt an action function object.
+ *
+ * @param[in] action - The action being adapted.
+ * @returns - The adapted action.
+ *
+ * @tparam T - The type of the action being adapted.
+ */
+template <typename T>
+auto make_action(T&& action)
+{
+ return Action<T>::template make_shared<Action<T>>(
+ std::forward<T>(action));
+}
+} // namespace details
namespace actions
{
-namespace details
-{
-namespace holder
-{
-
-/** @struct Base
- * @brief Event action functor holder base.
- *
- * Provides an un-templated holder for actionsof any type with the correct
- * function call signature.
- */
-struct Base
-{
- Base() = default;
- virtual ~Base() = default;
- Base(const Base&) = delete;
- Base& operator=(const Base&) = delete;
- Base(Base&&) = default;
- Base& operator=(Base&&) = default;
-
- virtual void operator()(Manager &mgr) const = 0;
- virtual void operator()(Manager &mgr)
- {
- const_cast<const Base &>(*this)(mgr);
- }
-};
-
-/** @struct Holder
- * @brief Event action functor holder.
- *
- * Adapts a functor of any type (with the correct function call
- * signature) to a non-templated type usable by the manager for
- * actions.
- *
- * @tparam T - The functor type.
- */
-template <typename T>
-struct Holder final : public Base
-{
- Holder() = delete;
- ~Holder() = default;
- Holder(const Holder&) = delete;
- Holder & operator=(const Holder&) = delete;
- Holder(Holder&&) = default;
- Holder& operator=(Holder&&) = default;
- explicit Holder(T &&func) : _func(std::forward<T>(func)) {}
-
- virtual void operator()(Manager &mgr) const override
- {
- _func(mgr);
- }
-
- virtual void operator()(Manager &mgr) override
- {
- _func(mgr);
- }
-
- private:
- T _func;
-};
-
-} // namespace holder
-
-/** @struct Wrapper
- * @brief Provides implicit type conversion from action functors.
- *
- * Converts action functors to ptr-to-holder.
- */
-struct Wrapper
-{
- template <typename T>
- Wrapper(T &&func) :
- _ptr(static_cast<std::shared_ptr<holder::Base>>(
- std::make_shared<holder::Holder<T>>(
- std::forward<T>(func)))) { }
-
- ~Wrapper() = default;
- Wrapper(const Wrapper&) = default;
- Wrapper& operator=(const Wrapper&) = delete;
- Wrapper(Wrapper&&) = default;
- Wrapper& operator=(Wrapper&&) = default;
-
- void operator()(Manager &mgr)
- {
- (*_ptr)(mgr);
- }
- void operator()(Manager &mgr) const
- {
- (*_ptr)(mgr);
- }
-
- private:
- std::shared_ptr<holder::Base> _ptr;
-};
-
-} // namespace details
/** @brief The default action. */
inline void noop(Manager &mgr) noexcept { }