]> Creatis software - bbtk.git/blobdiff - kernel/src/bbtkBlackBoxDescriptor.h
*** empty log message ***
[bbtk.git] / kernel / src / bbtkBlackBoxDescriptor.h
index f4694a705484d907a01e532d07618a96bfaaf75e..a680b54f81124bbcd195085ee69ec4ddedef4168 100644 (file)
@@ -3,8 +3,8 @@
   Program:   bbtk
   Module:    $RCSfile: bbtkBlackBoxDescriptor.h,v $
   Language:  C++
-  Date:      $Date: 2008/01/22 15:02:00 $
-  Version:   $Revision: 1.1 $
+  Date:      $Date: 2008/04/09 11:16:57 $
+  Version:   $Revision: 1.8 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -51,36 +51,46 @@ namespace bbtk
     typedef std::map<std::string, InputDescriptor*> InputDescriptorMapType;
     /// The type of dictionnary of outputs= map of output descriptors pointers 
     typedef std::map<std::string, OutputDescriptor*> OutputDescriptorMapType;
-    /// The categories of black box
+    /// The kinds of black box
     typedef enum
     {
-      STANDARD,
-      ADAPTOR,
-      DEFAULT_ADAPTOR
+      STANDARD=0,
+      ADAPTOR=1,
+      DEFAULT_ADAPTOR=2,
+      WIDGET_ADAPTOR=3,
+      DEFAULT_WIDGET_ADAPTOR=4
     }
-    Category;
+    Kind;
 
     /// Default ctor
     BlackBoxDescriptor(); 
-    /// Default dtor
-    virtual ~BlackBoxDescriptor();
     /// Creates an instance with name boxname of the BlackBox
     /// of which this is the descriptor 
     virtual BlackBox* CreateInstance(const std::string& boxname) = 0;
 
     /// Returns the name of the **TYPE** of the black box
     const std::string& GetTypeName() const { return mTypeName; }
+    
+    /// Returns the full name of the **TYPE** of the black box (+package name)
+    std::string GetFullTypeName() const;
+    
     /// Returns the description of the BlackBox 
     const std::string& GetDescription() const { return mDescription; }
+    
     /// Returns the author(s) of the BlackBox
     const std::string& GetAuthor() const { return mAuthor; }
+    
+    /// Returns the category(s) of the BlackBox
+    const std::string& GetCategory() const { return mCategory; }
+    
     /// Returns the Package to which the box belongs
     Package* GetPackage() { return mPackage; }
-    /// Returns the Package to which the box belongs
+    
+    /// Returns the Package to which the box belongs (const pointer)
     const Package* GetPackage() const { return mPackage; }
-    /// Returns the category of box 
-    Category GetCategory() const { return mCategory; }
-
+    
+    /// Returns the kind of box 
+    Kind GetKind() const { return mKind; }
 
     /// Prints help on the black box
     virtual void GetHelp(bool full=true) const;
@@ -88,24 +98,34 @@ namespace bbtk
     /// Returns a const ref on the map of input descriptors
     const InputDescriptorMapType& GetInputDescriptorMap() const 
       { return mInput; }
+      
     /// Returns a const ref on the map of output descriptors
     const OutputDescriptorMapType& GetOutputDescriptorMap() const 
       { return mOutput; }
+      
     /// Returns a const pointer on the descriptor of the input of name <name> 
-    const InputDescriptor* GetInputDescriptor(const std::string & name) const;
+    const InputDescriptor* GetInputDescriptor(const std::string &name) const;
+
     /// Returns a const pointer on the descriptor of the output of name <name> 
-    const OutputDescriptor* GetOutputDescriptor(const std::string & name) const;
+    const OutputDescriptor* GetOutputDescriptor(const std::string &name) const;
 
     /// Sets the name of the **TYPE** of BlackBox
     void SetTypeName( const std::string& name ) { mTypeName=name; }
-    /// Adds the string to the BlackBox's description
+
+    /// Adds the string to the BlackBox description
     void AddToDescription( const std::string&, bool clear = false );
-    /// Adds the string to the BlackBox's author list
+    
+    /// Adds the string to the BlackBox author list
     void AddToAuthor( const std::string&, bool clear = false );
+    
+    /// Adds the string to the BlackBox category list
+    void AddToCategory( const std::string&, bool clear = false );
+    
     /// Sets the Package to which the box belongs
     void SetPackage(Package *package) { mPackage = package; }
-    /// Sets the category of box 
-    void SetCategory(Category category) { mCategory = category; }
+    
+    /// Sets the kind of box 
+    void SetKind(Kind kind) { mKind = kind; }
 
     /* 
    virtual void InsertHTMLGraph( std::ofstream& s, int detail, int level, 
@@ -121,12 +141,23 @@ namespace bbtk
                                  const std::string& output_dir = "",
                                  bool relative_link = false );
 
+    /// Increase ref count
+    void Reference() { mRefCount++; }
+    /// Decrease ref count and delete if no more used
+    void UnReference();
+
+    ///
+    virtual void Check(bool recursive=true) const;
+
   protected:
+    /// Default dtor is protected : use UnRegister to destroy (ref counting)
+    virtual ~BlackBoxDescriptor();
+
     /// Adds an input descriptor
-    void AddInputDescriptor( BlackBoxInputDescriptord ) 
+    void AddInputDescriptor( BlackBoxInputDescriptor *d ) 
     { mInput[d->GetName()] = d; }
     /// Adds an output descriptor
-    void AddOutputDescriptor( BlackBoxOutputDescriptord ) 
+    void AddOutputDescriptor( BlackBoxOutputDescriptor *d ) 
     { mOutput[d->GetName()] = d; }
 
     //  private:
@@ -136,15 +167,22 @@ namespace bbtk
     std::string mDescription;
     /// The author of the black box
     std::string mAuthor;
-    /// The category of box
-    Category mCategory;
+    /// The category of the black box
+    std::string mCategory;    
+    /// The kind of box (standard / adaptor)
+    Kind mKind;
     /// The Package to which the box belongs
     Package *mPackage;
     /// The inputs 
     InputDescriptorMapType mInput;
     /// The outputs 
     OutputDescriptorMapType mOutput;
+
+    /// Reference counting
+    int mRefCount;
     
+  private:
+    BlackBoxDescriptor(const BlackBoxDescriptor&) {}
   };
   // class BlackBoxDescriptor
   //==========================================================================