X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=kernel%2Fsrc%2FbbtkPackage.h;h=b1976977dfcb54bbf7a85ef9f21905866c36a276;hb=ed9d32f344e2ffa223081390b63f064cf1e42de0;hp=6abb711f63100b31bc7e7ca99d61b977c8de19c0;hpb=6575a389b71b1b85c79e4444885becb76ecf16e4;p=bbtk.git diff --git a/kernel/src/bbtkPackage.h b/kernel/src/bbtkPackage.h index 6abb711..b197697 100644 --- a/kernel/src/bbtkPackage.h +++ b/kernel/src/bbtkPackage.h @@ -2,8 +2,8 @@ Program: bbtk Module: $RCSfile: bbtkPackage.h,v $ Language: C++ - Date: $Date: 2008/10/17 08:18:14 $ - Version: $Revision: 1.11 $ + Date: $Date: 2010/09/12 14:52:25 $ + Version: $Revision: 1.16 $ =========================================================================*/ /* --------------------------------------------------------------------- @@ -58,13 +58,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 +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 @@ -128,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 = "?", @@ -171,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 @@ -230,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() {} @@ -241,8 +266,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 +294,7 @@ namespace bbtk std::string mDocRelativeURL; /// The map of black boxes descriptors - BlackBoxMapType mBlackBoxMap; + DescriptorMapType mDescriptorMap; /// The map of adaptors descriptors AdaptorMapType mAdaptorMap; @@ -335,15 +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_STRINGIFY_SYMBOL(BBTK_VERSION) \ + VERSION \ ); \ - bbtk::Object::InsertInPackageList( NAME ## GetPackagePointer() ); \ + bbtk::Object::InsertInPackageList( NAME ## GetPackagePointer() ); \ + } \ return NAME ## GetPackagePointer(); \ } \ BBTK_PACKAGE_EXPORT const std::string& \ @@ -369,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 ::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()); //====================================================================