#ifndef SUBSCRIBER_H #define SUBSCRIBER_H #include "../../../businessLogic.h" #include #include #include #include BEGIN_NAMESPACE(BusinessLogic) BEGIN_NAMESPACE(Hash) BEGIN_NAMESPACE(Table) BEGIN_NAMESPACE(Pattern) class InterfaceSubscriber { public: virtual void successfulInsertion(const Table::Abstract *, const std::array &, std::pair, size_t) = 0; virtual void unsuccessfulInsertion(const Table::Abstract *, const std::array &) = 0; }; class Publisher { private: std::vector m_subscribers; public: virtual void signTheObject(InterfaceSubscriber *subscriber) { if (subscriber not_eq nullptr) { m_subscribers.push_back(subscriber); } } virtual void unsubscribe(InterfaceSubscriber *subscriber) { if (subscriber not_eq nullptr) { m_subscribers.erase(std::find(m_subscribers.begin(), m_subscribers.end(), subscriber)); } } protected: virtual void sendSuccessfulInsertion(const Table::Abstract *sender, const std::array &value, std::pair index, size_t numberOfCollisions) const { for (decltype(auto) currentSubscriber : m_subscribers) { currentSubscriber->successfulInsertion(sender, value, index, numberOfCollisions); } } virtual void sendUnseccessInsertion(const Table::Abstract *sender, const std::array &value) const { for (decltype(auto) currentSubscriber : m_subscribers) { currentSubscriber->unsuccessfulInsertion(sender, value); } } }; END_NAMESPACE // Pattern END_NAMESPACE // Table END_NAMESPACE // Hash END_NAMESPACE // BusinessLogic #endif // SUBSCRIBER_H