X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=kernel%2Fsrc%2FbbtkPackage.cxx;h=91cdb518372b220f124b1de33af8dc5c22c8912a;hb=12f2166f201f4e5a99c9c7876dadd09da81bfb51;hp=b24272152df64d0fa61b3a7d90c45efe5289823e;hpb=c2a4b1893412e50a3d9abff221938a2d16c4a7cb;p=bbtk.git diff --git a/kernel/src/bbtkPackage.cxx b/kernel/src/bbtkPackage.cxx index b242721..91cdb51 100644 --- a/kernel/src/bbtkPackage.cxx +++ b/kernel/src/bbtkPackage.cxx @@ -1,25 +1,47 @@ -/*========================================================================= - +/* + # --------------------------------------------------------------------- + # + # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image + # pour la SantÈ) + # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton + # Previous Authors : Laurent Guigues, Jean-Pierre Roux + # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil + # + # This software is governed by the CeCILL-B license under French law and + # abiding by the rules of distribution of free software. You can use, + # modify and/ or redistribute the software under the terms of the CeCILL-B + # license as circulated by CEA, CNRS and INRIA at the following URL + # http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html + # or in the file LICENSE.txt. + # + # As a counterpart to the access to the source code and rights to copy, + # modify and redistribute granted by the license, users are provided only + # with a limited warranty and the software's author, the holder of the + # economic rights, and the successive licensors have only limited + # liability. + # + # The fact that you are presently reading this means that you have had + # knowledge of the CeCILL-B license and that you accept its terms. + # ------------------------------------------------------------------------ */ + + + +/*========================================================================= Program: bbtk Module: $RCSfile: bbtkPackage.cxx,v $ Language: C++ - Date: $Date: 2008/04/09 11:16:57 $ - Version: $Revision: 1.12 $ - - Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de - l'Image). All rights reserved. See doc/license.txt or - http://www.creatis.insa-lyon.fr/Public/bbtk/License.html for details. - - This software is distributed WITHOUT ANY WARRANTY; without even - the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - PURPOSE. See the above copyright notices for more information. - + Date: $Date: 2012/11/16 08:49:01 $ + Version: $Revision: 1.37 $ =========================================================================*/ + + + /** *\file *\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 @@ -28,20 +50,45 @@ namespace bbtk { + + + + //========================================================================== + /// Creates a new package + Package::Pointer Package::New(const std::string& name, + const std::string& author, + const std::string& description, + const std::string& version) + { + bbtkDebugMessage("object",1,"##> Package::New('"< Package('"<second->UnReference(); - } - // Adaptors are also stored in the black box map : hence already deleted + bbtkDebugMessage("object",2,"==> ~Package(\""<GetName(); + + bbtkDebugMessage("package",5,"--- Releasing descriptor '" + <GetDescriptorMap().find(descname); + if (desc == pack.lock()->GetDescriptorMap().end()) + { + bbtkDebugMessage("package",5, + " Descriptor has already been released" + <second; + desc->second.reset(); + // if it is dead : remove it + if (pdesc.expired()) + { + bbtkDebugMessage("package",2," ==> '"<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 + } + //========================================================================== + + + //========================================================================== + /// Release + void Package::Release(Package::WeakPointer pack) + { + std::string packname = pack.lock()->mName; + bbtkDebugMessage("package",1,"==> Package::Release('"<< + packname<<"')"<mDynamicLibraryHandler ? 1:0; + long ndesc = pack.lock()->GetDescriptorMap().size(); + long nrefs = pack.use_count(); + + bbtkDebugMessage("package",5," "< No more external ref : checking descriptors" + < descnamelist; + DescriptorMapType::iterator i; + for (i=pack.lock()->mDescriptorMap.begin(); + i!= pack.lock()->mDescriptorMap.end(); + ++i) + descnamelist.push_back(i->first); + + // Iterator over the initial names + std::vector::iterator descname; + for (descname=descnamelist.begin(); + descname!=descnamelist.end(); + ++descname) + { + // Is package still alive ? + if (pack.expired()) + { + bbtkDebugMessage("package",1,"--- Package::Release('"<< + packname + <<"') : 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 + + bbtkDebugMessage("package",2,"<== Package::Release('"<< + packname<<"')"<mDynamicLibraryHandler ? 1:0; + long ndesc = pack.lock()->GetDescriptorMap().size(); + long nrefs = pack.use_count(); + + bbtkDebugMessage("package",1," ... Package still alive (" + <mName; + std::string dname = descr.lock()->GetTypeName(); + bbtkDebugMessage("package",3,"==> Package::ReleaseBlackBoxDescriptor('"<< + packname<<"','"< Package::OpenDynamicLibrary(" + < Package::CreateFromDynamicLibrary(" + <mDynamicLibraryHandler = h; + p->mDLDeletePackageFunction = df; + + std::string separator = + ConfigurationFile::GetInstance().Get_file_separator (); + //BBTK_STRINGIFY_SYMBOL(BBTK_DOC_REL_PATH) + std::string docreldoc = + separator + "bbdoc" + separator + pkgname + separator + "index.html"; + std::string reldoc = + ".." + separator + ".." + docreldoc; + std::string doc = path + separator + ".." + separator + + BBTK_STRINGIFY_SYMBOL(BBTK_DOC_REL_PATH) + + docreldoc; + + p->SetDocURL(doc); + p->SetDocRelativeURL(reldoc); + + bbtkDebugMessage("package",2,"<== Package::CreateFromDynamicLibrary(" + <mDynamicLibraryHandler)) + return; + + std::string packname = pack.lock()->GetName(); + bbtkDebugMessage("package",5,"==> Package::UnLoadDynamicLibrary('" + <GetDescriptorMap().empty()) + { + + bbtkDebugMessage("package",5," Package not empty ... abort" + < dynamic library for package '" + < package '"< Package::UnLoadReleasedDynamicallyLoadedPackages()"<::iterator i; + +//JCP- 21-04-09 + if(mReleasedDynamicallyLoadedPackages.size()>0){ + for (i=mReleasedDynamicallyLoadedPackages.begin(); + i!=mReleasedDynamicallyLoadedPackages.end(); + ++i) + { + if (!i->expired()) UnLoad(*i); + } + } +//JCP- 21-04-09 + bbtkDebugMessage("package",5,"<== Package::UnLoadReleasedDynamicallyLoadedPackages()"<GetName(); + bbtkDebugMessage("package",6,"==> Package::UnLoad("<mDynamicLibraryHandler; + + // deletes the package + p->mDLDeletePackageFunction(); + + // closes the dl handler +#if defined(__GNUC__) + if (dlclose(h)!=0) + { + printf("EED Package::UnLoad ERROR %s\n", packname.c_str() ); + bbtkWarning("Failed to close dynamic library for package '"< dynamic library for package '" + < with name - BlackBox* Package::NewBlackBox(const std::string& type, - const std::string& name) const + BlackBox::Pointer Package::NewBlackBox(const std::string& type, + const std::string& name) const { - bbtkDebugMessageInc("Kernel",8,"Package<"<::NewBlackBox(\""<::NewBlackBox(\""<second->CreateInstance(name); - bbtkDebugDecTab("Kernel",8); + BlackBox::Pointer bb =i->second->NewBlackBox(name); + bbtkDebugDecTab("kernel",8); return bb; } @@ -121,11 +717,11 @@ namespace bbtk //========================================================================== /// Creates an instance of an adaptor of input type and /// output type with name - BlackBox* Package::NewAdaptor(const DataInfo& typein, + BlackBox::Pointer Package::NewAdaptor(const DataInfo& typein, const DataInfo& typeout, const std::string& name) const { - bbtkDebugMessageInc("Kernel",8,"Package<"<::NewAdaptor(" <second->CreateInstance(name); - bbtkDebugDecTab("Kernel",8); + BlackBox::Pointer bb =i->second.lock()->NewBlackBox(name); + bbtkDebugDecTab("kernel",8); return bb; } @@ -149,26 +745,26 @@ namespace bbtk //========================================================================== /// Creates an instance of an adaptor of input type and /// output type with name - BlackBox* Package::NewWidgetAdaptor(const DataInfo& typein, + BlackBox::Pointer Package::NewWidgetAdaptor(const DataInfo& typein, const DataInfo& typeout, const std::string& name) const { - bbtkDebugMessageInc("Kernel",8,"Package<"<::NewWidgetAdaptor(" <second->CreateInstance(name); - bbtkDebugDecTab("Kernel",8); + BlackBox::Pointer bb =i->second.lock()->NewBlackBox(name); + bbtkDebugDecTab("kernel",8); return bb; } @@ -185,22 +781,24 @@ namespace bbtk const DataInfo& typeout, std::string& adaptor) const { - bbtkDebugMessageInc("Kernel",8,"Package<"<::FindWidgetAdaptor(" <second->GetTypeName(); - bbtkDebugDecTab("Kernel",8); + adaptor = i->second.lock()->GetTypeName(); + bbtkDebugDecTab("kernel",8); return true; } @@ -217,7 +815,7 @@ namespace bbtk const DataInfo& typeout, std::string& adaptor) const { - bbtkDebugMessageInc("Kernel",8,"Package<"<::FindAdaptor(" <second->GetTypeName(); - bbtkDebugDecTab("Kernel",8); + adaptor = i->second.lock()->GetTypeName(); + bbtkDebugDecTab("kernel",8); return true; } @@ -240,37 +838,35 @@ namespace bbtk //========================================================================== /// Registers a black box descriptor in the package - bool Package::RegisterBlackBox(BlackBoxDescriptor* 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; - d->Reference(); - d->SetPackage(this); + 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) || - (d->GetKind() == BlackBoxDescriptor::DEFAULT_WIDGET_ADAPTOR) ) + 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(); DataInfo infoin(typein,d->GetInputDescriptor("In")->GetNature()); DataInfo infoout(typeout,d->GetOutputDescriptor("Out")->GetNature()); - bbtkDebugMessage("Kernel",9,"Adaptor "< : trying to register black box <" <GetTypeName() <<"> as default adaptor but there is already a default adaptor registered (<" - <second->GetTypeName()<<">)"); + <second.lock()->GetTypeName()<<">)"); + } + } + } + // If it is a default adaptor, also register it in the adaptors map + else if ( d->GetKind() == BlackBoxDescriptor::DEFAULT_GUI) + { + bbtkDebugMessage("kernel",8,"Package<"<::Register(\""<GetTypeName()<<"\") : The box is a widget adaptor, inserting it in adaptors map ..."<GetOutputDescriptor("Out")->GetTypeInfo(); + DataInfo infoin(typeid(void),""); + DataInfo infoout(typeout,d->GetOutputDescriptor("Out")->GetNature()); + AdaptorKey key(infoin,infoout,d->GetKind()); + + AdaptorMapType::const_iterator i; + i = mAdaptorMap.find(key); + if (i == mAdaptorMap.end()) + { + mAdaptorMap[key] = d; + } + // If already an adaptor registered : error + else + { + if (i->second.lock()->GetTypeName() != d->GetTypeName()) + { + bbtkError("Package <"< : trying to register black box <" + <GetTypeName() + <<"> as default widget adaptor but there is already a default adaptor registered (<" + <second.lock()->GetTypeName()<<">)"); } } } - bbtkDebugDecTab("Kernel",8); + + bbtkDebugDecTab("kernel",8); return true; } //========================================================================== //=================================================================== - void Package::CheckBoxes() const + void Package::Check() const { - bbtkMessage("Debug",1,"****** Checking Package "<<(void*)this + bbtkMessage("debug",1,"****** Checking Package "<<(void*)this <<" ["<second->Check(true); } - bbtkMessage("Debug",1,"****** Checking Package "<<(void*)this + bbtkMessage("debug",1,"****** Checking Package "<<(void*)this <<" ["<::UnRegisterBlackBox(\""< does not contains the black box <"<"); - } - mBlackBoxMap.erase(i); - - // Is it also in the adaptors map ? - /* - AdaptorMapType::iterator j = mAdaptorMap.find(name); - if (j != mAdaptorMap.end()) - { - mAdaptorMap.erase(j); - } - */ - - i->second->UnReference(); - - bbtkDebugDecTab("Kernel",8); - } - //========================================================================== //========================================================================== /// 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); } //========================================================================== - /* - - //========================================================================== - /// Registers an adaptor descriptor in the package - bool Package::RegisterAdaptor(BlackBoxDescriptor* d) - { - bbtkDebugMessage("Kernel",8,"Package<"<::RegisterAdaptor(\""<GetTypeName()<<"\")"<GetInputDescriptor("In")->GetTypeInfo(); - TypeInfo typeout = d->GetOutputDescriptor("Out")->GetTypeInfo(); - AdaptorKey key(typein,typeout); - - mAdaptorMap[key] = d; - return true; - } - //========================================================================== - */ //========================================================================== - /// 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 || @@ -436,15 +1018,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()); // } } @@ -454,30 +1036,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); } } /* @@ -486,36 +1068,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); } //========================================================================== @@ -523,18 +1106,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(\"" < Version : " << GetVersion() << "\n"; s << " bbtk Version : " - << GetBBTKVersion() << "\n"; + << bbtk::GetVersion() << "\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"; - - - s << "\n"; - s << "\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"; - //------------------- - // 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(); - - s << ""; - s << " "; - s << " "; - s << "\n"; - } - s << "
    "; - s << "   " - <"; - s << "" << descr << "
    \n"; - - s << "

