Program: bbtk
Module: $RCSfile: bbtkBlackBox.cxx,v $
Language: C++
- Date: $Date: 2009/05/28 14:22:09 $
- Version: $Revision: 1.47 $
+ Date: $Date: 2011/03/03 14:37:57 $
+ Version: $Revision: 1.52 $
=========================================================================*/
/* ---------------------------------------------------------------------
namespace bbtk
{
-
-
static bool bbmgSomeBoxExecuting = false;
static bool bbmgFreezeExecution = false;
static std::set<BlackBox::WeakPointer> bbmgExecutionList;
bbmParent()
{
+ //JCP 02-11-09
+ // bbmBoxProcessMode = "Pipeline";
+//std::cout<<"JCP BlackBox::BlackBox(const std::string &name) name=" <<name
+// <<"bbmBoxProcessMode="<<bbmBoxProcessMode<<std::endl;
bbtkBlackBoxDebugMessage("object",4,"==> BlackBox::BlackBox(\""
<<name<<"\")"<<std::endl);
bbtkBlackBoxDebugMessage("object",4,"<== BlackBox::BlackBox(\""
bbmParent()
{
+ //JCP 02-11-09
+ //bbmBoxProcessMode = from.bbmBoxProcessMode;
+ //std::cout<<"JCP BlackBox::BlackBox(const std::string &name) name=" <<name
+ // <<"bbmBoxProcessMode="<<bbmBoxProcessMode<<std::endl;
bbtkBlackBoxDebugMessage("object",4,"==> BlackBox::BlackBox("
<<from.bbGetFullName()<<",\""
<<name<<"\")"<<std::endl);
//=========================================================================
- /// Returns the name with the name of the parent prepended if any
std::string BlackBox::bbGetNameWithParent() const
{
if (bbmParent.lock())
//=========================================================================
//=========================================================================
- /// Prints the Help on the BlackBox type
void BlackBox::bbGetHelp(bool full) const
{
bbGetDescriptor()->GetHelp(full);
//=========================================================================
- /// Returns true if the UserBlackBox has an input of name name
bool BlackBox::bbHasInput(const std::string& name) const
{
bbtkBlackBoxDebugMessage("kernel",8,
//=========================================================================
- /// Returns true if the UserBlackBox has an output of name name
bool BlackBox::bbHasOutput(const std::string& name) const
{
bbtkBlackBoxDebugMessage("kernel",8,"BlackBox::bbHasOutput(\""
//=========================================================================
- /// Gets the output type of a given name
TypeInfo BlackBox::bbGetOutputType( const std::string &name ) const
{
bbtkBlackBoxDebugMessage("kernel",8,
//=========================================================================
//=========================================================================
- /// Gets the input type of a given name
TypeInfo BlackBox::bbGetInputType( const std::string &name ) const
{
bbtkBlackBoxDebugMessage("kernel",8,
//=========================================================================
- /// Allocates the i/o connectors of the black box
void BlackBox::bbAllocateConnectors()
{
bbtkBlackBoxDebugMessage("kernel",8,
bbGetOutputConnectorMap()[o->second->GetName()]
= new BlackBoxOutputConnector(GetThisPointer<BlackBox>());
}
-
}
//=========================================================================
//=========================================================================
- /// Desallocates the i/o connectors of the black box
void BlackBox::bbDesallocateConnectors()
{
bbtkBlackBoxDebugMessage("kernel",8,
delete (o->second);
}
- bbtkDebugDecTab("kernel",8);
-
+ bbtkDebugDecTab("kernel",8);
}
//=========================================================================
//=========================================================================
- /// Copies the input / output values from another box
void BlackBox::bbCopyIOValues(BlackBox& from)
{
bbtkBlackBoxDebugMessage("kernel",1,
}
bbtkDebugDecTab("kernel",9);
-
}
//=========================================================================
#ifdef USE_WXWIDGETS
|| Wx::IsSomeWindowAlive()
#endif
- );
+ );
}
//=========================================================================
- //=========================================================================
- /// User overloadable destruction method of a black box
- void BlackBox::bbUserDelete()
- {
- bbtkBlackBoxDebugMessage("process",5,
- "=> BlackBox::bbUserDelete()"
- <<" : not overloaded; using standard deletion"
- <<std::endl);
- delete this;
- }
- //=========================================================================
-
-
//=========================================================================
BlackBox::BoxProcessModeValue BlackBox::bbGetBoxProcessModeValue() const
{
const std::string& p = bbmBoxProcessMode;
if ( (p == "0") ||
(p == "P") || (p == "p") ||
- (p == "Pipeline") || (p == "pipeline") ) return Pipeline;
+ (p == "Pipeline") || (p == "pipeline") ) return bbPipeline;
if ( (p == "1") ||
(p == "A") || (p == "a") ||
- (p == "Always") || (p == "always") ) return Always;
+ (p == "Always") || (p == "always") ) return bbAlways;
if ( (p == "2") ||
(p == "R") || (p == "r") ||
- (p == "Reactive") || (p == "reactive") ) return Reactive;
+ (p == "Reactive") || (p == "reactive") )
+ return bbReactive;
/*
if ( (p == "3") ||
(p == "F") || (p == "f") ||
//=========================================================================
bool BlackBox::bbBoxProcessModeIsReactive() const
{
- return (bbGetBoxProcessModeValue() == Reactive);
+ return (bbGetBoxProcessModeValue() == bbReactive);
}
//=========================================================================
//=========================================================================
bool BlackBox::bbBoxProcessModeIsAlways() const
{
- return (bbGetBoxProcessModeValue() == Always);
+ return (bbGetBoxProcessModeValue() == bbAlways);
}
//=========================================================================
//=========================================================================
- /*
//=========================================================================
- /// Sets the ChangeTime of input
- void BlackBox::bbSetInputChangeTime(BlackBoxInputConnector* c,
- const ChangeTime& t)
- {
- bbtkBlackBoxDebugMessage("change",1,
- "==> BlackBox::bbSetInputChangeTime("<<c<<","<<t<<") ["
- <<bbGetFullName()<<"]"<<std::endl);
-
- // If new time is greater than old one
- if ( c->SetChangeTime(t) )
- {
- bool was_up_to_date = bbIsUpToDate();
- // If new time is greater than the old max time of inputs
- if ( mMaxInputChangeTime.Set(t) )
- {
- // If the box turned out-of-date
- if ( was_up_to_date && bbIsOutOfDate() )
- {
- //
- if ( ( bbBoxProcessModeIsReactive() ||
- (c==bbGetInputConnectorMap().find("BoxExecute")->second))
- && (bbCanReact() ) )
- {
- bbtkBlackBoxDebugMessage("change",2,
- "an input of "
- <<bbGetFullName()
- <<" changed and box is in Reactive mode or BoxExecute input changed : adding it to the global execution list"
- <<std::endl);
- bbGlobalAddToExecutionList( GetThisPointer<BlackBox>() );
- }
- // Have to propagate the modification to aval boxes
- OutputConnectorMapType::iterator i;
- for (i = bbGetOutputConnectorMap().begin();
- i != bbGetOutputConnectorMap().end();
- ++i)
- {
- i->second->SetChangeTime(t);
- }
- // update the MinOutputChangeTime
- mMinOutputChangeTime.Set(t);
- }
- }
- }
- }
- //=========================================================================
-
- //=========================================================================
- /// Sets the ChangeTime of output
- void BlackBox::bbSetOutputChangeTime(BlackBoxOutputConnector* c,
- const ChangeTime& t)
- {
- bbtkBlackBoxDebugMessage("change",1,
- "==> BlackBox::bbSetOutputChangeTime("<<c<<","<<t<<") ["
- <<bbGetFullName()<<"]"<<std::endl);
-
- //ChangeTime old =
- c->SetChangeTime(t);
- // c->GetChangeTime() = t;
- // bbUpdateMinOutputChangeTime(t);
- // propagate
-
- }
- //=========================================================================
- */
-
- /*
- //=========================================================================
- void BlackBox::bbUpdateMaxInputChangeTime(const ChangeTime& t)
- {
-
-
- if ( t > mMaxInputChangeTime )
- {
- mMaxInputChangeTime = t;
- if ( mMinOutputChangeTime > mMaxInputChangeTime )
- {
-
- }
- }
-
- }
- //=========================================================================
-
- //=========================================================================
- void bbUpdateMinOutputChangeTime(const ChangeTime& t)
- {
- ChangeTime old = mMinOutputChangeTime;
- mMinOutputChangeTime = MAXLONG;
- OutputConnectorMapType::iterator i;
- for (i = bbGetOutputConnectorMap.begin();
- i != bbGetOutputConnectorMap.end();
- ++i)
- {
- if (i->second->GetChangeTime() < mMinOutputChangeTime)
- mMinOutputChangeTime = i->second->GetChangeTime();
- }
- if ( mMinOutputChangeTime < old )
- {
- }
-
- }
- //=========================================================================
- */
-
- //=========================================================================
- /// Signals that the BlackBox has been modified through
- /// the input connector c
- /// and propagates it downward
- /// ** NOT USER INTENDED **
void BlackBox::bbSetStatusAndPropagate(BlackBoxInputConnector* c,
IOStatus s)
{
o->second->SetStatus(OUTOFDATE);
o->second->SignalChange(GetThisPointer<BlackBox>(),o->first);
}
- }
+ }
if ( ( bbBoxProcessModeIsReactive() ||
(c==bbGetInputConnectorMap().find("BoxExecute")->second))
"=> BlackBox::bbSignalOutputModification("
<<reaction<<")"
<<"]"<<std::endl);
-
+
OutputConnectorMapType::iterator i;
for ( i = bbGetOutputConnectorMap().begin();
i != bbGetOutputConnectorMap().end(); ++i)
bbtkBlackBoxDebugMessage("change",5,
"<= BlackBox::bbSignalOutputModification()"
<<std::endl);
-
}
//=========================================================================
//=========================================================================
"<= BlackBox::bbSignalOutputModification("
<<output<<")"
<<std::endl);
-
}
//=========================================================================
//=========================================================================
bbtkBlackBoxDebugMessage("change",5,
"<= BlackBox::bbSignalOutputModification(vector of outputs)"
<<std::endl);
-
}
//=========================================================================
//=========================================================================
- /// Main recursive processing method of the box.
void BlackBox::bbRecursiveExecute( Connection::Pointer caller )
{
bbtkBlackBoxDebugMessage("process",3,
bbSetExecuting(false);
bbGlobalSetSomeBoxExecuting(wasExecuting);
- return;
-
+ return;
}
//=========================================================================
//=========================================================================
- /// Updates the BlackBox inputs
- /// Calls RecursiveExecute on all BlackBoxInputConnector
- /// \returns The maximum of final IOStatus after each input update
IOStatus BlackBox::bbUpdateInputs()
{
bbtkBlackBoxDebugMessage("process",4,
bbtkBlackBoxDebugMessage("process",4,
"<= BlackBox::bbUpdateInputs()"
- <<std::endl);
-
-
+ <<std::endl);
return s;
}
//=========================================================================
//==================================================================
- /// Computes the final IOStatus of inputs and outputs after processing
- void BlackBox::bbComputePostProcessStatus()
+ void BlackBox::bbComputePostProcessStatus()
{
bbtkBlackBoxDebugMessage("process",4,
"=> BlackBox::bbComputePostProcessStatus()"
bbtkBlackBoxDebugMessage("process",4,
"<= BlackBox::bbComputePostProcessStatus()"
- <<std::endl);
-
+ <<std::endl);
}
//==================================================================
//=========================================================================
- /// Connects the input <name> to the connection c
void BlackBox::bbConnectInput( const std::string& name, Connection* c)
{
bbtkBlackBoxDebugMessage("connection",2,
<<name<<"\","<<c->GetFullName()<<")"
<<std::endl);
-
InputConnectorMapType::iterator i = bbGetInputConnectorMap().find(name);
if (i==bbGetInputConnectorMap().end())
{
i->second->SetConnection(c);
// The input *MUST* be set OUTOFDATE to update its input on next execution
bbSetStatusAndPropagate(i->second,OUTOFDATE);
-
+
bbtkBlackBoxDebugMessage("connection",2,
"<== BlackBox::bbConnectInput(\""
<<name<<"\","<<c->GetFullName()<<")"
- <<std::endl);
-
+ <<std::endl);
}
//=========================================================================
//=========================================================================
- /// Connects the output <name> to the connection c
void BlackBox::bbConnectOutput( const std::string& name, Connection* c)
{
bbtkBlackBoxDebugMessage("connection",2,
"==> BlackBox::bbConnectOutput(\""<<name<<"\","
<<c->GetFullName()<<")"
<<std::endl);
-
+
OutputConnectorMapType::iterator i = bbGetOutputConnectorMap().find(name);
if (i==bbGetOutputConnectorMap().end())
{
bbtkBlackBoxDebugMessage("connection",2,
"<== BlackBox::bbConnectOutput(\""<<name<<"\","
<<c->GetFullName()<<")"
- <<std::endl);
-
+ <<std::endl);
}
//=========================================================================
//=========================================================================
- /// Disconnects the input <name> from the connection c
- void BlackBox::bbDisconnectInput( const std::string& name, Connection* c)
+ void BlackBox::bbDisconnectInput( const std::string& name, Connection* c)
{
bbtkBlackBoxDebugMessage("connection",2,
"==> BlackBox::bbDisconnectInput(\""<<name
<<"\","<<c->GetFullName()<<")"
- <<std::endl);
-
+ <<std::endl);
if (!c)
{
//=========================================================================
- /// Disconnects the output <name> from the connection c
- void BlackBox::bbDisconnectOutput( const std::string& name, Connection* c)
+ void BlackBox::bbDisconnectOutput( const std::string& name, Connection* c)
{
bbtkBlackBoxDebugMessage("connection",2,
"==> BlackBox::bbDisconnectOutput(\""<<name
//=========================================================================
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
//=========================================================================
- /// Virtual
void BlackBox::bbWriteDotInputOutputName(FILE *ff,bool inputoutput,int detail, int level)
{
fprintf(ff,"%s%p",bbGetTypeName().c_str(),this);
//=========================================================================
- void BlackBox::bbShowRelations(BlackBox::Pointer parentblackbox,
+ void BlackBox::bbPrintHelp(BlackBox::Pointer parentblackbox,
int detail, int level
/*,Factory *factory*/ )
{
}
//=========================================================================
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
static bool bbmgGlobalProcessingExecutionList = false;
//=========================================================================