]> Creatis software - bbtk.git/blobdiff - kernel/src/bbtkBlackBoxOutputConnector.cxx
*** empty log message ***
[bbtk.git] / kernel / src / bbtkBlackBoxOutputConnector.cxx
index af6bf5f21ed88febf007ea7e523d198dcf525aa7..789cda41ffe91f058e491db6f424ccfc8351f9e6 100644 (file)
@@ -1,21 +1,34 @@
-/*=========================================================================
-                                                                                
+/*=========================================================================                                                                               
   Program:   bbtk
   Module:    $RCSfile: bbtkBlackBoxOutputConnector.cxx,v $
   Language:  C++
-  Date:      $Date: 2008/04/18 12:59:15 $
-  Version:   $Revision: 1.4 $
-                                                                                
-  Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
-  l'Image). All rights reserved. See Doc/License.txt or
-  http://www.creatis.insa-lyon.fr/Public/bbtk/License.html for details.
-                                                                                
-     This software is distributed WITHOUT ANY WARRANTY; without even
-     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-     PURPOSE.  See the above copyright notices for more information.
-                                                                                
+  Date:      $Date: 2008/12/10 09:33:18 $
+  Version:   $Revision: 1.11 $
 =========================================================================*/
 
+/* ---------------------------------------------------------------------
+
+* Copyright (c) CREATIS-LRMN (Centre de Recherche en Imagerie Medicale)
+* Authors : Eduardo Davila, Laurent Guigues, Jean-Pierre Roux
+*
+*  This software is governed by the CeCILL-B license under French law and 
+*  abiding by the rules of distribution of free software. You can  use, 
+*  modify and/ or redistribute the software under the terms of the CeCILL-B 
+*  license as circulated by CEA, CNRS and INRIA at the following URL 
+*  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html 
+*  or in the file LICENSE.txt.
+*
+*  As a counterpart to the access to the source code and  rights to copy,
+*  modify and redistribute granted by the license, users are provided only
+*  with a limited warranty  and the software's author,  the holder of the
+*  economic rights,  and the successive licensors  have only  limited
+*  liability. 
+*
+*  The fact that you are presently reading this means that you have had
+*  knowledge of the CeCILL-B license and that you accept its terms.
+* ------------------------------------------------------------------------ */                                                                         
+
+
 /**
  *  \file 
  *  \brief Class bbtk::BlackBoxOutputConnector : 
 namespace bbtk
 {
 
+  //======================================================================
   BlackBoxOutputConnector::BlackBoxOutputConnector() 
-  // : mStatus(MODIFIED)
+    : mStatus(OUTOFDATE)
   {
     bbtkDebugMessage("Kernel",9,"BlackBoxOutputConnector::BlackBoxOutputConnector()"<<std::endl);
   }
+  //======================================================================
 
+
+  //======================================================================
   BlackBoxOutputConnector::~BlackBoxOutputConnector() 
   {
     bbtkDebugMessage("Kernel",9,
                     "==> BlackBoxOutputConnector::~BlackBoxOutputConnector()"
                     <<std::endl);
+    /*
     ConnectionVector::iterator i;
     for (i=mConnection.begin();
         i!=mConnection.end();
         ++i)
       (*i) = Connection::WeakPointer();
+    */
+    mConnection.clear();
     bbtkDebugMessage("Kernel",9,
                     "<== BlackBoxOutputConnector::~BlackBoxOutputConnector()"
                     <<std::endl);
   }
+  //======================================================================
 
+  //======================================================================
   ///
-  void BlackBoxOutputConnector::SetConnection(Connection::Pointer c)
+  void BlackBoxOutputConnector::SetConnection(Connection* c)
   {
     bbtkDebugMessage("Kernel",9,"BlackBoxOutputConnector::SetConnection("
                     <<c<<")"<<std::endl);
     mConnection.push_back(c);
+    //    AddChangeObserver(boost::bind(&Connection::SignalChange,c));
   }
+  //======================================================================
 
 
-
-  ///
-  void BlackBoxOutputConnector::UnsetConnection(Connection::Pointer c)
+  //======================================================================
+  void BlackBoxOutputConnector::UnsetConnection(Connection* c)
   {
     bbtkDebugMessageInc("Kernel",9,"BlackBoxOutputConnector::UnsetConnection("
                     <<c<<")"<<std::endl);
@@ -74,41 +97,125 @@ namespace bbtk
     //    c->Check();
     //Connection::WeakPointer w(c);
     ConnectionVector::iterator i;
-    //      = find(mConnection.begin(),mConnection.end(),c);
+    //  = find(mConnection.begin(),mConnection.end(),c);
     for (i=mConnection.begin();
         i!=mConnection.end();
         ++i)
       {
-       if (i->lock()==c) break;
+       if (*i==c) break;
       }
     if (i==mConnection.end())
       {
        bbtkInternalError("BlackBoxOutputConnector::UnsetConnection("<<c<<") : connection is absent from connections list");
       }
     mConnection.erase(i);
+    //    RemoveChangeObserver(boost::bind(&Connection::SignalChange,c));
 
     bbtkDebugDecTab("Kernel",9);
   }