\n"; - s << "
\n"; - } + //------------------- + // 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; + + std::string name = i->second->GetTypeName(); + Utilities::html_format(name); + std::string descr = i->second->GetDescription(); + + s << ""; + s << " "; + s << " "; + s << "\n"; + } + s << "
    "; + s << "   " + <"; + s << "" << descr << "
    \n"; + + s << "
\n"; + s << "
\n"; + } // s << "
\n"; @@ -731,23 +1317,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 @@ -767,8 +1353,75 @@ namespace bbtk //---------------------- // End - bbtkDebugDecTab("Kernel",9); + bbtkDebugDecTab("kernel",9); + } + //========================================================================== + + //========================================================================== + std::string Package::GetObjectName() const + { + return std::string("Package '")+mName+std::string("'"); + } + //========================================================================== + + //========================================================================== + std::string Package::GetObjectInfo() const + { + std::stringstream i; + i << " - "<second->GetObjectRecursiveSize(); + } + return s; + } + //========================================================================== + void Package::GetBoxesInside(NodeTreeC& tree, int cont) + { + DescriptorMapType::const_iterator i; + std::cout<<"*********a********"<second->GetBoxesInside(tree, cont); + std::cout<<"*****************"< + Package::mReleasedDynamicallyLoadedPackages; + //========================================================================== + }