diff Framework/Messages/IObservable.h @ 403:99e31898910e

IObservable.cpp
author Sebastien Jodogne <s.jodogne@gmail.com>
date Sun, 11 Nov 2018 12:13:31 +0100
parents e7a494bdd956
children 751fb354149e b70e9be013e4
line wrap: on
line diff
--- a/Framework/Messages/IObservable.h	Sat Nov 10 12:34:45 2018 +0100
+++ b/Framework/Messages/IObservable.h	Sun Nov 11 12:13:31 2018 +0100
@@ -48,60 +48,19 @@
     {
     }
 
-    virtual ~IObservable()
-    {
-      // delete all callables (this will also unregister them from the broker)
-      for (Callables::const_iterator it = callables_.begin();
-           it != callables_.end(); ++it)
-      {
-        for (std::set<ICallable*>::const_iterator
-               it2 = it->second.begin(); it2 != it->second.end(); ++it2)
-        {
-          delete *it2;
-        }
-      }
-
-      // unregister the forwarders but don't delete them (they'll be deleted by the observable they are observing as any other callable)
-      for (Forwarders::iterator it = forwarders_.begin();
-           it != forwarders_.end(); ++it)
-      {
-        IMessageForwarder* fw = *it;
-        broker_.Unregister(dynamic_cast<IObserver&>(*fw));
-      }
-    }
-
-    void RegisterObserverCallback(ICallable* callable)
-    {
-      MessageType messageType = callable->GetMessageType();
-
-      callables_[messageType].insert(callable);
-    }
-
-    void EmitMessage(const IMessage& message)
-    {
-      Callables::const_iterator found = callables_.find(message.GetType());
-
-      if (found != callables_.end())
-      {
-        for (std::set<ICallable*>::const_iterator
-               it = found->second.begin(); it != found->second.end(); ++it)
-        {
-          if (broker_.IsActive((*it)->GetObserver()))
-          {
-            (*it)->Apply(message);
-          }
-        }
-      }
-    }
-
-    void RegisterForwarder(IMessageForwarder* forwarder)
-    {
-      forwarders_.insert(forwarder);
-    }
+    virtual ~IObservable();
 
     MessageBroker& GetBroker() const
     {
       return broker_;
     }
+
+    // Takes ownsership
+    void RegisterObserverCallback(ICallable* callable);
+
+    void EmitMessage(const IMessage& message);
+
+    // Takes ownsership
+    void RegisterForwarder(IMessageForwarder* forwarder);
   };
 }