X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=kernel%2Fsrc%2FbbtkPackage.cxx;h=50c98ba856647e6d0e446d2010aa2a0cab752505;hb=ca35bb0588533c9eac29b7d3ef8689c97ccfcfe7;hp=921682c743a9922525d81940f17aab36241d43e9;hpb=ab0cfcfdd031ff179ed1550874c648a54d8e1023;p=bbtk.git diff --git a/kernel/src/bbtkPackage.cxx b/kernel/src/bbtkPackage.cxx index 921682c..50c98ba 100644 --- a/kernel/src/bbtkPackage.cxx +++ b/kernel/src/bbtkPackage.cxx @@ -3,8 +3,8 @@ Program: bbtk Module: $RCSfile: bbtkPackage.cxx,v $ Language: C++ - Date: $Date: 2009/04/21 14:36:51 $ - Version: $Revision: 1.25 $ + Date: $Date: 2010/01/14 13:17:27 $ + Version: $Revision: 1.33 $ =========================================================================*/ /* --------------------------------------------------------------------- @@ -34,6 +34,7 @@ *\brief Class bbtk::Package : registers black boxes descriptors and is able to create instances of the black boxes registered. */ #include "bbtkPackage.h" +#include "bbtkComplexBlackBoxDescriptor.h" #include "bbtkMessageManager.h" #include "bbtkConfigurationFile.h" #include @@ -77,7 +78,7 @@ namespace bbtk mDescription(description), mVersion(version) { - bbtkDebugMessage("object",2,"==> Package::Package('"< Package('"< Package::~Package(\""< ~Package(\""<GetName(); - + bbtkDebugMessage("package",5,"--- Releasing descriptor '" <GetBlackBoxMap().find(descname); - if (desc == pack.lock()->GetBlackBoxMap().end()) + + + Package::DescriptorMapType::iterator desc = + pack.lock()->GetDescriptorMap().find(descname); + if (desc == pack.lock()->GetDescriptorMap().end()) { bbtkDebugMessage("package",5, " Descriptor has already been released" - <second; @@ -148,21 +148,18 @@ namespace bbtk if (pack.expired()) { bbtkDebugMessage("package",2, - " ... and caused its package death" + " ... and caused its package death" <GetBlackBoxMap().find(descname); - if (desc != pack.lock()->GetBlackBoxMap().end()) - pack.lock()->GetBlackBoxMap().erase(desc); - } - else - { - bbtkDebugMessage("package",5," ... Descriptor still alive (" - <GetBlackBoxMap()[descname] = pdesc.lock(); - } + } // pack.expired + desc = pack.lock()->GetDescriptorMap().find(descname); + if (desc != pack.lock()->GetDescriptorMap().end()) pack.lock()->GetDescriptorMap().erase(desc); + } else { //pdesc.expired + bbtkDebugMessage("package",5," ... Descriptor still alive (" + <GetDescriptorMap()[descname] = pdesc.lock(); + } // pdesc.expired } //========================================================================== @@ -176,7 +173,7 @@ namespace bbtk packname<<"')"<mDynamicLibraryHandler ? 1:0; - long ndesc = pack.lock()->GetBlackBoxMap().size(); + long ndesc = pack.lock()->GetDescriptorMap().size(); long nrefs = pack.use_count(); bbtkDebugMessage("package",5," "< descnamelist; - BlackBoxMapType::iterator i; - for (i=pack.lock()->mBlackBoxMap.begin(); - i!= pack.lock()->mBlackBoxMap.end(); + DescriptorMapType::iterator i; + for (i=pack.lock()->mDescriptorMap.begin(); + i!= pack.lock()->mDescriptorMap.end(); ++i) descnamelist.push_back(i->first); @@ -230,19 +227,24 @@ namespace bbtk <<"') : package expired during release : bailing out"<mDescriptorMap[*descname]; + if ( (dyn==0) || (boost::dynamic_pointer_cast(desc)) ) + { + PackageReleaseBlackBoxDescriptorInternal(pack,*descname); + } +#else + PackageReleaseBlackBoxDescriptorInternal(pack,*descname); +#endif + } // UnLoadDynamicLibrary(pack); // Unload orphan dl packages Package::UnLoadReleasedDynamicallyLoadedPackages(); - - - } #ifdef BBTK_COMPILE_DEBUG_MESSAGES @@ -253,7 +255,7 @@ namespace bbtk if (!pack.expired()) { long dyn = pack.lock()->mDynamicLibraryHandler ? 1:0; - long ndesc = pack.lock()->GetBlackBoxMap().size(); + long ndesc = pack.lock()->GetDescriptorMap().size(); long nrefs = pack.use_count(); bbtkDebugMessage("package",1," ... Package still alive (" @@ -286,7 +288,7 @@ namespace bbtk <mDynamicLibraryHandler ? 1:0; - long ndesc = pack.lock()->GetBlackBoxMap().size(); + long ndesc = pack.lock()->GetDescriptorMap().size(); long nrefs = pack.use_count(); bbtkDebugMessage("package",5," "<mDynamicLibraryHandler ? 1:0; - long ndesc = pack.lock()->GetBlackBoxMap().size(); + long ndesc = pack.lock()->GetDescriptorMap().size(); long nrefs = pack.use_count(); bbtkDebugMessage("package",3," ... Package still alive (" @@ -353,8 +361,9 @@ namespace bbtk // Open shared lib void *handler; - handler = dlopen(libname.c_str(), - BBTK_RTLD_TIME | BBTK_RTLD_SCOPE ); + handler = dlopen(libname.c_str(), BBTK_RTLD_TIME | BBTK_RTLD_SCOPE ); +//EED handler = dlopen(libname.c_str(), RTLD_LAZY | RTLD_LOCAL ); + if (!handler) { bbtkMessage("package",2, @@ -572,7 +581,7 @@ namespace bbtk <GetBlackBoxMap().empty()) + if (!pack.lock()->GetDescriptorMap().empty()) { bbtkDebugMessage("package",5," Package not empty ... abort" @@ -580,7 +589,7 @@ namespace bbtk return; /* bbtkGlobalError("Package::UnLoadDynamicLibrary('"<::NewBlackBox(\""<::NewBlackBox(\""<second->NewBlackBox(name); - bbtkDebugDecTab("Kernel",8); + bbtkDebugDecTab("kernel",8); return bb; } @@ -695,7 +710,7 @@ namespace bbtk const DataInfo& typeout, const std::string& name) const { - bbtkDebugMessageInc("Kernel",8,"Package<"<::NewAdaptor(" <second.lock()->NewBlackBox(name); - bbtkDebugDecTab("Kernel",8); + bbtkDebugDecTab("kernel",8); return bb; } @@ -723,7 +738,7 @@ namespace bbtk const DataInfo& typeout, const std::string& name) const { - bbtkDebugMessageInc("Kernel",8,"Package<"<::NewWidgetAdaptor(" <second.lock()->NewBlackBox(name); - bbtkDebugDecTab("Kernel",8); + bbtkDebugDecTab("kernel",8); return bb; } @@ -755,7 +770,7 @@ namespace bbtk const DataInfo& typeout, std::string& adaptor) const { - bbtkDebugMessageInc("Kernel",8,"Package<"<::FindWidgetAdaptor(" <second.lock()->GetTypeName(); - bbtkDebugDecTab("Kernel",8); + bbtkDebugDecTab("kernel",8); return true; } @@ -789,7 +804,7 @@ namespace bbtk const DataInfo& typeout, std::string& adaptor) const { - bbtkDebugMessageInc("Kernel",8,"Package<"<::FindAdaptor(" <second.lock()->GetTypeName(); - bbtkDebugDecTab("Kernel",8); + bbtkDebugDecTab("kernel",8); return true; } @@ -812,26 +827,26 @@ namespace bbtk //========================================================================== /// Registers a black box descriptor in the package - bool Package::RegisterBlackBox(BlackBoxDescriptor::Pointer d) + bool Package::Register(BlackBoxDescriptor::Pointer d) { - bbtkDebugMessageInc("Kernel",8,"Package<"<::RegisterBlackBox(\""<GetTypeName()<<"\")"<::Register(\""<GetTypeName()<<"\")"<GetTypeName()); - if (i!=mBlackBoxMap.end()) + DescriptorMapType::iterator i = mDescriptorMap.find(d->GetTypeName()); + if (i!=mDescriptorMap.end()) { bbtkWarning("Package<"< : Trying to register box type <" <GetTypeName()<<"> which is already in the package"); return false; } - mBlackBoxMap[d->GetTypeName()] = d; + mDescriptorMap[d->GetTypeName()] = d; // d->Reference(); d->SetPackage(GetThisPointer()); // If it is a default adaptor, also register it in the adaptors map if ( d->GetKind() == BlackBoxDescriptor::DEFAULT_ADAPTOR ) { - bbtkDebugMessage("Kernel",8,"Package<"<::RegisterBlackBox(\""<GetTypeName()<<"\") : The box is an adaptor, inserting it in adaptors map ..."<::Register(\""<GetTypeName()<<"\") : The box is an adaptor, inserting it in adaptors map ..."<GetInputDescriptor("In")->GetTypeInfo(); TypeInfo typeout = d->GetOutputDescriptor("Out")->GetTypeInfo(); @@ -861,7 +876,7 @@ namespace bbtk // If it is a default adaptor, also register it in the adaptors map else if ( d->GetKind() == BlackBoxDescriptor::DEFAULT_GUI) { - bbtkDebugMessage("Kernel",8,"Package<"<::RegisterBlackBox(\""<GetTypeName()<<"\") : The box is a widget adaptor, inserting it in adaptors map ..."<::Register(\""<GetTypeName()<<"\") : The box is a widget adaptor, inserting it in adaptors map ..."<GetOutputDescriptor("Out")->GetTypeInfo(); DataInfo infoin(typeid(void),""); @@ -889,20 +904,20 @@ namespace bbtk } - bbtkDebugDecTab("Kernel",8); + bbtkDebugDecTab("kernel",8); return true; } //========================================================================== //=================================================================== - void Package::CheckBoxes() const + void Package::Check() const { bbtkMessage("debug",1,"****** Checking Package "<<(void*)this <<" ["<second->Check(true); @@ -915,39 +930,40 @@ namespace bbtk //========================================================================== /// Changes the name of a black box type - void Package::ChangeBlackBoxName( const std::string& oldname, const std::string& newname ) + void Package::ChangeDescriptorName( const std::string& oldname, const std::string& newname ) { - bbtkDebugMessageInc("Kernel",8,"Package<"<::ChangeBlackBoxName(\""<::ChangeDescriptorName(\""< does not contains the black box <"<"); + bbtkDebugDecTab("kernel",8); + bbtkError("ChangeDescriptorName : The package <"< does not contains the black box <"<"); } i->second->SetTypeName(newname); - mBlackBoxMap[newname] = i->second; - mBlackBoxMap.erase(i); + mDescriptorMap[newname] = i->second; + mDescriptorMap.erase(i); - bbtkDebugDecTab("Kernel",8); + bbtkDebugDecTab("kernel",8); } //========================================================================== //========================================================================== - /// Displays the list of black boxes of the package - void Package::PrintBlackBoxes(bool description, bool adaptors) const + void Package::PrintHelpListDescriptors(bool description, bool adaptors) const { unsigned int lmax = 0; std::vector names; std::vector kinds; std::vector descrs; - BlackBoxMapType::const_iterator i; - for (i=mBlackBoxMap.begin(); - i!=mBlackBoxMap.end(); + DescriptorMapType::const_iterator i; + for (i=mDescriptorMap.begin(); + i!=mDescriptorMap.end(); ++i) { if ( adaptors || @@ -991,15 +1007,15 @@ namespace bbtk { std::string space; space.append(lmax - ni->size() - ci->size(),' '); - bbtkMessage("Help",1,*ni << space << *ci ); + bbtkMessage("help",1,*ni << space << *ci ); std::string d(*di); unsigned int dmax = 75 - lmax; // while (d.size() > dmax ) // { if (d.size()>dmax) - bbtkMessage("Help",1,d.substr(0,dmax) << "..." << std::endl); + bbtkMessage("help",1,d.substr(0,dmax) << "..." << std::endl); else - bbtkMessage("Help",1,d << std::endl); + bbtkMessage("help",1,d << std::endl); // d = d.substr(dmax,d.size()); // } } @@ -1009,30 +1025,30 @@ namespace bbtk //========================================================================== /// Displays the list of adaptors of the package - void Package::PrintAdaptors(bool description) const + void Package::PrintHelpListAdaptors(bool description) const { - BlackBoxMapType::const_iterator i; - for (i=mBlackBoxMap.begin(); - i!=mBlackBoxMap.end(); + DescriptorMapType::const_iterator i; + for (i=mDescriptorMap.begin(); + i!=mDescriptorMap.end(); ++i) { if ( i->second->GetKind() != BlackBoxDescriptor::STANDARD ) { - bbtkMessage("Help",1, + bbtkMessage("help",1, " "<second->GetTypeName()); if ( i->second->GetKind() == BlackBoxDescriptor::DEFAULT_ADAPTOR ) { - bbtkMessage("Help",1, + bbtkMessage("help",1, " [default]"); } if (description) { - bbtkMessage("Help",1, + bbtkMessage("help",1, " : "<second->GetDescription()); } - bbtkMessage("Help",1,std::endl); + bbtkMessage("help",1,std::endl); } } /* @@ -1041,36 +1057,37 @@ namespace bbtk i!=mAdaptorMap.end(); ++i) { - bbtkMessage("Help",1, + bbtkMessage("help",1, " "<second->GetTypeName()); if (detail_level>0) { - bbtkMessage("Help",1, + bbtkMessage("help",1, " : "<second->GetDescription()); } - bbtkMessage("Help",1,std::endl); + bbtkMessage("help",1,std::endl); } */ } //========================================================================== //========================================================================== - /// Prints help on a black box - void Package::HelpBlackBox(const std::string& name, bool full) const + /// Prints help on a black box descriptor + void Package::PrintHelpDescriptor(const std::string& name, bool full) const { - bbtkDebugMessageInc("Kernel",8,"Package<"<::HelpBlackBox(\"" + bbtkDebugMessageInc("kernel",8,"Package<"<::PrintHelpDescriptor(\"" < does not contains the black box <"<"); } - // bbtkMessage("Help",1,"["<second->GetHelp(full); - bbtkDebugDecTab("Kernel",8); + bbtkDebugDecTab("kernel",8); } //========================================================================== @@ -1078,18 +1095,19 @@ namespace bbtk //========================================================================== /// Returns true iff the package contains the box of name boxname - bool Package::ContainsBlackBox(const std::string& name) const + bool Package::ContainsDescriptor(const std::string& name) const { - bbtkDebugMessageInc("Kernel",8,"Package<"<::HelpBlackBox(\"" + bbtkDebugMessageInc("kernel",8,"Package<"<::ContainsDescriptor(\"" <::CreateHtmlPage(\"" + bbtkDebugMessageInc("kernel",9,"Package<"<::CreateHtmlPage(\"" <\n"; s << "\n"; } - +//std::cout<<"JCP bbtkPackage.cxx void Package::CreateHtmlPage() ln 1225"<\n"; - BlackBoxMapType::const_iterator i; - for (i=mBlackBoxMap.begin(); i!=mBlackBoxMap.end(); ++i) - { - if ( i->second->GetKind() != BlackBoxDescriptor::STANDARD) - continue; + DescriptorMapType::const_iterator i; +//std::cout<<"JCP bbtkPackage.cxx void Package::CreateHtmlPage() ln 1236"<second->GetKind() != BlackBoxDescriptor::STANDARD) + continue; - std::string name = i->second->GetTypeName(); - Utilities::html_format(name); - std::string descr = i->second->GetDescription(); - //Utilities::html_format(descr); - - s << ""; - s << " "; - s << " "; - s << "\n"; - } - s << "
"; - s << "   " - <"; - s << "" << descr << "
\n"; - + std::string name = i->second->GetTypeName(); + Utilities::html_format(name); + std::string descr = i->second->GetDescription(); + //Utilities::html_format(descr); +//std::cout<<"JCP bbtkPackage.cxx void Package::CreateHtmlPage() ln 1246"<"; + s << ""; + s << "   " + <"; + s << " "; + s << " " << descr << " "; + s << "\n"; + } + s << "\n"; + + + s << "\n"; + s << "\n"; - s << "\n"; - s << "\n"; - - //------------------- - // Adaptors list - if (mAdaptorMap.size()>0) - { - // s << "
\n"; - s << "

