]> Creatis software - bbtk.git/blobdiff - kernel/src/bbtkBlackBox.cxx
*** empty log message ***
[bbtk.git] / kernel / src / bbtkBlackBox.cxx
index 9eb65e2c30f97e768a500843947362d000f37475..4aa8d0160fcb3d3b2b867d73b273d3bff7cb9f65 100644 (file)
@@ -2,8 +2,8 @@
   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 $
 =========================================================================*/
 
 /* ---------------------------------------------------------------------
@@ -62,7 +62,7 @@ namespace bbtk
   //=========================================================================
   
   //=========================================================================
-  void BlackBox::Deleter::Delete(Object* p)
+  int BlackBox::Deleter::Delete(Object* p)
   {
     BlackBox* b = dynamic_cast<BlackBox*>(p);
     if (!b)
@@ -78,7 +78,7 @@ namespace bbtk
     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);
     
@@ -99,6 +99,7 @@ namespace bbtk
        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;
   }
   //=========================================================================
 
@@ -106,6 +107,7 @@ namespace bbtk
   BlackBox::BlackBox(const std::string &name) 
     : 
     //    bbmStatus(MODIFIED), 
+    bbmConstructed(false),
     bbmExecuting(false),
     bbmName(name),
     bbmBoxProcessMode("Pipeline"),
@@ -127,11 +129,12 @@ namespace bbtk
   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()<<",\""
@@ -767,6 +770,14 @@ namespace bbtk
                         " -> already executing : abort"<<std::endl);
        return; 
       }
+    
+    // If not constructed do it 
+    if (!bbmConstructed) 
+      {
+       this->bbConstructor();
+       bbmConstructed = true;
+      }
+
 
     bbSetExecuting(true);
     bool wasExecuting = bbGlobalGetSomeBoxExecuting();