Program: bbtk
Module: $RCSfile: bbtkComplexBlackBox.h,v $
Language: C++
- Date: $Date: 2008/04/09 11:16:57 $
- Version: $Revision: 1.2 $
+ Date: $Date: 2008/04/22 14:30:25 $
+ Version: $Revision: 1.4 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
//==================================================================
class BBTK_EXPORT ComplexBlackBox : public bbtk::BlackBox
{
+ BBTK_OBJECT_INTERFACE(ComplexBlackBox);
friend class ComplexBlackBoxDescriptor;
+ typedef BlackBox Superclass;
public:
//==================================================================
// PUBLIC PART : ACCESSIBLE TO THE END-USER
/// Returns the pointer on the box' descriptor
- BlackBoxDescriptor* bbGetDescriptor() const { return mDescriptor; }
+ BlackBoxDescriptor::Pointer bbGetDescriptor() const { return mDescriptor.lock(); }
/// Returns a pointer on a new instance with name <name>
//BlackBox* bbNew(const std::string& name);
/// Returns a pointer on a clone of the box with name <name>
- BlackBox* bbClone(const std::string& name);
+ BlackBox::Pointer bbClone(const std::string& name);
+
+ /// Clear
+ void Clear();
+ /// Set as prototype
+ void SetAsPrototype() { mLockedDescriptor.reset(); }
+ /// Returns true if it is a prototype
+ bool IsAPrototype() const { return (!mLockedDescriptor); }
+
+ std::string bbGetNameWithParent() const;
void bbExecute(bool force = false);
/// Connects the output <name> to the connection c
virtual void bbConnectOutput( const std::string& name, Connection* c);
- BlackBox* bbGetBlackBox( const std::string& name );
+ BlackBox::Pointer bbGetBlackBox( const std::string& name );
+
+ /// The type of map of black boxes
+ typedef std::map<std::string, BlackBox::Pointer> BlackBoxMapType;
- const std::map<std::string, BlackBox*>& bbGetBlackBoxMap()
- {
- return mBlackBoxMap;
- }
+ const BlackBoxMapType& bbGetBlackBoxMap() { return mBlackBoxMap; }
void bbPrintBlackBoxes();
/// Generates own description and recursively calls itself
/// on internal boxes with level-1
virtual void bbWriteDotFileBlackBox(FILE *ff,
- BlackBox *parentblackbox,
+ BlackBox::Pointer parentblackbox,
int detail, int level,
bool instanceOrtype,
bool relative_link );
bool inputoutput,
int detail, int level);
- virtual BlackBox *bbFindBlackBox(const std::string &blackboxname);
+ virtual BlackBox::Pointer bbFindBlackBox(const std::string &blackboxname);
void Check(bool recursive=true);
+
+
protected:
//==================================================================
// PROTECTED PART : ACCESSIBLE TO ComplexBlackBoxDescriptor
+ static ComplexBlackBox::Pointer
+ New(const std::string &name,
+ ComplexBlackBoxDescriptor::Pointer desc);
+
+ private:
/// Constructor that takes the ComplexBlackBox name
- ComplexBlackBox(const std::string &name, ComplexBlackBoxDescriptor* desc);
+ ComplexBlackBox(const std::string &name,
+ ComplexBlackBoxDescriptor::Pointer desc);
/// Constructor from an existing box (copy) with a new name
ComplexBlackBox(ComplexBlackBox& from, const std::string &name);
- //
- ~ComplexBlackBox();
-
public:
- IOStatus bbBackwardUpdate(Connection* caller);
+ IOStatus bbBackwardUpdate(Connection::Pointer caller);
// void bbForwardUpdate(Connection* caller);
void bbSetModifiedStatus(BlackBoxInputConnector* c);
- void bbAddBlackBox( BlackBox* );
+ void bbAddBlackBox( BlackBox::Pointer );
void bbAddToExecutionList( const std::string& name );
- void bbUnsafeAddBlackBox( BlackBox* );
- void bbRemoveBlackBox( const std::string& name );
- void bbAddConnection( Connection* );
+ void bbUnsafeAddBlackBox( BlackBox::Pointer );
+ void bbRemoveBlackBox( const std::string& name,
+ bool remove_connections = true);
+ void bbAddConnection( Connection::Pointer );
// void RemoveConnection( );
- BlackBox* bbUnsafeGetBlackBox( const std::string& name );
+ BlackBox::Pointer bbUnsafeGetBlackBox( const std::string& name );
///
void bbAllocateConnectors();
// PRIVATE PART : MEMBERS AND USEFULL INTERNAL METHODS
/// Default constructor : derived classes must use the constructor with the ComplexBlackBox's name
- ComplexBlackBox() : BlackBox("") {}
+ //ComplexBlackBox() : BlackBox("") {}
+ // true if the box is a prototype of a ComplexBlackBoxDescriptor
+ // bool mIsAPrototype;
+
+ /// The descriptor pointer : is 0 if the box is a prototype
+ ComplexBlackBoxDescriptor::Pointer mLockedDescriptor;
/// The descriptor pointer
- ComplexBlackBoxDescriptor* mDescriptor;
+ ComplexBlackBoxDescriptor::WeakPointer mDescriptor;
- /// The type of map of black boxes
- typedef std::map<std::string, BlackBox*> BlackBoxMapType;
/// The map of black boxes
BlackBoxMapType mBlackBoxMap;
/// The type of list of connections
- typedef std::list<Connection*> ConnectionListType;
+ typedef std::list<Connection::Pointer> ConnectionListType;
/// The list of connections
ConnectionListType mConnectionList;