Program: bbtk
Module: $RCSfile: bbtkBlackBox.cxx,v $
Language: C++
- Date: $Date: 2009/04/08 07:56:11 $
- Version: $Revision: 1.42 $
+ Date: $Date: 2009/04/30 14:31:31 $
+ Version: $Revision: 1.43 $
=========================================================================*/
/* ---------------------------------------------------------------------
//=========================================================================
//=========================================================================
- void BlackBox::Deleter::Delete(Object* p)
+ int BlackBox::Deleter::Delete(Object* p)
{
BlackBox* b = dynamic_cast<BlackBox*>(p);
if (!b)
BlackBoxDescriptor::WeakPointer desc = b->bbGetDescriptor();
bbtkDebugMessage("object",2,"##> BlackBox::Deleter(\""<<name<<"\") : deleting black box"<<std::endl);
- b->bbDelete();
+ int refs = b->bbDelete();
bbtkDebugMessage("object",2,"##> BlackBox::Deleter(\""<<name<<"\") : releasing descriptor"<<std::endl);
bbtkDebugMessage("object",2,"##> BlackBox::Deleter(\""<<name<<"\") : descriptor expired : nothing to do (was not held by a package or the box is a complex black box prototype)"<<std::endl);
}
bbtkDebugMessage("object",2,"<## BlackBox::Deleter(\""<<name<<"\")"<<std::endl);
+ return refs;
}
//=========================================================================
BlackBox::BlackBox(const std::string &name)
:
// bbmStatus(MODIFIED),
+ bbmConstructed(false),
bbmExecuting(false),
bbmName(name),
bbmBoxProcessMode("Pipeline"),
BlackBox::BlackBox(BlackBox& from, const std::string &name)
:
// bbmStatus(from.bbmStatus),
- bbmExecuting(false),
- bbmName(name),
- bbmBoxProcessMode(from.bbmBoxProcessMode),
- bbmParent()
-
+ bbmConstructed(false),
+ bbmExecuting(false),
+ bbmName(name),
+ bbmBoxProcessMode(from.bbmBoxProcessMode),
+ bbmParent()
+
{
bbtkDebugMessage("object",4,"==> BlackBox::BlackBox("
<<from.bbGetFullName()<<",\""
" -> already executing : abort"<<std::endl);
return;
}
+
+ // If not constructed do it
+ if (!bbmConstructed)
+ {
+ this->bbConstructor();
+ bbmConstructed = true;
+ }
+
bbSetExecuting(true);
bool wasExecuting = bbGlobalGetSomeBoxExecuting();