Adaptors : \n"; - s << "

    \n"; - - // BlackBoxMapType::const_iterator i; - s << "

    \n"; - for (i=mBlackBoxMap.begin(); i!=mBlackBoxMap.end();++i) - { - if ( i->second->GetKind() == BlackBoxDescriptor::STANDARD) - continue; - - std::string name = i->second->GetTypeName(); - Utilities::html_format(name); - std::string descr = i->second->GetDescription(); + //------------------- + // Adaptors list + if (mAdaptorMap.size()>0) + { + // s << "
    \n"; + s << "

    Adaptors : \n"; + s << "

      \n"; +//std::cout<<"JCP bbtkPackage.cxx void Package::CreateHtmlPage() ln 1268"<
    \n"; + for (i=mDescriptorMap.begin(); i!=mDescriptorMap.end();++i) + { + if ( i->second->GetKind() == BlackBoxDescriptor::STANDARD) + continue; - s << ""; - s << " "; - s << " "; - s << "\n"; - } - s << "
    "; - s << "   " - <"; - s << "" << descr << "
    \n"; - - s << "

\n"; - s << "
\n"; - } + std::string name = i->second->GetTypeName(); + Utilities::html_format(name); + std::string descr = i->second->GetDescription(); + + s << ""; + s << ""; + s << "   
" + <"; + s << " "; + s << " " << descr << " "; + s << "\n"; + } + s << "\n"; + + s << "\n"; + s << "\n"; + } // s << "
\n"; @@ -1286,23 +1306,23 @@ namespace bbtk //------------------- // Computes output directory from filename to pass it to // BlackBoxDescriptor::InsertHtmlHelp - std::string dir; + std::string dir; - std::string::size_type slash_position = filename.find_last_of("/\\"); + std::string::size_type slash_position = filename.find_last_of("/\\"); - if (slash_position != std::string::npos) { - if (slash_position == 0) - slash_position = 1; - dir = filename.substr(0,slash_position); - } + if (slash_position != std::string::npos) { + if (slash_position == 0) + slash_position = 1; + dir = filename.substr(0,slash_position); + } - for (i=mBlackBoxMap.begin(); - i!=mBlackBoxMap.end(); - ++i) - { - i->second->InsertHtmlHelp(s,detail,level,dir,relative_link); - } + for (i=mDescriptorMap.begin(); + i!=mDescriptorMap.end(); + ++i) + { + i->second->InsertHtmlHelp(s,detail,level,dir,relative_link); + } //---------------------- // Footer @@ -1322,7 +1342,7 @@ namespace bbtk //---------------------- // End - bbtkDebugDecTab("Kernel",9); + bbtkDebugDecTab("kernel",9); } //========================================================================== @@ -1337,7 +1357,7 @@ namespace bbtk std::string Package::GetObjectInfo() const { std::stringstream i; - i << " - "<second->GetObjectRecursiveSize(); }