/*========================================================================= Program: bbtk Module: $RCSfile: bbtkAtomicBlackBox.h,v $ Language: C++ Date: $Date: 2008/12/08 12:53:39 $ Version: $Revision: 1.7 $ =========================================================================*/ /* --------------------------------------------------------------------- * 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. * ------------------------------------------------------------------------ */ /* --------------------------------------------------------------------- * 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 * \brief class bbtk::AtomicBlackBox : ancestor of all user defined (concrete) black boxes which are atomic (vs. complex boxes which are made up of other (atomic or complex) boxes). */ /** * \class bbtk::AtomicBlackBox * \brief Ancestor of all user defined (concrete) black boxes which are atomic (vs. complex boxes which are made up of other (atomic or complex) boxes). */ #ifndef __bbtkAtomicBlackBox_h__ #define __bbtkAtomicBlackBox_h__ #include "bbtkBlackBox.h" #include "bbtkAtomicBlackBoxDescriptor.h" namespace bbtk { //================================================================== class BBTK_EXPORT AtomicBlackBox : public bbtk::BlackBox { //================================================================== public: //================================================================== bbtk::BlackBoxDescriptor::Pointer bbGetDescriptor() const { return bbmDescriptorPointer; } //================================================================== /// Gets the output Data of a given label Data bbGetOutput( const std::string &label ); /// Gets the input Data of a given label Data bbGetInput( const std::string &label ); /// Sets the data of the output called void bbSetOutput( const std::string &name, Data data); /// Sets the data of the input called void bbSetInput( const std::string &name, Data data, bool setModified = true); /// Sets the data of the input called void bbBruteForceSetInputPointer( const std::string &name, void* data, bool setModified = true); //================================================================== //================================================================== std::string GetObjectInfo() const; size_t GetObjectSize() const; size_t GetObjectRecursiveSize() const; //================================================================== //================================================================== protected: //================================================================== /// Constructor with the AtomicBlackBox's instance name AtomicBlackBox(const std::string &name, bool alloc = true); /// Constructor from an existing box (copy) with a new instance name AtomicBlackBox(AtomicBlackBox& from, const std::string &name, bool alloc = true); //================================================================== //================================================================== /// Destructor virtual ~AtomicBlackBox(); //================================================================== //================================================================== protected: virtual void bbLockDescriptor() = 0; // private: // virtual void bbReleaseDescriptor(); //================================================================== public: //================================================================== /// Recursive pipeline processing in backward direction /// (recursion is in backward direction however execution always goes forward). /// - updates its inputs by calling bbUpdateInputs (which recursively calls bbBackwardUpdate on amont boxes if needed) /// - if the return value of bbUpdateInputs is not UPTODATE /// - calls bbProcess /// - calls bbComputePostProcessStatus virtual void bbBackwardUpdate(Connection::Pointer caller); //================================================================== //================================================================== protected: //================================================================== /// Calls the user defined processing method. /// Overloaded in WxBlackBox to handle widget creation and show virtual void bbProcess() { this->bbUserProcess(); } //================================================================== //================================================================== /// User callback which computes the outputs as a function of the inputs. /// It is assumed to be deterministic and thus is only called is the inputs have changed /// (i.e. if the black box is marked as modified) virtual void bbUserProcess() { bbtkWarning("AtomicBlackBox::bbUserProcess() not overloaded for box '" <