/*========================================================================= Program: bbtk Module: $RCSfile: bbtkBlackBoxDescriptor.h,v $ Language: C++ Date: $Date: 2008/01/22 15:02:00 $ Version: $Revision: 1.1 $ 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. =========================================================================*/ /** * \file * \brief Class bbtk::BlackBoxDescriptor : (abstract) describes of a BlackBox (name, description, author) and is able to create an instance of it. */ /** * \class bbtk::BlackBoxDescriptor * \brief (Abstract) Contains information on a BlackBox type (name, description, author, inputs, outputs) and is able to create an instance of it. */ #ifndef __bbtkBlackBoxDescriptor_h__ #define __bbtkBlackBoxDescriptor_h__ #include "bbtkBlackBoxInputDescriptor.h" #include "bbtkBlackBoxOutputDescriptor.h" #include #include namespace bbtk { class BlackBox; class Package; //========================================================================== class BBTK_EXPORT BlackBoxDescriptor { public: /// The type of descriptor of inputs typedef BlackBoxInputDescriptor InputDescriptor; /// The type of descriptor of outputs typedef BlackBoxOutputDescriptor OutputDescriptor; /// The type of dictionnary of inputs = map of input descriptors pointers typedef std::map InputDescriptorMapType; /// The type of dictionnary of outputs= map of output descriptors pointers typedef std::map OutputDescriptorMapType; /// The categories of black box typedef enum { STANDARD, ADAPTOR, DEFAULT_ADAPTOR } Category; /// 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 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 Package to which the box belongs Package* GetPackage() { return mPackage; } /// Returns the Package to which the box belongs const Package* GetPackage() const { return mPackage; } /// Returns the category of box Category GetCategory() const { return mCategory; } /// Prints help on the black box virtual void GetHelp(bool full=true) const; /// 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 const InputDescriptor* GetInputDescriptor(const std::string & name) const; /// Returns a const pointer on the descriptor of the output of name 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 void AddToDescription( const std::string&, bool clear = false ); /// Adds the string to the BlackBox's author list void AddToAuthor( 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; } /* virtual void InsertHTMLGraph( std::ofstream& s, int detail, int level, const std::string& output_dir = "" ) { } */ /// Writes html formatted help into the output file stream. /// detail and level are used for graphical representation of /// complex black boxes (see ComplexBlackBox::InsertHTMLGraph) /// output_dir is the directory in which to write auxilliary files /// (.dot/.png/.cmap) virtual void InsertHtmlHelp ( std::ofstream& s, int detail, int level, const std::string& output_dir = "", bool relative_link = false ); protected: /// Adds an input descriptor void AddInputDescriptor( BlackBoxInputDescriptor* d ) { mInput[d->GetName()] = d; } /// Adds an output descriptor void AddOutputDescriptor( BlackBoxOutputDescriptor* d ) { mOutput[d->GetName()] = d; } // private: /// The name of the type of black box std::string mTypeName; /// The description of the black box std::string mDescription; /// The author of the black box std::string mAuthor; /// The category of box Category mCategory; /// The Package to which the box belongs Package *mPackage; /// The inputs InputDescriptorMapType mInput; /// The outputs OutputDescriptorMapType mOutput; }; // class BlackBoxDescriptor //========================================================================== } // namespace bbtk #endif