1 /*=========================================================================
4 Module: $RCSfile: bbtkAtomicBlackBox.cxx,v $
6 Date: $Date: 2008/04/08 06:59:29 $
7 Version: $Revision: 1.3 $
9 Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
10 l'Image). All rights reserved. See Doc/License.txt or
11 http://www.creatis.insa-lyon.fr/Public/bbtk/License.html for details.
13 This software is distributed WITHOUT ANY WARRANTY; without even
14 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 PURPOSE. See the above copyright notices for more information.
17 =========================================================================*/
22 * \brief class bbtk::AtomicBlackBox : abstract user defined black boxes
24 #include "bbtkAtomicBlackBox.h"
29 //=========================================================================
30 AtomicBlackBox::AtomicBlackBox(const std::string &name, bool alloc)
33 bbtkDebugMessageInc("Kernel",7,
34 "AtomicBlackBox::AtomicBlackBox(\""
35 <<name<<"\")"<<std::endl);
36 bbtkDebugDecTab("Kernel",7);
38 //=========================================================================
40 //=========================================================================
41 /// Constructor from an existing box (copy) with a new name
42 AtomicBlackBox::AtomicBlackBox(AtomicBlackBox& from,
43 const std::string &name,
47 bbtkDebugMessageInc("Kernel",7,
48 "AtomicBlackBox::AtomicBlackBox("
49 <<from.bbGetFullName()<<",\""
50 <<name<<"\")"<<std::endl);
51 bbtkDebugDecTab("Kernel",7);
54 //=========================================================================
57 //=========================================================================
59 AtomicBlackBox::~AtomicBlackBox()
61 bbtkDebugMessage("Kernel",7,"AtomicBlackBox::~AtomicBlackBox()"
64 //=========================================================================
68 //=========================================================================
69 /// Main processing method of the box.
70 IOStatus AtomicBlackBox::bbBackwardUpdate( Connection* caller )
72 bbtkDebugMessageInc("Process",1,
73 "=> AtomicBlackBox::bbBackwardUpdate("
74 <<(caller?caller->GetFullName():"0")<<") ["
75 <<bbGetFullName()<<"]"<<std::endl);
79 bbtkWarning(bbGetFullName()<<" : Cyclic execution stopped");
84 bbtkDebugMessage("Process",5,"Initial Status = "<<bbGetStatus()
86 bbtkDebugMessage("Process",5,"BoxProcessMode = "
87 <<bbGetInputBoxProcessMode()<<std::endl);
90 if ( bbGetStatus() == UPDATING )
92 bbtkMessage("Warning",1,"!! WARNING !! Cyclic pipeline execution (bbBackwardUpdate ["<<bbGetFullName()<<"] reentered). This may indicate an error in pipeline conception"<<std::endl);
94 bbSetStatus(MODIFIED);
98 if ( ( bbGetStatus() == MODIFIED ) ||
99 ( bbBoxProcessModeIsAlways() ) )
101 bool wasExecuting = bbGlobalGetSomeBoxExecuting();
102 bbGlobalSetSomeBoxExecuting(true);
104 // bbSetStatus(UPDATING);
106 // Updates its inputs
107 IOStatus s = bbUpdateInputs();
109 bbtkDebugMessage("Process",6,"Inputs post-update status = "<<s<<std::endl);
110 // If all inputs are in UPTODATE post-update status
111 // and mProcessMode is not "Always"
112 // then the box is now UPTODATE
113 if ( ( s == UPTODATE ) &&
114 ( ! bbBoxProcessModeIsAlways() ) )
116 bbSetStatus(UPTODATE);
120 // else it remains MODIFIED
121 bbSetStatus(MODIFIED);
127 // Displays the window (WxBlackbox)
128 bbShowWindow(caller);
130 bbGlobalSetSomeBoxExecuting(wasExecuting);
135 bbtkDebugMessage("Process",5,"Up-to-date : nothing to do"<<std::endl);
138 bbtkDebugMessage("Process",5,"Final Status = "
139 <<bbGetStatus()<<std::endl);
140 bbtkDebugMessage("Process",1,
141 "<= AtomicBlackBox::bbBackwardUpdate() ["
142 <<bbGetFullName()<<"]"<<std::endl);
143 bbtkDebugDecTab("Process",1);
145 bbSetExecuting(false);
147 return bbGetStatus();
150 //=========================================================================
153 //=========================================================================
154 Data AtomicBlackBox::bbGetOutput( const std::string &name )
156 bbtkDebugMessageInc("Data",7,
157 "AtomicBlackBox::bbGetOutput(\""<<name<<"\") ["
158 <<bbGetFullName()<<"]"
161 Data p = ((AtomicBlackBoxOutputDescriptor*)bbGetDescriptor()
162 ->GetOutputDescriptor(name))->GetGetFunctor()->Get(this);
164 bbtkDebugDecTab("Data",7);
167 //=========================================================================
170 //=========================================================================
171 /// Gets the input Data of a given name
172 Data AtomicBlackBox::bbGetInput( const std::string &name )
174 bbtkDebugMessageInc("Data",7,
175 "AtomicBlackBox::bbGetInput(\""<<name<<"\") ["
176 <<bbGetFullName()<<"]"
179 Data p = ((AtomicBlackBoxInputDescriptor*)bbGetDescriptor()
180 ->GetInputDescriptor(name))->GetGetFunctor()->Get(this);
182 bbtkDebugDecTab("Data",7);
185 //=========================================================================
188 //=========================================================================
189 /// Sets the data of the output called <name>
190 void AtomicBlackBox::bbSetOutput( const std::string &name, Data data)
192 bbtkDebugMessageInc("Data",7,
193 "AtomicBlackBox::bbSetOutput(\""<<name<<"\",data) ["
194 <<bbGetFullName()<<"]"
197 ((AtomicBlackBoxOutputDescriptor*)bbGetDescriptor()
198 ->GetOutputDescriptor(name))->GetSetFunctor()->Set(this,data);
200 bbtkDebugDecTab("Data",7);
202 //=========================================================================
205 //=========================================================================
206 /// Sets the data of the input called <name>
207 void AtomicBlackBox::bbSetInput(
208 const std::string &name,
212 bbtkDebugMessageInc("Data",7,
213 "AtomicBlackBox::bbSetInput(\""<<name<<"\",data) ["
214 <<bbGetFullName()<<"]"
216 ((AtomicBlackBoxInputDescriptor*)bbGetDescriptor()->GetInputDescriptor(name))->GetSetFunctor()->Set(this,data);
220 bbSetModifiedStatus();
223 bbtkDebugDecTab("Data",7);
225 //=========================================================================
227 //=========================================================================
228 /// Sets the data of the input called <name>
229 void AtomicBlackBox::bbBruteForceSetInputPointer
231 const std::string &name,
236 bbtkDebugMessageInc("Data",7,
237 "AtomicBlackBox::bbBruteForceSetInputPointer(\""
239 <<bbGetFullName()<<"]"
241 ((AtomicBlackBoxInputDescriptor*)bbGetDescriptor()
242 ->GetInputDescriptor(name))->GetSetFunctor()
243 ->BruteForceSetPointer(this,data);
247 bbSetModifiedStatus();
250 bbtkDebugDecTab("Data",7);
252 //=========================================================================