]> Creatis software - bbtk.git/blobdiff - kernel/src/bbtkPackage.h
Preapre use of GDCM2
[bbtk.git] / kernel / src / bbtkPackage.h
index 9a1c46a9e43b0fa42b8f99246598077d3d1e9c01..b1976977dfcb54bbf7a85ef9f21905866c36a276 100644 (file)
@@ -2,8 +2,8 @@
   Program:   bbtk
   Module:    $RCSfile: bbtkPackage.h,v $
   Language:  C++
-  Date:      $Date: 2009/01/13 08:45:27 $
-  Version:   $Revision: 1.12 $
+  Date:      $Date: 2010/09/12 14:52:25 $
+  Version:   $Revision: 1.16 $
 =========================================================================*/
 
 /* ---------------------------------------------------------------------
@@ -64,6 +64,13 @@ namespace bbtk
                                            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 
@@ -80,10 +87,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 +140,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 +194,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 +253,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 +294,7 @@ namespace bbtk
     std::string mDocRelativeURL;
 
     /// The map of black boxes descriptors
-    BlackBoxMapType mBlackBoxMap;
+    DescriptorMapType mDescriptorMap;
 
     /// The map of adaptors descriptors
     AdaptorMapType mAdaptorMap;
@@ -333,14 +359,15 @@ 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&                             \
@@ -366,19 +393,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()); 
   //====================================================================