]> Creatis software - bbtk.git/blobdiff - kernel/src/bbtkPackage.h
Feature #1774
[bbtk.git] / kernel / src / bbtkPackage.h
index 6abb711f63100b31bc7e7ca99d61b977c8de19c0..a6bf8c87d8646cf850da58592736c1e899ff53b3 100644 (file)
@@ -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: 2008/10/17 08:18:14 $
-  Version:   $Revision: 1.11 $
+  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
@@ -58,13 +65,19 @@ namespace bbtk
     static Pointer 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);
     /// Creates a package from a dynamic library
     static Pointer CreateFromDynamicLibrary(const std::string& libname,
                                            const std::string& pkgname,
                                            const std::string& path);
 
+    /// 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 
@@ -81,10 +94,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 
@@ -128,33 +147,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 = "?",
@@ -171,16 +201,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 
@@ -230,8 +260,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() {}
@@ -241,8 +273,7 @@ namespace bbtk
     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);
     /// Does unload a package (no test)
     static void UnLoad(Package::WeakPointer p);
 
@@ -270,7 +301,7 @@ namespace bbtk
     std::string mDocRelativeURL;
 
     /// The map of black boxes descriptors
-    BlackBoxMapType mBlackBoxMap;
+    DescriptorMapType mDescriptorMap;
 
     /// The map of adaptors descriptors
     AdaptorMapType mAdaptorMap;
@@ -335,20 +366,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_STRINGIFY_SYMBOL(BBTK_VERSION)        \
+                            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:                                                            \
@@ -369,19 +400,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 <TEMPLATE_PARAM>::Instance());
+    ->Register(CLASS ## Descriptor <TEMPLATE_PARAM>::Instance());
   //====================================================================
   
   //====================================================================
 #define BBTK_ADD_TEMPLATE2_BLACK_BOX_TO_PACKAGE(NAME,CLASS,T1,T2)      \
   bool bbDummy##NAME##CLASS##T1##T2 = NAME ## GetPackage ()            \
-    ->RegisterBlackBox(CLASS ## Descriptor <T1,T2>::Instance()); 
+    ->Register(CLASS ## Descriptor <T1,T2>::Instance()); 
   //====================================================================