]> Creatis software - bbtk.git/blobdiff - kernel/src/bbtkConnection.cxx
MagicBox : support of data synchronization + various related fixes
[bbtk.git] / kernel / src / bbtkConnection.cxx
index 4e39eb45668d740ace70c5f68f1f7149e7333ece..37c0eb6be1448122aacd7f025324e4f973e34329 100644 (file)
@@ -2,8 +2,8 @@
   Program:   bbtk
   Module:    $RCSfile: bbtkConnection.cxx,v $
   Language:  C++
-  Date:      $Date: 2008/12/09 11:48:31 $
-  Version:   $Revision: 1.18 $
+  Date:      $Date: 2009/03/30 14:42:16 $
+  Version:   $Revision: 1.20 $
 =========================================================================*/
 
 /* ---------------------------------------------------------------------
@@ -116,9 +116,7 @@ Connection::Connection(BlackBox::Pointer from, const std::string& output,
       {
        if ( from->bbGetOutputType(output) == typeid(Data) )
          {
-           bbtkWarning("Connection '"
-                       <<GetFullName()
-                       <<"' : '"<<from->bbGetName()<<"."<<output
+           bbtkWarning("Connection: '"<<from->bbGetName()<<"."<<output
                        <<"' is of type <"
                        <<HumanTypeName<Data>()
                        <<"> : type compatibility with '"
@@ -338,14 +336,26 @@ Connection::Connection(BlackBox::Pointer from, const std::string& output,
   //==================================================================
   
   //==================================================================
-  /// Backward Update
-  void Connection::BackwardUpdate()
+  /// Recursive execution
+  void Connection::RecursiveExecute()
   {
-    bbtkDebugMessage("process",3,
-                    "===> Connection::BackwardUpdate() ["
+    bbtkDebugMessage("process",4,
+                    "===> Connection::RecursiveExecute() ["
                     <<GetFullName()<<"]"<<std::endl);
 
-    mFrom->bbBackwardUpdate(GetThisPointer<Connection>());
+    /*
+    // If box from already executing : nothing to do
+    if (mFrom->bbGetExecuting()) 
+      {
+       bbtkDebugMessage("process",3,
+                        " -> "<<mFrom->bbGetName()
+                        <<" already executing : abort"<<std::endl);
+       return; 
+
+      }
+    */
+
+    mFrom->bbRecursiveExecute(GetThisPointer<Connection>());
 
     TransferData();
 
@@ -357,7 +367,7 @@ Connection::Connection(BlackBox::Pointer from, const std::string& output,
       }
     mTo->bbGetInputConnector(mInput).SetStatus(s);
     
-    bbtkDebugMessage("process",3,
+    bbtkDebugMessage("process",4,
                     " --> '"<<mTo->bbGetName()<<"."<<mInput
                     <<" ["<<&mTo->bbGetInputConnector(mInput)<<"] "
                     <<"' new status '"
@@ -365,31 +375,14 @@ Connection::Connection(BlackBox::Pointer from, const std::string& output,
                     <<"'"
                     << std::endl);
 
-    bbtkDebugMessage("process",3,
-                    "<=== Connection::BackwardUpdate() ["
+    bbtkDebugMessage("process",4,
+                    "<=== Connection::RecursiveExecute() ["
                     <<GetFullName()<<"]"<<std::endl);
-    return; // s;
+    return; 
   }
   //==================================================================
 
-  /*
-  //==================================================================
-  /// Forward Update
-  void Connection::ForwardUpdate()
-  {
-    bbtkDebugMessageInc("process",2,
-                       "Connection::ForwardUpdate() ["
-                       <<GetFullName()<<"]"<<std::endl);
 
-  
-    TransferData();
-
-    mTo->bbForwardUpdate(this);
-
-    bbtkDebugDecTab("process",2);
-  }
-  //==================================================================
-  */
 
   //==================================================================
   /// Transfers the data from the source output to the target input
@@ -424,8 +417,14 @@ Connection::Connection(BlackBox::Pointer from, const std::string& output,
                         <<HumanTypeName(mTo->bbGetInputType(mInput))
                         <<">"<<std::endl);
        
+       // 0) If from any contents void : nothing to do 
+       if (mFrom->bbGetOutput(mOutput).type() == typeid(void)) 
+         {
+           bbtkDebugMessage("data",3,
+                            " -> Source is void : nothing to transfer!"<<std::endl);
+         }
        // 1) Test strict type matching between any content and target
-       if (mFrom->bbGetOutput(mOutput)
+       else if (mFrom->bbGetOutput(mOutput)
            .contains( mTo->bbGetInputType(mInput) ) )
          {
            bbtkDebugMessage("data",3,
@@ -503,24 +502,7 @@ Connection::Connection(BlackBox::Pointer from, const std::string& output,
 
   }
   //==================================================================
-  
-  /*
-  //==================================================================
-  /// Modified
-  void Connection::SetModifiedStatus()
-  {
-    bbtkDebugMessage("modified",2,
-                    "==> Connection::SetModifiedStatus() ["
-                    <<GetFullName()<<"]"<<std::endl);
-    
-    if (mAdaptor) mAdaptor->bbSetModifiedStatus();
-    
-    mTo->bbSetModifiedStatus(  mTo->bbGetInputConnectorMap().find(mInput)->second );
-    
-  }
-  //==================================================================
-  */
+
   //==================================================================
   /// From.Output change propagation
   void Connection::OnOutputChange(bbtk::BlackBox::Pointer, const std::string&,