]> Creatis software - bbtk.git/blobdiff - kernel/src/bbtkBlackBoxOutputConnector.h
* Major changes on IOStatus update / propagation
[bbtk.git] / kernel / src / bbtkBlackBoxOutputConnector.h
index c97cdc55e939434096bd992897738d7629b5f249..d94b481dfcc59a4eb5f4e530cb93549a717906b4 100644 (file)
@@ -2,8 +2,8 @@
   Program:   bbtk
   Module:    $RCSfile: bbtkBlackBoxOutputConnector.h,v $
   Language:  C++
-  Date:      $Date: 2008/10/17 08:18:12 $
-  Version:   $Revision: 1.4 $
+  Date:      $Date: 2008/12/08 12:54:06 $
+  Version:   $Revision: 1.5 $
 =========================================================================*/
 
 /* ---------------------------------------------------------------------
 #define __bbtkBlackBoxOutputConnector_h__
 
 #include "bbtkConnection.h"
+#include "bbtkBlackBox.h"
 #include "bbtkMessageManager.h"
 #include <vector>
 
+// Change time management
+//#include <bbtkChangeTime.h>
+
+// Signal/slot mechanism for output change events
+//#include <boost/signal.hpp>
+//#include <boost/bind.hpp>
+
 namespace bbtk
 {
 
+  //  class BlackBox;
+  //  BBTK_FORWARD_DECLARE_POINTER(BlackBox);
 
+  //  void  operator (void*)(ChangeCallbackType t) { return (void*)t; };
+/*
+  typedef void (*ChangeSignalFunctionType)(BlackBoxOutputConnector*);
+  bool operator==(void (*sg1)(BlackBoxOutputConnector*),
+                 void (*sg2)(BlackBoxOutputConnector*)) 
+  { return sg1==sg2;}
+*/
+/*
+  bool operator==(boost::function1<void, bbtk::BlackBoxOutputConnector*, std::allocator<void> >,boost::function1<void, bbtk::BlackBoxOutputConnector*, std::allocator<void> >)
+  {
+  }
+*/
+  //boost::function<void ()(bbtk::BlackBoxOutputConnector*), std::allocator<void> >]
   class BBTK_EXPORT BlackBoxOutputConnector 
   {
   public:
-     
+    //    typedef boost::signals::trackable ChangeObserverType;
+    //    typedef boost::signal<void (bbtk::BlackBox::Pointer*,const std::string&,IOStatus)>  ChangeSignalType;
+    //    typedef ChangeSignalType::slot_function_type ChangeCallbackType;
+
+    typedef BlackBox::OutputChangeCallbackType OutputChangeCallbackType;
+
     BlackBoxOutputConnector();
     ~BlackBoxOutputConnector();
+
     void SetConnection(Connection* c);
     void UnsetConnection(Connection* c);
-    //IOStatus Update();
-    void SetModifiedStatus();
     typedef std::vector<Connection*> ConnectionVector;
     const ConnectionVector& GetConnectionVector() const { return mConnection; }
     
+    IOStatus GetStatus() const { return mStatus; }
+    void SetStatus( IOStatus s ) { mStatus = s; }
+    void SignalChange( BlackBox::Pointer box, const std::string& output );
+
+
+    //    void SetModifiedStatus();
+
+    /// Returns the ChangeTime of the output (const)
+    //  const ChangeTime& GetChangeTime() const { return mChangeTime; }
+    /// Returns the ChangeTime of the output 
+    //    ChangeTime& GetChangeTime() { return mChangeTime; }
+
+    /// To be called when the output has changed
+    /// (sets the ChangeTime to current time and 
+    ///  signals the change to observers)
+    //    void SetChangeTime(const ChangeTime&); 
+   
+    /// To be called when the output has changed
+    /// (sets the ChangeTime to current time and 
+    ///  signals the change to observers)
+    //    void SetChangeTimeToCurrentTime(); 
+
+    /// Adds the function f to the list of functions to call when 
+    /// the output changes.
+    /// f is of type ChangeCallbackType which is basically:
+    /// void (*ChangeCallbackType)(BlackBoxOutputConnector*)
+    /// To pass a member function 'f' of an instance 'c' of a class 'C' 
+    /// as callback you have to 'bind' it, i.e. call:
+    /// AddChangeObserver ( boost::bind( &C::f , c, _1 ) );
+    void AddChangeObserver(OutputChangeCallbackType f); 
+
+    /// Removes the function f from the list of functions to call when 
+    /// the output changes (TO WRITE)
+    void RemoveChangeObserver(OutputChangeCallbackType f); 
+
+
   private:
     /// The vector of output connections
     ConnectionVector mConnection;
     /// The status of the output 
-    //IOStatus mStatus;
+    IOStatus mStatus;
+
+    BlackBox::OutputChangeSignalType mChangeSignal;
+
+    // The change time
+    ChangeTime mChangeTime;
   };
   
 }