-
+  //======================================================================
 
   
+   //======================================================================
+  void BlackBoxOutputConnector::SignalChange( BlackBox::Pointer box,
+                                             const std::string& output )
+  {
+    IOStatus s = OUTOFDATE; //mStatus;
+    //if (s==UPTODATE) s=MODIFIED;
+    
+    bbtkDebugMessage("change",2,
+                    "==> BlackBoxOutputConnector::SignalChange("
+                    <<box->bbGetFullName()<<",'"
+                    <<output<<"','"<<GetIOStatusString(s)<<"') ["
+                    <<this<<"]"
+                    <<std::endl);
+    
+    //    std::cout<<"BlackBoxOutputConnector::SignalChange("
+    //      <<box->bbGetFullName()<<",'"
+    //      <<output<<"')"<<std::endl;
+    mChangeSignal(box,output,s);
+    
+    bbtkDebugMessage("change",2,
+                    "<== BlackBoxOutputConnector::SignalChange("
+                    <<box->bbGetFullName()<<",'"
+                    <<output<<"','"<<GetIOStatusString(s)<<"') ["
+                    <<this<<"]"
+                    <<std::endl);
+  }
+  //======================================================================
+ /*
   void BlackBoxOutputConnector::SetModifiedStatus()
   {
-    bbtkDebugMessageInc("Process",5,
-                       "BlackBoxOutputConnector::SetModifiedStatus()"
-                       <<std::endl);
+    bbtkDebugMessage("modified",2,
+                    "==> BlackBoxOutputConnector::SetModifiedStatus() ["
+                    <<this<<"]"
+                    <<std::endl);
     ConnectionVector::iterator i;
     for (i=mConnection.begin();i!=mConnection.end();++i) 
       {
-       (*i).lock()->SetModifiedStatus();
+       (*i)->SetModifiedStatus();
       }
     
-    bbtkDebugDecTab("Process",5);
     
    }
+  */
+  /*
+  //======================================================================
+  void BlackBoxOutputConnector::SetChangeTime(const ChangeTime& t)
+  {
+    bbtkDebugMessage("change",2,
+                    "==> BlackBoxOutputConnector::SetChangeTime("<<t<<") ["
+                    <<this<<"]"
+                    <<std::endl);
+    if (mChangeTime.Set(t))
+      {
+       mChangeSignal(this);
+      }
+    bbtkDebugMessage("change",2,
+                    "<== BlackBoxOutputConnector::SetChangeTime("<<t<<") ["
+                    <<this<<"]"
+                    <<std::endl);
+  }
+  //======================================================================
+  */
+  /*
+ //======================================================================
+  void BlackBoxOutputConnector::SetChangeTimeToCurrentTime()
+  {
+    bbtkDebugMessage("change",2,
+                    "==> BlackBoxOutputConnector::SetChangeTimetoCurrentTime() ["
+                    <<this<<"]"
+                    <<std::endl);
+    mChangeTime.Set(ChangeTime::GetCurrentTime());
+    mChangeSignal(this);
+    
+    bbtkDebugMessage("change",2,
+                    "<==> BlackBoxOutputConnector::SetChangeTimetoCurrentTime() ["
+                    <<this<<"]"
+                    <<std::endl);
+  }
+  //======================================================================
+  */
 
 
+  //======================================================================
+  void BlackBoxOutputConnector::AddChangeObserver(OutputChangeCallbackType f)
+  { 
+    //    std::cout << "BlackBoxOutputConnector::AddChangeObserver" << std::endl;
+    mChangeSignal.connect(f); 
+  }
+  //======================================================================
+  
+  //======================================================================
+  /// Removes the function f from the list of functions to call when 
+  /// the output changes (TO WRITE)
+  void BlackBoxOutputConnector::RemoveChangeObserver(OutputChangeCallbackType f)
+  { 
+    bbtkError("BlackBoxOutputConnector::RemoveChangeObserver not implemented");
+    
+    //mChangeSignal.disconnect(f);
+  }
+  //======================================================================
 }
 // namespace bbtk