X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=kernel%2Fsrc%2FbbtkConnection.cxx;h=bc6b3b1c001561de5335fb3311f7d027118dea5f;hb=8822f9075c66dcf742b9edae47271bb46af6a9b7;hp=b3ce70a0b00256df328d49f41fd87df6922cd0b0;hpb=e6b2de923e0e69c303c7d18fb8a5c1970541bb3a;p=bbtk.git diff --git a/kernel/src/bbtkConnection.cxx b/kernel/src/bbtkConnection.cxx index b3ce70a..bc6b3b1 100644 --- a/kernel/src/bbtkConnection.cxx +++ b/kernel/src/bbtkConnection.cxx @@ -1,20 +1,33 @@ -/*========================================================================= - +/*========================================================================= Program: bbtk Module: $RCSfile: bbtkConnection.cxx,v $ Language: C++ - Date: $Date: 2008/07/25 07:44:12 $ - Version: $Revision: 1.14 $ - - 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/11 09:50:35 $ + Version: $Revision: 1.19 $ =========================================================================*/ + +/* --------------------------------------------------------------------- + +* 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::Connection @@ -24,9 +37,16 @@ #include "bbtkFactory.h" #include "bbtkBlackBox.h" #include "bbtkMessageManager.h" +#include "bbtkBlackBoxOutputConnector.h" namespace bbtk { + const std::string IOSTATUS_STRING[3] = + {"Up-to-date","Modified","Out-of-date"}; + + const std::string& GetIOStatusString(IOStatus s) + { return IOSTATUS_STRING[s]; } + //================================================================== Connection::Pointer Connection::New(BlackBox::Pointer from, const std::string& output, @@ -147,6 +167,8 @@ Connection::Connection(BlackBox::Pointer from, const std::string& output, //Pointer p = MakePointer(this,true); from->bbConnectOutput(output,this); to->bbConnectInput(input,this); + + from->bbGetOutputConnector(output).AddChangeObserver(boost::bind(&bbtk::Connection::OnOutputChange,this, _1, _2, _3)); bbtkDebugMessage("connection",1,"<== Connection::Connection(\"" @@ -265,6 +287,7 @@ Connection::Connection(BlackBox::Pointer from, const std::string& output, from->bbConnectOutput(output,this); to->bbConnectInput(input,this); + from->bbGetOutputConnector(output).AddChangeObserver(boost::bind(&bbtk::Connection::OnOutputChange,this, _1, _2, _3)); bbtkDebugMessage("connection",1,"<== Connection::Connection(\"" <bbGetFullName()<<"\",\""< Connection::BackwardUpdate() [" + bbtkDebugMessage("process",4, + "===> Connection::RecursiveExecute() [" <bbBackwardUpdate(GetThisPointer()); + mFrom->bbRecursiveExecute(GetThisPointer()); TransferData(); - if (mAdaptor && (s==MODIFIED)) mAdaptor->bbSetModifiedStatus(); - - bbtkDebugMessage("process",5, - "<=== Connection::BackwardUpdate() [" + // Transfer status + IOStatus s = MODIFIED; + if ( mFrom->bbGetOutputConnector(mOutput).GetStatus() == OUTOFDATE) + { + s = OUTOFDATE; + } + mTo->bbGetInputConnector(mInput).SetStatus(s); + + bbtkDebugMessage("process",4, + " --> '"<bbGetName()<<"."<bbGetInputConnector(mInput)<<"] " + <<"' new status '" + <bbForwardUpdate(this); - - bbtkDebugDecTab("process",2); - } - //================================================================== - */ //================================================================== /// Transfers the data from the source output to the target input @@ -467,24 +486,25 @@ Connection::Connection(BlackBox::Pointer from, const std::string& output, } //================================================================== - + //================================================================== - /// Modified - void Connection::SetModifiedStatus() + /// From.Output change propagation + void Connection::OnOutputChange(bbtk::BlackBox::Pointer, const std::string&, + IOStatus status) { - bbtkDebugMessage("modified",2, - "==> Connection::SetModifiedStatus() [" + bbtkDebugMessage("change",2, + "==> Connection::OnOutputChange(" + <bbGetInputConnectorMap().find("In")->second; + mAdaptor->bbSetStatusAndPropagate(ac,status); + } - if (mAdaptor) mAdaptor->bbSetModifiedStatus(); - - mTo->bbSetModifiedStatus( mTo->bbGetInputConnectorMap().find(mInput)->second ); + mTo->bbSetStatusAndPropagate( mTo->bbGetInputConnectorMap().find(mInput)->second, status); - /* - bbtkDebugMessage("modified",2, - "==> Connection::SetModifiedStatus() [" - <