X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=kernel%2Fsrc%2FbbtkPackage.h;h=860cbd9bff956c041d3ade1680ff1b87acf5d8f8;hb=5d1ed845326cc292279254b1e8667cdf3c4311fc;hp=9a1c46a9e43b0fa42b8f99246598077d3d1e9c01;hpb=d7e710c3fe8bd9c8c5fb79073bd5667b24c048f8;p=bbtk.git diff --git a/kernel/src/bbtkPackage.h b/kernel/src/bbtkPackage.h index 9a1c46a..860cbd9 100644 --- a/kernel/src/bbtkPackage.h +++ b/kernel/src/bbtkPackage.h @@ -1,32 +1,39 @@ -/*========================================================================= +/* + # --------------------------------------------------------------------- + # + # 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.h,v $ Language: C++ - Date: $Date: 2009/01/13 08:45:27 $ - Version: $Revision: 1.12 $ + Date: $Date: 2012/11/16 08:49:01 $ + Version: $Revision: 1.18 $ =========================================================================*/ -/* --------------------------------------------------------------------- - -* 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 @@ -42,6 +49,8 @@ #include "bbtkBlackBox.h" #include "bbtkDynamicLibraryHandling.h" +#include "bbtkUtilities.h" +#include namespace bbtk { @@ -64,6 +73,14 @@ namespace bbtk const std::string& pkgname, const std::string& path); + void GetBoxesInside(NodeTreeC& tree, int cont); + /// NOTE : All the static methods below for package destruction + /// are not member because they can cause the package death + /// and thus close the dynamic library from which it has been loaded. + /// If the dynamic lib which provides a function is closed while + /// in the function: imagine the crash ! + /// The principal method is Release + /// UnLoads the package dynamic library /// (if any and if the package is released) /// If doit == false then does not do it but just @@ -80,10 +97,16 @@ namespace bbtk /// "Releases" the package /// Signals the package that it can free its descriptors - /// if they are no more used and frees and unloads the package + /// if they are no more used + /// then frees and unloads the package /// if it is no more used (released) /// Note : Any non-weak pointer on the package must have been freed static void Release(Package::WeakPointer p); + + + /// Registers the BlackBoxDescriptor in the Package + bool Register(BlackBoxDescriptor::Pointer); + /// "Releases" a black box descriptor /// Signals the package that it can free the given descriptor /// if it is no more used and frees and put it the the @@ -127,33 +150,44 @@ namespace bbtk /// Returns the version of the package const std::string& GetVersion() const { return mVersion; } - bool ContainsBlackBox(const std::string& boxname) const; + /// Returns true iff the package contains a BlackBoxDescriptor + /// with the name provided + bool ContainsDescriptor(const std::string& name) const; - + /// Creates a new BlackBox of given type with name name BlackBox::Pointer NewBlackBox(const std::string& type, const std::string& name) const; - + + /// Creates a new adaptor BlackBox for the given input and output types + /// with name name BlackBox::Pointer NewAdaptor(const DataInfo& typein, - const DataInfo& typeout, - const std::string& name) const; + const DataInfo& typeout, + const std::string& name) const; + /// Creates a new widget adaptor BlackBox + /// for the given input and output types + /// with name name BlackBox::Pointer NewWidgetAdaptor(const DataInfo& typein, - const DataInfo& typeout, - const std::string& name) const; + const DataInfo& typeout, + const std::string& name) const; bool FindAdaptor(const DataInfo& typein, - const DataInfo& typeout, - std::string& adaptor) const; + const DataInfo& typeout, + std::string& adaptor) const; bool FindWidgetAdaptor(const DataInfo& typein, const DataInfo& typeout, std::string& adaptor) const; - bool RegisterBlackBox(BlackBoxDescriptor::Pointer); - void PrintBlackBoxes(bool description = false, - bool adaptors = false) const; - void PrintAdaptors(bool description = false) const; - void HelpBlackBox(const std::string& name, bool full=true) const; + /// Displays the list of black box descriptors of the package + void PrintHelpListDescriptors(bool description = false, + bool adaptors = false) const; + /// Displays the list of adaptors of the package + void PrintHelpListAdaptors(bool description = false) const; + /// Prints help on a particular Descriptor + void PrintHelpDescriptor(const std::string& name, bool full=true) const; + + void CreateHtmlPage(const std::string& filename, const std::string& caller = "?", const std::string& source = "?", @@ -170,16 +204,16 @@ namespace bbtk const std::string& GetDocRelativeURL() const { return mDocRelativeURL; } - unsigned int GetNumberOfBlackBoxes() const { return mBlackBoxMap.size(); } + unsigned int GetNumberOfDescriptors() const { return mDescriptorMap.size(); } - /// Changes the name of a black box type - void ChangeBlackBoxName( const std::string& oldname, - const std::string& newname ); + /// Changes the name of a descriptor + void ChangeDescriptorName( const std::string& oldname, + const std::string& newname ); /// The type of map of descriptors typedef std::map< std::string, BlackBoxDescriptor::Pointer> - BlackBoxMapType; - const BlackBoxMapType& GetBlackBoxMap() const { return mBlackBoxMap; } - BlackBoxMapType& GetBlackBoxMap() { return mBlackBoxMap; } + DescriptorMapType; + const DescriptorMapType& GetDescriptorMap() const { return mDescriptorMap; } + DescriptorMapType& GetDescriptorMap() { return mDescriptorMap; } /// The type of key in the map of adaptor descriptors class AdaptorKey @@ -229,8 +263,10 @@ namespace bbtk /// Gets the set of factories which use the package (const) const FactorySet& GetFactorySet() const { return mFactorySet; } - void CheckBoxes() const; + void Check() const; + bool ifBoxExist( std::string boxType ); + private: /// Default ctor is private : use the static New method // Package() {} @@ -268,7 +304,7 @@ namespace bbtk std::string mDocRelativeURL; /// The map of black boxes descriptors - BlackBoxMapType mBlackBoxMap; + DescriptorMapType mDescriptorMap; /// The map of adaptors descriptors AdaptorMapType mAdaptorMap; @@ -333,19 +369,20 @@ namespace bbtk bbtk::Package::Pointer \ BBTK_CDECL NAME ## GetPackage() \ { \ - if (!NAME ## GetPackagePointer()) \ - NAME ## GetPackagePointer() = \ - bbtk::Package::New(#NAME, \ + if (!NAME ## GetPackagePointer()) { \ + NAME ## GetPackagePointer() = \ + bbtk::Package::New(#NAME, \ AUTHOR, \ DESCRIPTION, \ VERSION \ ); \ - bbtk::Object::InsertInPackageList( NAME ## GetPackagePointer() ); \ + bbtk::Object::InsertInPackageList( NAME ## GetPackagePointer() ); \ + } \ return NAME ## GetPackagePointer(); \ } \ BBTK_PACKAGE_EXPORT const std::string& \ - BBTK_CDECL NAME ## GetPackageBBTKVersion () \ - { return bbtk::GetVersion(); } \ + BBTK_CDECL NAME ## GetPackageBBTKVersion () \ + { static const std::string v(BBTK_STRINGIFY_SYMBOL(BBTK_VERSION)); return v; } \ class NAME ## PackageAutodestructor \ { \ public: \ @@ -366,19 +403,19 @@ namespace bbtk //==================================================================== #define BBTK_ADD_BLACK_BOX_TO_PACKAGE(NAME,CLASS) \ bool bbDummy##NAME##CLASS = NAME ## GetPackage () \ - ->RegisterBlackBox(CLASS ## Descriptor::Instance()); + ->Register(CLASS ## Descriptor::Instance()); //==================================================================== //==================================================================== #define BBTK_ADD_TEMPLATE_BLACK_BOX_TO_PACKAGE(NAME,CLASS,TEMPLATE_PARAM) \ bool bbDummy##NAME##CLASS##TEMPLATE_PARAM = NAME ## GetPackage () \ - ->RegisterBlackBox(CLASS ## Descriptor ::Instance()); + ->Register(CLASS ## Descriptor ::Instance()); //==================================================================== //==================================================================== #define BBTK_ADD_TEMPLATE2_BLACK_BOX_TO_PACKAGE(NAME,CLASS,T1,T2) \ bool bbDummy##NAME##CLASS##T1##T2 = NAME ## GetPackage () \ - ->RegisterBlackBox(CLASS ## Descriptor ::Instance()); + ->Register(CLASS ## Descriptor ::Instance()); //====================================================================