// No copyright #pragma once #include #include #include #include "iface/subsys/dealer.hh" namespace nf7::core { template class Maker : public subsys::Maker { public: explicit Maker(const char* name, subsys::Maker* super = nullptr) noexcept : subsys::Maker(name) { if (nullptr != super) { fwd_.emplace(*super, *this); } } Maker(const char* name, subsys::Maker& super) noexcept : subsys::Maker(name), fwd_(std::in_place, super, *this) { } public: using subsys::Maker::Notify; private: std::optional::Forwarder> fwd_; }; template class Taker : public subsys::Taker, public Observer::Target { public: using subsys::Taker::Taker; void Take(T&& v) noexcept override { Observer::Target::Notify(std::move(v)); } }; template class NullMaker final : public subsys::Maker { public: static inline const auto kInstance = std::make_shared>(); public: NullMaker() noexcept : subsys::Maker("nf7::core::NullMaker") { } private: using subsys::Maker::Notify; }; template class NullTaker final : public subsys::Taker { public: static inline const auto kInstance = std::make_shared>(); public: NullTaker() noexcept : subsys::Taker("nf7::core::NullTaker") { } void Take(T&&) noexcept override { } }; } // namespace nf7::core