Program: bbtk
Module: $RCSfile: bbtkConnection.cxx,v $
Language: C++
- Date: $Date: 2008/12/11 09:50:35 $
- Version: $Revision: 1.19 $
+ Date: $Date: 2009/05/28 08:12:05 $
+ Version: $Revision: 1.21 $
=========================================================================*/
/* ---------------------------------------------------------------------
#include "bbtkMessageManager.h"
#include "bbtkBlackBoxOutputConnector.h"
+#define bbtkCMessage(key,level,mess) \
+ bbtkMessage(key,level,"["<<GetFullName()<<"] "<<mess)
+#define bbtkCDebugMessage(key,level,mess) \
+ bbtkDebugMessage(key,level,"["<<GetFullName()<<"] "<<mess)
+
namespace bbtk
{
const std::string IOSTATUS_STRING[3] =
const std::string& input ,
const Factory::Pointer f )
{
- bbtkDebugMessage("object",1,"##> Connection::Connection(\""
+ bbtkDebugMessage("object",1,"##> Connection(\""
<<from->bbGetName()<<"\",\""<<output<<"\",\""
<<to->bbGetName()<<"\",\""<<input<<"\")"
<<std::endl);
Connection::Pointer p =
MakePointer(new Connection(from,output,to,input,f));
- bbtkDebugMessage("object",1,"<## Connection::Connection(\""
+ bbtkDebugMessage("object",1,"<## Connection(\""
<<from->bbGetName()<<"\",\""<<output<<"\",\""
<<to->bbGetName()<<"\",\""<<input<<"\")"
<<std::endl);
mFromAny(false),
mToAny(false)
{
- bbtkDebugMessage("object",2,"==> Connection::Connection(\""
+ bbtkDebugMessage("object",2,"==> Connection(\""
<<from->bbGetName()<<"\",\""<<output<<"\",\""
<<to->bbGetName()<<"\",\""<<input<<"\")"
<<std::endl);
- bbtkDebugMessage("connection",1,"==> Connection::Connection(\""
- <<from->bbGetFullName()<<"\",\""<<output<<"\",\""
- <<to->bbGetFullName()<<"\",\""<<input<<"\")"
+ bbtkDebugMessage("connection",1,"==> Connection(\""
+ <<from->bbGetName()<<"\",\""<<output<<"\",\""
+ <<to->bbGetName()<<"\",\""<<input<<"\")"
<<std::endl);
{
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 '"
}
else if ( to->bbGetInputType(input) == typeid(Data) )
{
- bbtkDebugMessage("Kernel",8," -> '"<<input<<"' type is "
+ bbtkDebugMessage("kernel",8," -> '"<<input<<"' type is "
<<TypeName<Data>()<<" : can receive any data"
<<std::endl);
mToAny = true;
from->bbGetOutputConnector(output).AddChangeObserver(boost::bind(&bbtk::Connection::OnOutputChange,this, _1, _2, _3));
- bbtkDebugMessage("connection",1,"<== Connection::Connection(\""
- <<from->bbGetFullName()<<"\",\""<<output<<"\",\""
- <<to->bbGetFullName()<<"\",\""<<input<<"\")"
+ bbtkDebugMessage("connection",1,"<== Connection(\""
+ <<from->bbGetName()<<"\",\""<<output<<"\",\""
+ <<to->bbGetName()<<"\",\""<<input<<"\")"
<<std::endl);
- bbtkDebugMessage("object",2,"==> Connection::Connection(\""
+ bbtkDebugMessage("object",2,"<== Connection(\""
<<from->bbGetName()<<"\",\""<<output<<"\",\""
<<to->bbGetName()<<"\",\""<<input<<"\")"
<<std::endl);
BlackBox::Pointer to,
const std::string& input )
{
- bbtkDebugMessage("object",1,"##> Connection::Connection(\""
+ bbtkDebugMessage("object",1,"##> Connection(\""
<<from->bbGetName()<<"\",\""<<output<<"\",\""
<<to->bbGetName()<<"\",\""<<input<<"\")"
<<std::endl);
Connection::Pointer p =
MakePointer(new Connection(from,output,to,input));
- bbtkDebugMessage("object",1,"<## Connection::Connection(\""
+ bbtkDebugMessage("object",1,"<## Connection(\""
<<from->bbGetName()<<"\",\""<<output<<"\",\""
<<to->bbGetName()<<"\",\""<<input<<"\")"
<<std::endl);
mFromAny(false),
mToAny(false)
{
- bbtkDebugMessage("object",2,"==> Connection::Connection(\""
+ bbtkDebugMessage("object",2,"==> Connection(\""
<<from->bbGetName()<<"\",\""<<output<<"\",\""
<<to->bbGetName()<<"\",\""<<input<<"\")"
<<std::endl);
- bbtkDebugMessage("connection",1,"==> Connection::Connection(\""
- <<from->bbGetFullName()<<"\",\""<<output<<"\",\""
- <<to->bbGetFullName()<<"\",\""<<input<<"\")"
+ bbtkDebugMessage("connection",1,"==> Connection(\""
+ <<from->bbGetName()<<"\",\""<<output<<"\",\""
+ <<to->bbGetName()<<"\",\""<<input<<"\")"
<<std::endl);
}
else if ( to->bbGetInputType(input) == typeid(Data) )
{
- bbtkDebugMessage("Kernel",8," -> '"<<input<<"' type is "
+ bbtkDebugMessage("kernel",8," -> '"<<input<<"' type is "
<<TypeName<Data>()<<" : can receive any data"
<<std::endl);
mToAny = true;
from->bbGetOutputConnector(output).AddChangeObserver(boost::bind(&bbtk::Connection::OnOutputChange,this, _1, _2, _3));
- bbtkDebugMessage("connection",1,"<== Connection::Connection(\""
- <<from->bbGetFullName()<<"\",\""<<output<<"\",\""
- <<to->bbGetFullName()<<"\",\""<<input<<"\")"
+ bbtkDebugMessage("connection",1,"<== Connection(\""
+ <<from->bbGetName()<<"\",\""<<output<<"\",\""
+ <<to->bbGetName()<<"\",\""<<input<<"\")"
<<std::endl);
- bbtkDebugMessage("object",2,"==> Connection::Connection(\""
+ bbtkDebugMessage("object",2,"==> Connection(\""
<<from->bbGetName()<<"\",\""<<output<<"\",\""
<<to->bbGetName()<<"\",\""<<input<<"\")"
<<std::endl);
/// Dtor
Connection::~Connection()
{
- bbtkDebugMessage("object",2,
- "==> Connection::~Connection() ["
- <<GetFullName()<<"]"<<std::endl);
+ bbtkCDebugMessage("object",4,
+ "==> ~Connection()"
+ <<std::endl);
if (mAdaptor) mAdaptor.reset();
if (mFrom!=0)
}
else
{
- bbtkInternalError("Connection::~Connection() : invalid initial box pointer");
+ bbtkInternalError("~Connection() : invalid initial box pointer");
}
if (mTo!=0)
{
}
else
{
- bbtkInternalError("Connection::~Connection() : invalid final box pointer");
+ bbtkInternalError("~Connection() : invalid final box pointer");
}
- bbtkDebugMessage("object",2,
- "<== Connection::~Connection() ["
- <<GetFullName()<<"]"<<std::endl);
+ bbtkCDebugMessage("object",4,
+ "<== ~Connection()"
+ <<std::endl);
}
//==================================================================
/// Recursive execution
void Connection::RecursiveExecute()
{
- bbtkDebugMessage("process",4,
- "===> Connection::RecursiveExecute() ["
- <<GetFullName()<<"]"<<std::endl);
+ bbtkCDebugMessage("process",4,
+ "===> Connection::RecursiveExecute()"
+ <<std::endl);
+
+ /*
+ // 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>());
}
mTo->bbGetInputConnector(mInput).SetStatus(s);
- bbtkDebugMessage("process",4,
+ bbtkCDebugMessage("process",4,
" --> '"<<mTo->bbGetName()<<"."<<mInput
<<" ["<<&mTo->bbGetInputConnector(mInput)<<"] "
<<"' new status '"
<<"'"
<< std::endl);
- bbtkDebugMessage("process",4,
- "<=== Connection::RecursiveExecute() ["
- <<GetFullName()<<"]"<<std::endl);
+ bbtkCDebugMessage("process",4,
+ "<=== Connection::RecursiveExecute()"
+ <<std::endl);
return;
}
//==================================================================
/// doing necessary conversions (adaptation or pointer cast)
void Connection::TransferData()
{
- bbtkDebugMessageInc("data",3,
- "Connection::TransferData() ["
- <<GetFullName()<<"]"<<std::endl);
+ bbtkCDebugMessage("data",3,
+ "Connection::TransferData()"
+ <<std::endl);
// If an adaptor was created we need to adapt the data
// If no adaptor but source type is an any and target is not an any
else if ( mFromAny && (! mToAny) )
{
- bbtkDebugMessage("data",3,
+ bbtkCDebugMessage("data",3,
" * Source type is an "
<<HumanTypeName<Data>()
<<" which contains a <"
<<HumanTypeName(mFrom->bbGetOutput(mOutput).type())
<<">"<<std::endl);
- bbtkDebugMessage("data",3,
+ bbtkCDebugMessage("data",3,
" * Target type is <"
<<HumanTypeName(mTo->bbGetInputType(mInput))
<<">"<<std::endl);
+ // 0) If from any contents void : nothing to do
+ if (mFrom->bbGetOutput(mOutput).type() == typeid(void))
+ {
+ bbtkCDebugMessage("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,
+ bbtkCDebugMessage("data",3,
" -> Equal types : transfer ok"<<std::endl);
mTo->bbSetInput( mInput,
mFrom->bbGetOutput(mOutput),
}
if (adaptor)
{
- bbtkDebugMessage("data",3," -> Adaptor found : using it"
+ bbtkCDebugMessage("data",3," -> Adaptor found : using it"
<<std::endl);
adaptor->bbSetInput("In",mFrom->bbGetOutput(mOutput),false);
adaptor->bbExecute();
(mTo->bbGetDescriptor()->GetInputDescriptor(mInput)
->IsPointerType()) )
{
- bbtkDebugMessage("data",3,
+ bbtkCDebugMessage("data",3,
" -> No adaptor found but source and target types are both pointers : trying up or down cast"<<std::endl);
void* nptr =
void Connection::OnOutputChange(bbtk::BlackBox::Pointer, const std::string&,
IOStatus status)
{
- bbtkDebugMessage("change",2,
+ bbtkCDebugMessage("change",2,
"==> Connection::OnOutputChange("
- <<GetIOStatusString(status)<<") ["
- <<GetFullName()<<"]"<<std::endl);
+ <<GetIOStatusString(status)<<")"
+ <<std::endl);
if (mAdaptor)
{
BlackBoxInputConnector* ac = mAdaptor->bbGetInputConnectorMap().find("In")->second;
//==================================================================
void Connection::Check() const
{
- bbtkMessage("debug",1,"** Checking Connection "<<(void*)this<<" ["<<GetFullName()<<"]"
+ bbtkMessage("debug",1,"** Checking Connection "<<(void*)this<<" ["
+ <<GetFullName()<<"]"
<<std::endl);
if (mFrom==0)
{
}
else
{
- bbtkMessage("debug",2," - From : "<<mFrom->bbGetFullName()<<std::endl);
+ bbtkMessage("debug",2," - From : "<<mFrom->bbGetName()<<std::endl);
if (!mFrom->bbHasOutput(mOutput))
{
bbtkError("** Checking Connection "<<(void*)this
<<" ["<<GetFullName()<<"] : "
- << mFrom->bbGetFullName()<<" does not have output '"
+ << mFrom->bbGetName()<<" does not have output '"
<<mOutput<<"'");
}
bbtkMessage("debug",2," - From : Output '"<<mOutput<<"' exists"<<std::endl);
{
bbtkError("** Checking Connection "<<(void*)this
<<" ["<<GetFullName()<<"] : "
- <<mFrom->bbGetFullName()<<" output '"
+ <<mFrom->bbGetName()<<" output '"
<<mOutput<<"' is not in OutputConnectorMap");
}
bbtkMessage("debug",2," - From : Output '"<<mOutput
{
bbtkError("** Checking Connection "<<(void*)this
<<" ["<<GetFullName()<<"] : "
- << "Connection ["<<GetFullName()<<"] : "
<<" OutputConnector '"
- <<mOutput<<"' of "<<mFrom->bbGetFullName()
+ <<mOutput<<"' of "<<mFrom->bbGetName()
<<" does not point to this connection");
}
// std::cout << mTo << std::endl;
// std::cout << mTo->bbGetDescriptor() << std::endl;
// std::cout << mTo->bbGetDescriptor()->GetTypeName() << std::endl;
- // mTo->bbGetFullName();
- bbtkMessage("debug",2," - To : "<<mTo->bbGetFullName()<<std::endl);
+ // mTo->bbGetName();
+ bbtkMessage("debug",2," - To : "<<mTo->bbGetName()<<std::endl);
if (!mTo->bbHasInput(mInput))
{
bbtkError("** Checking Connection "<<(void*)this
<<" ["<<GetFullName()<<"] : "
- <<mTo->bbGetFullName()<<" does not have input '"
+ <<mTo->bbGetName()<<" does not have input '"
<<mInput<<"'");
}
bbtkMessage("debug",2," - To : Input '"<<mInput<<"' exists"<<std::endl);
{
bbtkError("** Checking Connection "<<(void*)this
<<" ["<<GetFullName()<<"] : "
- <<mTo->bbGetFullName()<<" input '"
+ <<mTo->bbGetName()<<" input '"
<<mInput<<"' is not in InputConnectorMap");
}
bbtkMessage("debug",2," - To : Input '"<<mInput
{
bbtkError("** Checking Connection "<<(void*)this
<<" ["<<GetFullName()<<"] : "
- <<"Connection "<<GetFullName()<<" : "
<<" InputConnector '"
- <<mInput<<"' of "<<mTo->bbGetFullName()
+ <<mInput<<"' of "<<mTo->bbGetName()
<<" does not point to this connection");
}