X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=kernel%2Fsrc%2FbbtkBlackBox.h;h=7ce4db38bf19210d33a0864711746d94a4198165;hb=9db85c7a07a4f94898766bbdce573b77701a82c4;hp=ab689bd6ab9d6c81377c2b4f71f4e951f9e382a5;hpb=d2e9b6b072310e5fd087c6f412eb2f148c4d0638;p=bbtk.git diff --git a/kernel/src/bbtkBlackBox.h b/kernel/src/bbtkBlackBox.h index ab689bd..7ce4db3 100644 --- a/kernel/src/bbtkBlackBox.h +++ b/kernel/src/bbtkBlackBox.h @@ -1,33 +1,38 @@ +/* + # --------------------------------------------------------------------- + # + # 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: bbtkBlackBox.h,v $ Language: C++ - Date: $Date: 2009/10/13 17:39:21 $ - Version: $Revision: 1.30 $ + Date: $Date: 2012/11/16 08:49:01 $ + Version: $Revision: 1.34 $ =========================================================================*/ -/* --------------------------------------------------------------------- - -* 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. -* ------------------------------------------------------------------------ */ - /** @@ -51,7 +56,7 @@ #include // Signal/slot mechanism for output change events -#include +#include #include @@ -63,15 +68,12 @@ namespace bbtk { - struct Void { Void(int = 0) {} }; class Factory; class Connection; class BlackBoxOutputConnector; - - class BBTK_EXPORT BlackBox : public Object { BBTK_ABSTRACT_OBJECT_INTERFACE(BlackBox); @@ -82,8 +84,8 @@ namespace bbtk //================================================================== // Types //================================================================== - typedef boost::signals::trackable OutputChangeObserverType; - typedef boost::signal OutputChangeSignalType; typedef OutputChangeSignalType::slot_function_type @@ -296,35 +298,37 @@ namespace bbtk /// Sets the value of the input 'BoxProcessMode' void bbSetInputBoxProcessMode(std::string a) { bbmBoxProcessMode = a; } /// The possible values of the input 'BoxProcessMode' - typedef enum - { - Pipeline, - Always, - Reactive - } + + typedef enum + { + bbPipeline, + bbAlways, + bbReactive, + bbManual + } BoxProcessModeValue; + /// Returns the "decoded" value of the input "BoxProcessMode" BoxProcessModeValue bbGetBoxProcessModeValue() const; /// Returns true iff the input 'BoxProcessMode' is set to 'Reactive' (or a synonym) virtual bool bbBoxProcessModeIsReactive() const; /// Returns true iff the input 'BoxProcessMode' is set to 'Always' (or a synonym) virtual bool bbBoxProcessModeIsAlways() const; + /// Returns true iff the input 'BoxProcessMode' is set to 'Manual' (or a synonym) + virtual bool bbBoxProcessModeIsManual() const; /// Returns the value of the input 'BoxExecute' Void bbGetInputBoxExecute() { return Void(); } /// Sets the value of the input 'BoxExecute' - void bbSetInputBoxExecute(Void = 0) {} + void bbSetInputBoxExecute(Void = 0) { } /// Returns the value of the output 'BoxChange' Void bbGetOutputBoxChange() { return Void(); } /// Sets the value of the output 'BoxChange' - void bbSetOutputBoxChange(Void = 0) { } + void bbSetOutputBoxChange(Void = 0) { } //@} //================================================================== - - - virtual void bbPrintHelp(BlackBox::Pointer parentblackbox, int detail, int level ); @@ -365,14 +369,11 @@ namespace bbtk protected: - - //================================================================== /// @name User redefinable methods /// Virtual methods which can be redefined by inherited classes //@{ - //================================================================== /// User can redefine this method to set /// the default values of the box inputs and outputs @@ -401,8 +402,6 @@ namespace bbtk //================================================================== - - //================================================================== /// Write Graphviz-dot description in file. @@ -423,16 +422,11 @@ namespace bbtk bool inputoutput, int detail, int level); - - virtual BlackBox::Pointer bbFindBlackBox(const std::string &blackboxname) - { return BlackBox::Pointer();} + { return BlackBox::Pointer();} virtual void Check(bool recursive = true); - - - //================================================================== // PROTECTED PART : ACCESSIBLE TO THE BlackBox DEVELOPER // (IN INHERITED CLASSES) @@ -494,7 +488,7 @@ namespace bbtk //================================================================== /// Computes the final IOStatus of inputs and outputs after processing - void bbComputePostProcessStatus(); +virtual void bbComputePostProcessStatus(); //@} //================================================================== @@ -558,8 +552,6 @@ namespace bbtk //@} //================================================================== - - private: //================================================================== friend class Connection; @@ -575,17 +567,13 @@ namespace bbtk //@{ /// Connects the input to the connection c - virtual void bbConnectInput( const std::string& name, - Connection* c); + virtual void bbConnectInput( const std::string& name, Connection* c); /// Connects the output to the connection c - virtual void bbConnectOutput( const std::string& name, - Connection* c); + virtual void bbConnectOutput( const std::string& name, Connection* c); /// Disconnects the input from the connection c - virtual void bbDisconnectInput( const std::string& name, - Connection* c); + virtual void bbDisconnectInput( const std::string& name, Connection* c); /// Disconnects the output from the connection c - virtual void bbDisconnectOutput( const std::string& name, - Connection* c); + virtual void bbDisconnectOutput( const std::string& name, Connection* c); //@} //================================================================== @@ -593,19 +581,11 @@ namespace bbtk /// which means execute in response to an input change virtual bool bbCanReact() const; - - - - /// Returns true iff the box is executing bool bbGetExecuting() const { return bbmExecuting; } /// Sets the bbmExecuting bool returned by bbGetExecuting void bbSetExecuting(bool b) { bbmExecuting = b; } - - - protected: - //================================================================== protected: @@ -642,7 +622,7 @@ namespace bbtk //JCP 21-09-20 09 delete this throws and exception change due to compiler version changing and boost version virtual int bbDelete() { delete this; - return 0; } + return 0; } //================================================================== @@ -664,6 +644,7 @@ namespace bbtk /// 0 : "Pipeline" mode /// 1 : "Always" mode /// 2 : "Reactive" mode + /// 3 : "Manual" mode std::string bbmBoxProcessMode; /// The parent of the black box in the ComplexBlackBox hierarchy BlackBox::WeakPointer bbmParent; @@ -677,22 +658,17 @@ namespace bbtk /// Map that contains the input connectors of the black box InputConnectorMapType mInputConnectorMap; //================================================================== - - + + + bool bbLetRecursiveExecuteManualMode; }; // Class BlackBox - /// Convenient macro to create output observer callbacks (freehand functions) from object and method pointer (see samples/SampleOutputObserver) #define BBTK_MAKE_OUTPUT_OBSERVER(OBJECT,METHOD) \ boost::bind( METHOD, OBJECT, _1, _2, _3) - - - - } // namespace bbtk #endif -