-/*=========================================================================
-
+
+/*=========================================================================
Program: bbtk
Module: $RCSfile: bbtkPackage.cxx,v $
Language: C++
- Date: $Date: 2008/04/22 06:59:31 $
- Version: $Revision: 1.14 $
-
- 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: 2009/01/13 08:45:27 $
+ Version: $Revision: 1.24 $
=========================================================================*/
+
+/* ---------------------------------------------------------------------
+
+* Copyright (c) CREATIS-LRMN (Centre de Recherche en Imagerie Medicale)
+* Authors : Eduardo Davila, Laurent Guigues, Jean-Pierre Roux
+*
+* 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.
+* ------------------------------------------------------------------------ */
+
/**
*\file
*\brief Class bbtk::Package : registers black boxes descriptors and is able to create instances of the black boxes registered.
Package::Pointer Package::New(const std::string& name,
const std::string& author,
const std::string& description,
- const std::string& version,
- const std::string& BBTKVersion)
+ const std::string& version)
{
bbtkDebugMessage("object",1,"##> Package::New('"<<name<<"',...)"
<<bbtkendl);
Package::Pointer p = MakePointer(new Package(name,
author,
description,
- version,
- BBTKVersion));
+ version));
bbtkDebugMessage("object",2,"<## Package::New('"<<name<<"',...)"
<<bbtkendl);
return p;
Package::Package(const std::string& name,
const std::string& author,
const std::string& description,
- const std::string& version,
- const std::string& BBTKVersion)
+ const std::string& version)
:
mDynamicLibraryHandler(0),
mName(name),
const std::string& descname)
{
// Try to release descriptor
- bbtkDebugMessage("package",3,"--- Trying to release descriptor '"
- <<descname<<"'"<<bbtkendl);
std::string packname = pack.lock()->GetName();
+ bbtkDebugMessage("package",5,"--- Releasing descriptor '"
+ <<packname<<"::"<<descname<<"'"<<bbtkendl);
+
+
Package::BlackBoxMapType::iterator desc =
pack.lock()->GetBlackBoxMap().find(descname);
if (desc == pack.lock()->GetBlackBoxMap().end())
{
- bbtkDebugMessage("package",3,
+ bbtkDebugMessage("package",5,
" Descriptor has already been released"
<<bbtkendl);
return;
// if it is dead : remove it
if (pdesc.expired())
{
- bbtkDebugMessage("package",2," '"<<packname<<"::"<<descname<<"' Descriptor expired"<<bbtkendl);
+ bbtkDebugMessage("package",2," ==> '"<<packname<<"::"<<descname<<"' Descriptor expired"<<bbtkendl);
if (pack.expired())
{
bbtkDebugMessage("package",2,
- " ... and caused its package death"
+ " ... and caused its package death"
<<bbtkendl);
return;
}
}
else
{
- bbtkDebugMessage("package",3," ... Descriptor still alive ("
+ bbtkDebugMessage("package",5," ... Descriptor still alive ("
<<pdesc.use_count()<<" refs)"
<<bbtkendl);
pack.lock()->GetBlackBoxMap()[descname] = pdesc.lock();
long ndesc = pack.lock()->GetBlackBoxMap().size();
long nrefs = pack.use_count();
- bbtkDebugMessage("package",2," "<<nrefs<<" refs / "
+ bbtkDebugMessage("package",5," "<<nrefs<<" refs / "
<<ndesc<<" descr / dyn="
<<dyn<<std::endl);
// and descallocated (reset) by PACKAGENAMEDeletePackage())
if (nrefs == ndesc + dyn)
{
- bbtkDebugMessage("package",2,
+ bbtkDebugMessage("package",5,
" -> No more external ref : checking descriptors"
<<bbtkendl);
// We must take care that removing refs on descriptors
// Is package still alive ?
if (pack.expired())
{
- bbtkDebugMessage("package",2,"--- Package::Release('"<<
+ bbtkDebugMessage("package",1,"--- Package::Release('"<<
packname
<<"') : package expired during release : bailing out"<<bbtkendl);
break;
}
- bbtkDebugMessage("package",1,"<== Package::Release('"<<
+#ifdef BBTK_COMPILE_DEBUG_MESSAGES
+
+ bbtkDebugMessage("package",2,"<== Package::Release('"<<
packname<<"')"<<bbtkendl);
+
if (!pack.expired())
{
long dyn = pack.lock()->mDynamicLibraryHandler ? 1:0;
}
else
{
- bbtkDebugMessage("package",1," ... Package has been released"
+ bbtkDebugMessage("package",1," ... Package has been released"
<<std::endl);
}
+#endif
}
//==========================================================================
std::string packname = pack.lock()->mName;
std::string dname = descr.lock()->GetTypeName();
bbtkDebugMessage("package",3,"==> Package::ReleaseBlackBoxDescriptor('"<<
- packname<<"','"<<dname<<"')"<<bbtkendl);
+ packname<<"','"<<dname<<"') : refs="
+ <<descr.use_count()<<bbtkendl);
long dyn = pack.lock()->mDynamicLibraryHandler ? 1:0;
long ndesc = pack.lock()->GetBlackBoxMap().size();
long nrefs = pack.use_count();
- bbtkDebugMessage("package",3," "<<nrefs<<" refs / "
+ bbtkDebugMessage("package",5," "<<nrefs<<" refs / "
<<ndesc<<" descr / dynamically loaded = "
<<dyn<<std::endl);
// then put it in the static list mReleasedDynamicallyLoadedPackages
UnLoadDynamicLibrary(pack,false);
- bbtkDebugMessage("package",3,"<== Package::ReleaseBlackBoxDescriptor('"<<
- packname<<"','"<<dname<<"')"<<bbtkendl);
+ bbtkDebugMessage("package",4,"<== Package::ReleaseBlackBoxDescriptor('"<<
+ packname<<"','"<<dname<<"'): refs="
+ <<descr.use_count()<<bbtkendl);
/*
if (!pack.expired())
{
bbtkMessage("package",2,
"Could not open shared library [" <<libname<<"]"
<< std::endl);
+ DWORD dwErrorCode = 0;
+ dwErrorCode = GetLastError();
+ bbtkMessage("package",2,
+ "Windows Error: [" << dwErrorCode <<"]"
+ << std::endl);
+
return 0;
}
getvername +=
BBTK_STRINGIFY_SYMBOL(BBTK_GET_PACKAGE_BBTK_VERSION_FUNCTION_NAME);
DLGetPackageBBTKVersionFunction getbbtkversion
- = (DLGetPackageBBTKVersionFunction)(GetProcAdress(handler,
+ = (DLGetPackageBBTKVersionFunction)(GetProcAddress(handler,
getvername.c_str()));
if (!getbbtkversion)
{
// Loads the Package get function
std::string getpackname(package_name);
getpackname += BBTK_STRINGIFY_SYMBOL(BBTK_GET_PACKAGE_FUNCTION_NAME);
- getpack = (DLGetPackageFunction)(GetProcAdress(handler, getpackname.c_str()));
+ getpack = (DLGetPackageFunction)(GetProcAddress(handler, getpackname.c_str()));
if (!getpack)
{
FreeLibrary(handler);
// Loads the Package delete function
std::string delpackname(package_name);
delpackname += BBTK_STRINGIFY_SYMBOL(BBTK_DEL_PACKAGE_FUNCTION_NAME);
- delpack = (DLDeletePackageFunction)(GetProcAdress(handler, delpackname.c_str()));
+ delpack = (DLDeletePackageFunction)(GetProcAddress(handler, delpackname.c_str()));
if (!delpack)
{
FreeLibrary(handler);
p->SetDocURL(doc);
p->SetDocRelativeURL(reldoc);
- bbtkDebugMessage("package",1,"<== Package::CreateFromDynamicLibrary("
+ bbtkDebugMessage("package",2,"<== Package::CreateFromDynamicLibrary("
<<libname<<") .. OK"<<std::endl);
return p;
}
std::string packname = pack.lock()->GetName();
- bbtkDebugMessage("package",3,"==> Package::UnLoadDynamicLibrary('"
+ bbtkDebugMessage("package",5,"==> Package::UnLoadDynamicLibrary('"
<<packname<<"')"
<<std::endl);
if (!pack.lock()->GetBlackBoxMap().empty())
{
- bbtkDebugMessage("package",3," Package not empty ... abort"
+ bbtkDebugMessage("package",5," Package not empty ... abort"
<<std::endl);
return;
/*
if (doit)
{
UnLoad(pack);
- bbtkDebugMessage("package",3," ... dynamic library closed"
+ bbtkDebugMessage("package",5,"==> dynamic library for package '"
+ <<packname<<"' closed"
<<std::endl);
}
else
{
mReleasedDynamicallyLoadedPackages.insert(pack);
- bbtkDebugMessage("package",3,
- " ... package put in the 'to unload' list"
+ bbtkDebugMessage("package",1,"==> package '"<<packname
+ <<"' put in the 'to unload' list"
<<std::endl);
}
- bbtkDebugMessage("package",3,"<== Package::UnLoadDynamicLibrary('"
+ bbtkDebugMessage("package",5,"<== Package::UnLoadDynamicLibrary('"
<<packname<<"')"
<<std::endl);
/// see UnLoadDynamicLibrary and ReleaseBlackBoxDescriptor
void Package::UnLoadReleasedDynamicallyLoadedPackages()
{
- bbtkDebugMessage("package",2,"==> Package::UnLoadReleasedDynamicallyLoadedPackages()"<<std::endl);
+ bbtkDebugMessage("package",5,"==> Package::UnLoadReleasedDynamicallyLoadedPackages()"<<std::endl);
std::set<Package::WeakPointer>::iterator i;
for (i=mReleasedDynamicallyLoadedPackages.begin();
{
if (!i->expired()) UnLoad(*i);
}
- bbtkDebugMessage("package",2,"<== Package::UnLoadReleasedDynamicallyLoadedPackages()"<<std::endl);
+ bbtkDebugMessage("package",5,"<== Package::UnLoadReleasedDynamicallyLoadedPackages()"<<std::endl);
}
//==========================================================================
void Package::UnLoad(Package::WeakPointer pack)
{
std::string packname = pack.lock()->GetName();
- bbtkDebugMessage("package",2,"==> Package::UnLoad("<<packname<<")"<<std::endl);
+ bbtkDebugMessage("package",6,"==> Package::UnLoad("<<packname<<")"<<std::endl);
Package* p = pack.lock().get();
FreeLibrary(h);
#endif
- bbtkDebugMessage("package",2," ... dynamic library unloaded"<<std::endl);
+ bbtkDebugMessage("package",1,"==> dynamic library for package '"
+ <<packname<<"' closed"
+ <<std::endl);
+ bbtkDebugMessage("package",6," ... dynamic library unloaded"<<std::endl);
}
//==========================================================================
//===================================================================
void Package::CheckBoxes() const
{
- bbtkMessage("Debug",1,"****** Checking Package "<<(void*)this
+ bbtkMessage("debug",1,"****** Checking Package "<<(void*)this
<<" ["<<GetName()<<"]"<<std::endl);
BlackBoxMapType::const_iterator i;
for (i=mBlackBoxMap.begin();
{
i->second->Check(true);
}
- bbtkMessage("Debug",1,"****** Checking Package "<<(void*)this
+ bbtkMessage("debug",1,"****** Checking Package "<<(void*)this
<<" ["<<GetName()<<"] ... OK"<<std::endl);
}
//===================================================================
std::string name = i->second->GetTypeName();
Utilities::html_format(name);
std::string descr = i->second->GetDescription();
- Utilities::html_format(descr);
+ //Utilities::html_format(descr);
s << "<TR>";
s << "<TD style='vertical-align: top;'>";