X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=kernel%2Fsrc%2FbbtkExecuter.cxx;h=ee60d2e992e98ea035c9615581be167c7e39777b;hb=d7a6d341e2d11c175351212f0bf4812784dc57e5;hp=3c7b04cf704b7f803921ee9dcfc8be9e693718b0;hpb=6c5d7746e8e4cb0b5d6e164b917008a7137910fb;p=bbtk.git diff --git a/kernel/src/bbtkExecuter.cxx b/kernel/src/bbtkExecuter.cxx index 3c7b04c..ee60d2e 100644 --- a/kernel/src/bbtkExecuter.cxx +++ b/kernel/src/bbtkExecuter.cxx @@ -3,8 +3,8 @@ Program: bbtk Module: $RCSfile: bbtkExecuter.cxx,v $ $ Language: C++ - Date: $Date: 2008/04/08 06:59:30 $ - Version: $Revision: 1.16 $ + Date: $Date: 2008/04/22 06:59:31 $ + Version: $Revision: 1.19 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -36,18 +36,31 @@ namespace bbtk { + //======================================================================= + Executer::Pointer Executer::New() + { + bbtkDebugMessage("Kernel",9,"Executer::New()"<SetExecuter(this); + mFactory = Factory::New(); + // The smart pointer on this is not made yet (is made by New) + // -> create it to pass it to the factory + // We have to "lock" the smart pointer because the factory + // only keeps a weak pointer on the executer + // -> this would auto-destroy !! + mFactory->SetExecuter(MakePointer(this,true)); Reset(); bbtkDebugDecTab("Kernel",9); } @@ -56,18 +69,11 @@ namespace bbtk //======================================================================= Executer::~Executer() { - bbtkDebugMessageInc("Kernel",9,"Executer::~Executer()" <UnRegisterBlackBox("workspace"); - delete mRootCBB; - } - if (mRootPackage) - { - GetFactory()->UnLoadPackage("user"); - } - delete mFactory; - + bbtkDebugMessageInc("Kernel",9,"==> Executer::~Executer()" <Reset(); + mFactory.reset(); bbtkDebugDecTab("Kernel",9); } //======================================================================= @@ -93,40 +99,38 @@ namespace bbtk { bbtkDebugMessageInc("Kernel",9,"Executer::Reset()" <UnRegisterBlackBox(mRootCBB->GetTypeName()); - delete mRootCBB; - } - if (mRootPackage) - { - GetFactory()->UnLoadPackage("user"); - } + GetFactory()->CheckPackages(); + + mOpenDefinition.clear(); + mOpenPackage.clear(); GetFactory()->Reset(); // Create user package - mRootPackage = new Package("user","internal to bbi", - "User defined black boxes", - "", - BBTK_STRINGIFY_SYMBOL(BBTK_VERSION)); - // Create user workspace - mRootCBB = new ComplexBlackBoxDescriptor("workspace"); //,f); - mRootCBB->SetFactory(GetFactory()); - mRootCBB->AddToAuthor("bbi (internal)"); - mRootCBB->AddToDescription("User's workspace"); - mOpenDefinition.push_back(CBBDefinition(mRootCBB,"user")); - // Register it into the user package - mRootPackage->RegisterBlackBox(mRootCBB); + Package::Pointer p = + Package::New("user","internal to bbi", + "User defined black boxes", + "", + BBTK_STRINGIFY_SYMBOL(BBTK_VERSION)); // Insert the user package in the factory - GetFactory()->InsertPackage(mRootPackage); + GetFactory()->InsertPackage(p); // And in the list of open packages - mOpenPackage.push_back(mRootPackage); + mOpenPackage.push_back(p); + mRootPackage = p; + + // Create user workspace + ComplexBlackBoxDescriptor::Pointer r = + ComplexBlackBoxDescriptor::New("workspace"); + // mRootCBB->Reference(); + r->SetFactory(GetFactory()); + r->AddToAuthor("bbi (internal)"); + r->AddToDescription("User's workspace"); + mOpenDefinition.push_back(CBBDefinition(r,"user")); + // Register it into the user package + p->RegisterBlackBox(r); + mRootCBB = r; + + // Object::PrintObjectListInfo(); + // GetFactory()->CheckPackages(); bbtkDebugDecTab("Kernel",9); } @@ -136,7 +140,7 @@ namespace bbtk /// changes the workspace name void Executer::SetWorkspaceName( const std::string& n ) { - mRootPackage->ChangeBlackBoxName( mRootCBB->GetTypeName(), n ); + GetUserPackage()->ChangeBlackBoxName( GetWorkspace()->GetTypeName(), n ); } //======================================================================= @@ -145,19 +149,19 @@ namespace bbtk { bbtkDebugMessageInc("Kernel",9,"Executer::BeginPackage(\""<GetPackage(name); } catch (Exception e) { - p = new Package(name, + p = Package::New(name, "", "", "", BBTK_STRINGIFY_SYMBOL(BBTK_VERSION)); - GetFactory()->InsertPackage(p); + GetFactory()->InsertPackage(p); } mOpenPackage.push_back(p); } @@ -179,7 +183,8 @@ namespace bbtk ","<SetFactory(GetFactory()); b->SetScriptFileName(scriptfilename); mOpenDefinition.push_back( CBBDefinition( b, pack ) ); @@ -204,7 +209,7 @@ namespace bbtk <GetTypeName()<<"\")" <0) { @@ -214,17 +219,17 @@ namespace bbtk } catch (Exception e) { - p = new Package(pname, - "", - "", - "", - BBTK_STRINGIFY_SYMBOL(BBTK_VERSION)); + p = Package::New(pname, + "", + "", + "", + BBTK_STRINGIFY_SYMBOL(BBTK_VERSION)); GetFactory()->InsertPackage(p); } } else { - p = mOpenPackage.back(); + p = mOpenPackage.back().lock(); } p->RegisterBlackBox(Current()); @@ -245,21 +250,21 @@ namespace bbtk Current()->AddToCategory("adaptor"); Current()->SetKind(bbtk::BlackBoxDescriptor::DEFAULT_ADAPTOR); } - if (kind=="WIDGET_ADAPTOR") + if (kind=="GUI") { - Current()->AddToCategory("adaptor"); - Current()->SetKind(bbtk::BlackBoxDescriptor::WIDGET_ADAPTOR); + Current()->AddToCategory("gui"); + Current()->SetKind(bbtk::BlackBoxDescriptor::GUI); } - else if (kind=="DEFAULT_WIDGET_ADAPTOR") + else if (kind=="DEFAULT_GUI") { - Current()->AddToCategory("adaptor"); - Current()->SetKind(bbtk::BlackBoxDescriptor::DEFAULT_WIDGET_ADAPTOR); + Current()->AddToCategory("gui"); + Current()->SetKind(bbtk::BlackBoxDescriptor::DEFAULT_GUI); } else { bbtkError("Unknown box kind : '"<Remove(boxName,true); } //======================================================================= @@ -293,7 +298,7 @@ namespace bbtk void Executer::Execute (const std::string &nodeName) { // if in root - if (Current()==mRootCBB) + if (Current()==GetWorkspace()) { if (!mNoExecMode) { @@ -314,7 +319,7 @@ namespace bbtk const std::string& help) { // If the input is defined in the Root box - if (Current()==mRootCBB) + if (Current()==GetWorkspace()) { // If the dialog mode is set to NoDialog // and the user passed the name in the Inputs map @@ -376,12 +381,12 @@ namespace bbtk const std::string &input, const std::string &value) { - BlackBox* b = Current()->GetPrototype()->bbGetBlackBox(box); + BlackBox::Pointer b = Current()->GetPrototype()->bbGetBlackBox(box); // Looks for the adaptor if ( b->bbGetInputType(input) != typeid(std::string) ) { - BlackBox* a = + BlackBox::Pointer a = GetFactory()->NewAdaptor(typeid(std::string), b->bbGetInputType(input), "tmp"); @@ -395,7 +400,7 @@ namespace bbtk a->bbSetInput("In",v); a->bbExecute(); b->bbSetInput(input,a->bbGetOutput("Out")); - a->bbDelete(); + // a->Delete(); } else { @@ -409,11 +414,11 @@ namespace bbtk std::string Executer::Get(const std::string &box, const std::string &output) { - BlackBox* b = Current()->GetPrototype()->bbGetBlackBox(box); + BlackBox::Pointer b = Current()->GetPrototype()->bbGetBlackBox(box); // Looks for the adaptor if (b->bbGetOutputType(output) != typeid(std::string)) { - BlackBox* a = + BlackBox::Pointer a = GetFactory()->NewAdaptor( b->bbGetOutputType(output), typeid(std::string), @@ -434,7 +439,7 @@ namespace bbtk // << std::endl; //std::string v(value); //b->bbSetInput(input,a->bbGetOutput("Out")); - a->bbDelete(); + // a->bbDelete(); return r; } else @@ -452,21 +457,21 @@ namespace bbtk //======================================================================= void Executer::Author(const std::string &authorName) { - Current()->AddToAuthor(authorName,Current()==mRootCBB); + Current()->AddToAuthor(authorName,Current()==GetWorkspace()); } //======================================================================= //======================================================================= void Executer::Category(const std::string &category) { - Current()->AddToCategory(category,Current()==mRootCBB); + Current()->AddToCategory(category,Current()==GetWorkspace()); } //======================================================================= //======================================================================= void Executer::Description(const std::string &d) { - Current()->AddToDescription(d,Current()==mRootCBB); + Current()->AddToDescription(d,Current()==GetWorkspace()); } //======================================================================= @@ -520,14 +525,14 @@ namespace bbtk relative_link = false; } - Package* p; + Package::Pointer p; try { p = GetFactory()->GetPackage(nameblackbox); } catch (Exception e) { - p = mRootPackage; + p = GetUserPackage(); } // Generating documentation-help of workspace p->SetDocURL(filename_rootHtml); @@ -557,10 +562,10 @@ namespace bbtk bool system_display) { - BlackBox* blackbox=NULL; + BlackBox::Pointer blackbox; if (nameblackbox==".") { - blackbox=Current()->GetPrototype(); + blackbox = Current()->GetPrototype(); } else { @@ -632,7 +637,7 @@ namespace bbtk int detail = atoi(detailStr.c_str()); int level = atoi(levelStr.c_str()); - BlackBox* blackbox=NULL; + BlackBox::Pointer blackbox; if (nameblackbox.compare(".")==0) { blackbox=Current()->GetPrototype(); @@ -676,8 +681,8 @@ namespace bbtk /// void Executer::Print(const std::string &str) { - if (GetNoExecMode() && (Current()==mRootCBB) ) return; - if (Current()!=mRootCBB) return; + if (GetNoExecMode() && (Current()==GetWorkspace()) ) return; + if (Current()!=GetWorkspace()) return; bbtkDebugMessageInc("Interpreter",9,"Interpreter::Print(\""<GetObjectRecursiveSize(); + return s; + } + //========================================================================== }//namespace