]> Creatis software - bbtk.git/blobdiff - kernel/src/bbtkExecuter.cxx
*** empty log message ***
[bbtk.git] / kernel / src / bbtkExecuter.cxx
index ddda38ace0fc164b55943fbcf67a6a6bb5fb0751..891b6aa6b016ff41b83880d135726d3bc1619346 100644 (file)
@@ -3,8 +3,8 @@
   Program:   bbtk
   Module:    $RCSfile: bbtkExecuter.cxx,v $ $
   Language:  C++
-  Date:      $Date: 2008/01/22 15:02:00 $
-  Version:   $Revision: 1.1 $
+  Date:      $Date: 2008/01/28 15:08:53 $
+  Version:   $Revision: 1.2 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -104,12 +104,12 @@ namespace bbtk
     mRoot = new ComplexBlackBoxDescriptor("workspace"); //,f);
     mRoot->AddToAuthor("bbi (internal)");
     mRoot->AddToDescription("User's workspace");
-    mCurrent.push_back(CBBDefinition(mRoot,"user"));
+    mOpenDefinition.push_back(CBBDefinition(mRoot,"user"));
     // Register it into the user package
     mPackage->RegisterBlackBox(mRoot);
     // Insert the user package in the factory
     InsertPackage(mPackage);
-
+    mOpenPackage.push_back(mPackage);
     bbtkDebugDecTab("Core",9);
   }
   
@@ -119,6 +119,31 @@ namespace bbtk
     mPackage->ChangeBlackBoxName( mRoot->GetTypeName(), n );
   }
   
+  void Executer::BeginPackage (const std::string &name)
+  {
+     bbtkDebugMessageInc("Core",9,"Executer::BeginPackage(\""<<name<<"\")" 
+                        <<std::endl);  
+     Package* p;
+     try 
+      {
+       p = GetGlobalFactory()->GetPackage(name);
+      }
+    catch (Exception e)
+      {
+       p = new Package(name,
+                       "",
+                       "",
+                       "",
+                       BBTK_STRINGIFY_SYMBOL(BBTK_VERSION));
+       InsertPackage(p);
+      }
+     mOpenPackage.push_back(p); 
+  }
+
+  void Executer::EndPackage()
+  {
+    if (mOpenPackage.size()>1) mOpenPackage.pop_back();
+  }
 
   void Executer::Define (const std::string &name,
                         const std::string &pack,
@@ -130,7 +155,7 @@ namespace bbtk
 
     ComplexBlackBoxDescriptor* b = new ComplexBlackBoxDescriptor(name);
     b->SetScriptFileName(scriptfilename);
-    mCurrent.push_back( CBBDefinition( b, pack ) );
+    mOpenDefinition.push_back( CBBDefinition( b, pack ) );
     
     bbtkDebugDecTab("Core",9);
   }
@@ -141,8 +166,11 @@ namespace bbtk
                         <<Current()->GetTypeName()<<"\")" 
                         <<std::endl);
     // Does current package exist ?
-    std::string pname(mCurrent.back().package);
     Package* p;
+
+    std::string pname(mOpenDefinition.back().package);
+    if (pname.size()>0)
+      {
     try 
       {
        p = GetGlobalFactory()->GetPackage(pname);
@@ -156,10 +184,14 @@ namespace bbtk
                        BBTK_STRINGIFY_SYMBOL(BBTK_VERSION));
        InsertPackage(p);
       }
-
+      }
+    else 
+      {
+       p = mOpenPackage.back();
+      }
     p->RegisterBlackBox(Current());
     
-    mCurrent.pop_back();
+    mOpenDefinition.pop_back();
   }