-/*=========================================================================
+/*
+ # ---------------------------------------------------------------------
+ #
+ # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
+ # pour la SantÈ)
+ # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
+ # Previous Authors : Laurent Guigues, Jean-Pierre Roux
+ # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
+ #
+ # 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.
+ # ------------------------------------------------------------------------ */
+
+
+/*=========================================================================
Program: bbtk
Module: $RCSfile: bbtkBlackBoxOutputConnector.cxx,v $
Language: C++
- Date: $Date: 2009/05/28 08:12:05 $
- Version: $Revision: 1.12 $
+ Date: $Date: 2012/11/16 08:49:01 $
+ Version: $Revision: 1.14 $
=========================================================================*/
-/* ---------------------------------------------------------------------
-
-* 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
namespace bbtk
{
+ //========================================================================
+ /// The Pimpl
+ class BlackBoxOutputConnector::Pimpl
+ {
+ public:
+ Pimpl() : mStatus(OUTOFDATE) {}
+ Pimpl(const Pimpl&) {}
+ ///
+ BlackBoxWeakPointer mBox;
+ /// The vector of output connections
+ ConnectionVector mConnection;
+ /// The status of the output
+ IOStatus mStatus;
+ /// The output changed signal
+ BlackBox::OutputChangeSignalType mChangeSignal;
+
+
+ };
+ //========================================================================
+
+ //========================================================================
+ BBTK_IMPL_PIMPL(BlackBoxOutputConnector)
+ //========================================================================
+
+
//======================================================================
BlackBoxOutputConnector::BlackBoxOutputConnector(BlackBox::Pointer b)
- : mBox(b),
- mStatus(OUTOFDATE)
{
bbtkDebugMessage("kernel",9,
"["<<b->bbGetName()
<<"] BlackBoxOutputConnector()"<<std::endl);
+ PimplConstruct();
+ p->mBox = b;
}
//======================================================================
BlackBoxOutputConnector::~BlackBoxOutputConnector()
{
bbtkDebugMessage("kernel",9,
- "[NULL"//<<mBox.lock()->bbGetName()
- <<"] ==> ~BlackBoxOutputConnector()"
+ "[DEAD BOX] ==> ~BlackBoxOutputConnector()"
<<std::endl);
/*
ConnectionVector::iterator i;
++i)
(*i) = Connection::WeakPointer();
*/
- mConnection.clear();
+ p->mConnection.clear();
+ PimplDestruct();
+
bbtkDebugMessage("kernel",9,
- "[NULL"//<<mBox.lock()->bbGetName()
- <<"] <== ~BlackBoxOutputConnector()"
+ "[DEAD BOX] <== ~BlackBoxOutputConnector()"
<<std::endl);
}
//======================================================================
void BlackBoxOutputConnector::SetConnection(Connection* c)
{
bbtkDebugMessage("kernel",9,
- "["<<mBox.lock()->bbGetName()
+ "["<<p->mBox.lock()->bbGetName()
<<"] BlackBoxOutputConnector::SetConnection("
<<c<<")"<<std::endl);
- mConnection.push_back(c);
+ p->mConnection.push_back(c);
// AddChangeObserver(boost::bind(&Connection::SignalChange,c));
}
//======================================================================
//======================================================================
void BlackBoxOutputConnector::UnsetConnection(Connection* c)
{
- bbtkDebugMessage("kernel",9,"["<<mBox.lock()->bbGetName()
+ bbtkDebugMessage("kernel",9,"["<<p->mBox.lock()->bbGetName()
<<"] BlackBoxOutputConnector::UnsetConnection("
<<c<<")"<<std::endl);
if (!c)
{
- bbtkInternalError(mBox.lock()->bbGetFullName()
+ bbtkInternalError(p->mBox.lock()->bbGetFullName()
<<": BlackBoxOutputConnector::UnsetConnection("
<<c<<") : invalid connection");
//Connection::WeakPointer w(c);
ConnectionVector::iterator i;
// = find(mConnection.begin(),mConnection.end(),c);
- for (i=mConnection.begin();
- i!=mConnection.end();
+ for (i=p->mConnection.begin();
+ i!=p->mConnection.end();
++i)
{
if (*i==c) break;
}
- if (i==mConnection.end())
+ if (i==p->mConnection.end())
{
- bbtkInternalError(mBox.lock()->bbGetFullName()
+ bbtkInternalError(p->mBox.lock()->bbGetFullName()
<<": BlackBoxOutputConnector::UnsetConnection("
<<c
<<") : connection is absent from connections list");
}
- mConnection.erase(i);
+ p->mConnection.erase(i);
// RemoveChangeObserver(boost::bind(&Connection::SignalChange,c));
}
//======================================================================
+
+ //======================================================================
+ const BlackBoxOutputConnector::ConnectionVector&
+ BlackBoxOutputConnector::GetConnectionVector() const
+ {
+ return p->mConnection;
+ }
+ //======================================================================
+
+ //======================================================================
+ /// Returns the status of the input
+ IOStatus BlackBoxOutputConnector::GetStatus() const
+ {
+ return p->mStatus;
+ }
+ //======================================================================
+ //======================================================================
+ /// Sets the status of the input
+ void BlackBoxOutputConnector::SetStatus( IOStatus s )
+ {
+ p->mStatus = s;
+ }
+ //======================================================================
- //======================================================================
+ //======================================================================
void BlackBoxOutputConnector::SignalChange( BlackBox::Pointer box,
const std::string& output )
{
// std::cout<<"BlackBoxOutputConnector::SignalChange("
// <<box->bbGetName()<<",'"
// <<output<<"')"<<std::endl;
- mChangeSignal(box,output,s);
+ p->mChangeSignal(box,output,s);
bbtkDebugMessage("change",2,
"["<<box->bbGetName()
<<std::endl);
}
//======================================================================
- /*
- void BlackBoxOutputConnector::SetModifiedStatus()
- {
- bbtkDebugMessage("modified",2,
- "==> BlackBoxOutputConnector::SetModifiedStatus() ["
- <<this<<"]"
- <<std::endl);
- ConnectionVector::iterator i;
- for (i=mConnection.begin();i!=mConnection.end();++i)
- {
- (*i)->SetModifiedStatus();
- }
-
-
- }
- */
- /*
- //======================================================================
- 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);
+ p->mChangeSignal.connect(f);
}
//======================================================================