-/*=========================================================================
+/*
+ # ---------------------------------------------------------------------
+ #
+ # 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: 2009/05/28 08:26:59 $
- Version: $Revision: 1.14 $
+ 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
#include "bbtkBlackBox.h"
#include "bbtkDynamicLibraryHandling.h"
+#include "bbtkUtilities.h"
+#include <vector>
namespace bbtk
{
const std::string& pkgname,
const std::string& path);
+ void GetBoxesInside(NodeTreeC& tree, int cont);
/// 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 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
/// 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 = "?",
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
/// 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() {}
std::string mDocRelativeURL;
/// The map of black boxes descriptors
- BlackBoxMapType mBlackBoxMap;
+ DescriptorMapType mDescriptorMap;
/// The map of adaptors descriptors
AdaptorMapType mAdaptorMap;
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: \
//====================================================================
#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());
//====================================================================