1 /*=========================================================================
4 Module: $RCSfile: bbtkAtomicBlackBox.cxx,v $
6 Date: $Date: 2008/04/18 12:59:14 $
7 Version: $Revision: 1.4 $
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 bbtkDebugMessage("object",3,
34 "==> AtomicBlackBox::AtomicBlackBox(\""
35 <<name<<"\")"<<std::endl);
36 bbtkDebugMessage("object",3,
37 "<== AtomicBlackBox::AtomicBlackBox(\""
38 <<name<<"\")"<<std::endl);
40 //=========================================================================
42 //=========================================================================
43 /// Constructor from an existing box (copy) with a new name
44 AtomicBlackBox::AtomicBlackBox(AtomicBlackBox& from,
45 const std::string &name,
49 bbtkDebugMessage("object",3,
50 "==>AtomicBlackBox::AtomicBlackBox("
51 <<from.bbGetFullName()<<",\""
52 <<name<<"\")"<<std::endl);
53 bbtkDebugMessage("object",3,
54 "<==AtomicBlackBox::AtomicBlackBox("
55 <<from.bbGetFullName()<<",\""
56 <<name<<"\")"<<std::endl);
59 //=========================================================================
62 //=========================================================================
64 AtomicBlackBox::~AtomicBlackBox()
66 bbtkDebugMessage("object",3,"==> AtomicBlackBox::~AtomicBlackBox()"
68 bbtkDebugMessage("object",3,"<== AtomicBlackBox::~AtomicBlackBox()"
71 //=========================================================================
75 //=========================================================================
76 /// Main processing method of the box.
77 IOStatus AtomicBlackBox::bbBackwardUpdate( Connection::Pointer caller )
79 bbtkDebugMessageInc("Process",1,
80 "=> AtomicBlackBox::bbBackwardUpdate("
81 <<(caller?caller->GetFullName():"0")<<") ["
82 <<bbGetFullName()<<"]"<<std::endl);
86 bbtkWarning(bbGetFullName()<<" : Cyclic execution stopped");
91 bbtkDebugMessage("Process",5,"Initial Status = "<<bbGetStatus()
93 bbtkDebugMessage("Process",5,"BoxProcessMode = "
94 <<bbGetInputBoxProcessMode()<<std::endl);
97 if ( bbGetStatus() == UPDATING )
99 bbtkMessage("Warning",1,"!! WARNING !! Cyclic pipeline execution (bbBackwardUpdate ["<<bbGetFullName()<<"] reentered). This may indicate an error in pipeline conception"<<std::endl);
101 bbSetStatus(MODIFIED);
105 if ( ( bbGetStatus() == MODIFIED ) ||
106 ( bbBoxProcessModeIsAlways() ) )
108 bool wasExecuting = bbGlobalGetSomeBoxExecuting();
109 bbGlobalSetSomeBoxExecuting(true);
111 // bbSetStatus(UPDATING);
113 // Updates its inputs
114 IOStatus s = bbUpdateInputs();
116 bbtkDebugMessage("Process",6,"Inputs post-update status = "<<s<<std::endl);
117 // If all inputs are in UPTODATE post-update status
118 // and mProcessMode is not "Always"
119 // then the box is now UPTODATE
120 if ( ( s == UPTODATE ) &&
121 ( ! bbBoxProcessModeIsAlways() ) )
123 bbSetStatus(UPTODATE);
127 // else it remains MODIFIED
128 bbSetStatus(MODIFIED);
134 // Displays the window (WxBlackbox)
135 bbShowWindow(caller);
137 bbGlobalSetSomeBoxExecuting(wasExecuting);
142 bbtkDebugMessage("Process",5,"Up-to-date : nothing to do"<<std::endl);
145 bbtkDebugMessage("Process",5,"Final Status = "
146 <<bbGetStatus()<<std::endl);
147 bbtkDebugMessage("Process",1,
148 "<= AtomicBlackBox::bbBackwardUpdate() ["
149 <<bbGetFullName()<<"]"<<std::endl);
150 bbtkDebugDecTab("Process",1);
152 bbSetExecuting(false);
154 return bbGetStatus();
157 //=========================================================================
160 //=========================================================================
161 Data AtomicBlackBox::bbGetOutput( const std::string &name )
163 bbtkDebugMessageInc("Data",7,
164 "AtomicBlackBox::bbGetOutput(\""<<name<<"\") ["
165 <<bbGetFullName()<<"]"
168 Data p = ((AtomicBlackBoxOutputDescriptor*)bbGetDescriptor()
169 ->GetOutputDescriptor(name))->GetGetFunctor()->Get(this);
171 bbtkDebugDecTab("Data",7);
174 //=========================================================================
177 //=========================================================================
178 /// Gets the input Data of a given name
179 Data AtomicBlackBox::bbGetInput( const std::string &name )
181 bbtkDebugMessageInc("Data",7,
182 "AtomicBlackBox::bbGetInput(\""<<name<<"\") ["
183 <<bbGetFullName()<<"]"
186 Data p = ((AtomicBlackBoxInputDescriptor*)bbGetDescriptor()
187 ->GetInputDescriptor(name))->GetGetFunctor()->Get(this);
189 bbtkDebugDecTab("Data",7);
192 //=========================================================================
195 //=========================================================================
196 /// Sets the data of the output called <name>
197 void AtomicBlackBox::bbSetOutput( const std::string &name, Data data)
199 bbtkDebugMessageInc("Data",7,
200 "AtomicBlackBox::bbSetOutput(\""<<name<<"\",data) ["
201 <<bbGetFullName()<<"]"
204 ((AtomicBlackBoxOutputDescriptor*)bbGetDescriptor()
205 ->GetOutputDescriptor(name))->GetSetFunctor()->Set(this,data);
207 bbtkDebugDecTab("Data",7);
209 //=========================================================================
212 //=========================================================================
213 /// Sets the data of the input called <name>
214 void AtomicBlackBox::bbSetInput(
215 const std::string &name,
219 bbtkDebugMessageInc("Data",7,
220 "AtomicBlackBox::bbSetInput(\""<<name<<"\",data) ["
221 <<bbGetFullName()<<"]"
223 ((AtomicBlackBoxInputDescriptor*)bbGetDescriptor()->GetInputDescriptor(name))->GetSetFunctor()->Set(this,data);
227 bbSetModifiedStatus();
230 bbtkDebugDecTab("Data",7);
232 //=========================================================================
234 //=========================================================================
235 /// Sets the data of the input called <name>
236 void AtomicBlackBox::bbBruteForceSetInputPointer
238 const std::string &name,
243 bbtkDebugMessageInc("Data",7,
244 "AtomicBlackBox::bbBruteForceSetInputPointer(\""
246 <<bbGetFullName()<<"]"
248 ((AtomicBlackBoxInputDescriptor*)bbGetDescriptor()
249 ->GetInputDescriptor(name))->GetSetFunctor()
250 ->BruteForceSetPointer(this,data);
254 bbSetModifiedStatus();
257 bbtkDebugDecTab("Data",7);
259 //=========================================================================
263 //==========================================================================
264 std::string AtomicBlackBox::GetObjectInfo() const
269 //==========================================================================
271 //==========================================================================
272 size_t AtomicBlackBox::GetObjectSize() const
274 return sizeof(*this);
276 //==========================================================================
278 //==========================================================================
279 size_t AtomicBlackBox::GetObjectRecursiveSize() const
281 size_t s = GetObjectSize();
284 //==========================================================================