SCIRun  5.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Module.h
Go to the documentation of this file.
1 /*
2  For more information, please see: http://software.sci.utah.edu
3 
4  The MIT License
5 
6  Copyright (c) 2012 Scientific Computing and Imaging Institute,
7  University of Utah.
8 
9  License for the specific language governing rights and limitations under
10  Permission is hereby granted, free of charge, to any person obtaining a
11  copy of this software and associated documentation files (the "Software"),
12  to deal in the Software without restriction, including without limitation
13  the rights to use, copy, modify, merge, publish, distribute, sublicense,
14  and/or sell copies of the Software, and to permit persons to whom the
15  Software is furnished to do so, subject to the following conditions:
16 
17  The above copyright notice and this permission notice shall be included
18  in all copies or substantial portions of the Software.
19 
20  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
21  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
23  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
25  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
26  DEALINGS IN THE SOFTWARE.
27 */
28 /// @todo Documentation Dataflow/Network/Module.h
29 
30 #ifndef DATAFLOW_NETWORK_MODULE_H
31 #define DATAFLOW_NETWORK_MODULE_H
32 
33 #include <boost/noncopyable.hpp>
34 #include <boost/static_assert.hpp>
35 #include <boost/lexical_cast.hpp>
36 #include <boost/atomic.hpp>
37 #include <vector>
47 #include <Dataflow/Network/share.h>
48 
49 namespace SCIRun {
50 namespace Dataflow {
51 namespace Networks {
52 
53  class SCISHARE Module : public ModuleInterface, public Core::Logging::LegacyLoggerInterface, public StateChangeObserver, boost::noncopyable
54  {
55  public:
56  Module(const ModuleLookupInfo& info,
57  bool hasUi = true,
58  Core::Algorithms::AlgorithmFactoryHandle algoFactory = defaultAlgoFactory_,
59  ModuleStateFactoryHandle stateFactory = defaultStateFactory_,
60  const std::string& version = "1.0");
61  virtual ~Module();
62 
63  std::string get_module_name() const { return info_.module_name_; }
64  std::string get_categoryname() const { return info_.category_name_; }
65  std::string get_packagename() const { return info_.package_name_; }
66  ModuleId get_id() const { return id_; }
67 
68  //for serialization
69  virtual const ModuleLookupInfo& get_info() const { return info_; }
70  virtual void set_id(const std::string& id) { id_ = ModuleId(id); }
71 
72  //for unit testing. Need to restrict access somehow.
73  static void resetInstanceCount();
74 
75  bool has_ui() const { return has_ui_; }
76  void setUiVisible(bool visible);
77  virtual size_t num_input_ports() const;
78  virtual size_t num_output_ports() const;
79 
80  virtual bool hasInputPort(const PortId& id) const;
81  virtual bool hasOutputPort(const PortId& id) const;
82  virtual InputPortHandle getInputPort(const PortId& id) const;
83  virtual OutputPortHandle getOutputPort(const PortId& id) const;
84  virtual std::vector<InputPortHandle> findInputPortsWithName(const std::string& name) const;
85  virtual std::vector<OutputPortHandle> findOutputPortsWithName(const std::string& name) const;
86  virtual std::vector<InputPortHandle> inputPorts() const;
87  virtual std::vector<OutputPortHandle> outputPorts() const;
88 
89  /// @todo: execute signal here.
90  virtual void do_execute() throw(); //--C++11--will throw nothing
91  virtual ModuleStateHandle get_state();
92  virtual const ModuleStateHandle get_state() const;
93  virtual void set_state(ModuleStateHandle state);
94 
95  virtual ExecutionState executionState() const;
96  virtual void setExecutionState(ExecutionState state);
97 
98  private:
99  virtual SCIRun::Core::Datatypes::DatatypeHandleOption get_input_handle(const PortId& id);
100  virtual std::vector<SCIRun::Core::Datatypes::DatatypeHandleOption> get_dynamic_input_handles(const PortId& id);
101  virtual void send_output_handle(const PortId& id, SCIRun::Core::Datatypes::DatatypeHandle data);
102 
103  public:
104  virtual void setLogger(SCIRun::Core::Logging::LoggerHandle log);
105  virtual SCIRun::Core::Logging::LoggerHandle getLogger() const;
106  virtual void error(const std::string& msg) const { errorSignal_(id_); getLogger()->error(msg); }
107  virtual void warning(const std::string& msg) const { getLogger()->warning(msg); }
108  virtual void remark(const std::string& msg) const { getLogger()->remark(msg); }
109  virtual void status(const std::string& msg) const { getLogger()->status(msg); }
110 
112  virtual void setUpdaterFunc(SCIRun::Core::Algorithms::AlgorithmStatusReporter::UpdaterFunc func);
113  virtual void setUiToggleFunc(UiToggleFunc func) { uiToggleFunc_ = func; }
114 
115  virtual boost::signals2::connection connectExecuteBegins(const ExecuteBeginsSignalType::slot_type& subscriber);
116  virtual boost::signals2::connection connectExecuteEnds(const ExecuteEndsSignalType::slot_type& subscriber);
117  virtual boost::signals2::connection connectErrorListener(const ErrorSignalType::slot_type& subscriber);
118 
119  virtual void addPortConnection(const boost::signals2::connection& con) override;
120 
121  virtual Core::Algorithms::AlgorithmHandle getAlgorithm() const { return algo_; }
122 
123  virtual bool needToExecute() const;
124 
125  virtual bool hasDynamicPorts() const
126  {
127  return false; /// @todo: need to examine HasPorts base classes
128  }
129 
130  bool oport_connected(const PortId& id) const;
131 
132  template <class Type, size_t N>
134  {
135  explicit PortNameBase(const PortId& id) : id_(id) {}
136  //operator size_t() const { return N; }
137 
138  operator PortId() const
139  {
140  return toId();
141  }
142 
143  PortId toId() const
144  {
145  if (id_.name.empty())
146  BOOST_THROW_EXCEPTION(DataPortException() << SCIRun::Core::ErrorMessage("Port name not initialized!"));
147  return id_;
148  }
149  operator std::string() const
150  {
151  return toId().name;
152  }
153 
155  };
156 
157  template <class Type, size_t N>
158  struct StaticPortName : PortNameBase<Type,N>
159  {
160  explicit StaticPortName(const PortId& id = PortId(0, "[not defined yet]")) : PortNameBase<Type,N>(id) {}
161  };
162 
163  template <class Type, size_t N>
164  struct DynamicPortName : PortNameBase<Type,N>
165  {
166  explicit DynamicPortName(const PortId& id = PortId(0, "[not defined yet]")) : PortNameBase<Type,N>(id) {}
167  };
168 
169  // Throws if input is not present or null.
170  template <class T, size_t N>
171  boost::shared_ptr<T> getRequiredInput(const StaticPortName<T,N>& port);
172 
173  template <class T, size_t N>
174  boost::optional<boost::shared_ptr<T>> getOptionalInput(const StaticPortName<T,N>& port);
175 
176  template <class T, size_t N>
177  std::vector<boost::shared_ptr<T>> getRequiredDynamicInputs(const DynamicPortName<T,N>& port);
178 
179  template <class T, size_t N>
180  std::vector<boost::shared_ptr<T>> getOptionalDynamicInputs(const DynamicPortName<T,N>& port);
181 
182  template <class T, class D, size_t N>
183  void sendOutput(const StaticPortName<T,N>& port, boost::shared_ptr<D> data);
184 
185  template <class T, size_t N>
186  void sendOutputFromAlgorithm(const StaticPortName<T,N>& port, const Core::Algorithms::AlgorithmOutput& output);
187 
188  class SCISHARE Builder : boost::noncopyable
189  {
190  public:
191  Builder();
192  Builder& with_name(const std::string& name);
193  Builder& using_func(ModuleMaker create);
194  Builder& add_input_port(const Port::ConstructionParams& params);
195  Builder& add_output_port(const Port::ConstructionParams& params);
196  Builder& setStateDefaults();
197  ModuleHandle build();
198 
199  /// @todo: these don't quite belong here, think about extracting
200  PortId cloneInputPort(ModuleHandle module, const PortId& id);
201  void removeInputPort(ModuleHandle module, const PortId& id);
202 
203  typedef boost::function<SCIRun::Dataflow::Networks::DatatypeSinkInterface*()> SinkMaker;
204  typedef boost::function<SCIRun::Dataflow::Networks::DatatypeSourceInterface*()> SourceMaker;
205  static void use_sink_type(SinkMaker func);
206  static void use_source_type(SourceMaker func);
207  private:
208  void addInputPortImpl(Module& module, const Port::ConstructionParams& params);
209  boost::shared_ptr<Module> module_;
210  static SinkMaker sink_maker_;
211  static SourceMaker source_maker_;
212  };
213 
214  /// @todo: yuck
217 
218  protected:
221 
223 
224  protected:
225  enum LegacyState {
229  Completed
230  };
231  void update_state(LegacyState) { /*TODO*/ }
232 
233  void setStateBoolFromAlgo(SCIRun::Core::Algorithms::AlgorithmParameterName name);
234  void setStateIntFromAlgo(SCIRun::Core::Algorithms::AlgorithmParameterName name);
235  void setStateDoubleFromAlgo(SCIRun::Core::Algorithms::AlgorithmParameterName name);
236  void setStateStringFromAlgoOption(SCIRun::Core::Algorithms::AlgorithmParameterName name);
237  void setAlgoBoolFromState(SCIRun::Core::Algorithms::AlgorithmParameterName name);
238  void setAlgoIntFromState(SCIRun::Core::Algorithms::AlgorithmParameterName name);
239  void setAlgoDoubleFromState(SCIRun::Core::Algorithms::AlgorithmParameterName name);
240  void setAlgoOptionFromState(SCIRun::Core::Algorithms::AlgorithmParameterName name);
241 
242  virtual size_t add_input_port(InputPortHandle);
243  size_t add_output_port(OutputPortHandle);
244  virtual void removeInputPort(const PortId& id);
245 
246  private:
247  template <class T>
248  boost::shared_ptr<T> getRequiredInputAtIndex(const PortId& id);
249  template <class T>
250  boost::optional<boost::shared_ptr<T>> getOptionalInputAtIndex(const PortId& id);
251  template <class T>
252  boost::shared_ptr<T> checkInput(SCIRun::Core::Datatypes::DatatypeHandleOption inputOpt, const PortId& id);
253 
254  boost::atomic<bool> inputsChanged_;
255  bool inputsChanged() const;
256 
257  friend class Builder;
258 
259  bool has_ui_;
260 
262 
263  ModuleStateHandle state_;
266 
267  ExecuteBeginsSignalType executeBegins_;
268  ExecuteEndsSignalType executeEnds_;
269  ErrorSignalType errorSignal_;
270  boost::atomic<ExecutionState> executionState_;
271  std::vector<boost::shared_ptr<boost::signals2::scoped_connection>> portConnections_;
272 
275  UiToggleFunc uiToggleFunc_;
276  static int instanceCount_;
277  static SCIRun::Core::Logging::LoggerHandle defaultLogger_;
278  };
279 
280  template <class T>
281  boost::shared_ptr<T> Module::getRequiredInputAtIndex(const PortId& id)
282  {
283  auto inputOpt = get_input_handle(id);
284  if (!inputOpt)
285  MODULE_ERROR_WITH_TYPE(NoHandleOnPortException, "Input data required on port " + id.name);
286 
287  return checkInput<T>(inputOpt, id);
288  }
289 
290  template <class T, size_t N>
291  boost::shared_ptr<T> Module::getRequiredInput(const StaticPortName<T,N>& port)
292  {
293  return getRequiredInputAtIndex<T>(port.toId());
294  }
295 
296  template <class T>
297  boost::optional<boost::shared_ptr<T>> Module::getOptionalInputAtIndex(const PortId& id)
298  {
299  auto inputOpt = get_input_handle(id);
300  if (!inputOpt)
301  return boost::optional<boost::shared_ptr<T>>();
302 
303  return checkInput<T>(inputOpt, id);
304  }
305 
306  template <class T, size_t N>
307  std::vector<boost::shared_ptr<T>> Module::getRequiredDynamicInputs(const DynamicPortName<T,N>& port)
308  {
309  auto handleOptions = get_dynamic_input_handles(port.id_);
310  std::vector<boost::shared_ptr<T>> handles;
311  auto check = [&, this](SCIRun::Core::Datatypes::DatatypeHandleOption opt) { return this->checkInput<T>(opt, port.id_); };
312  auto end = handleOptions.end() - 1; //leave off empty final port
313  std::transform(handleOptions.begin(), end, std::back_inserter(handles), check);
314  if (handles.empty())
315  MODULE_ERROR_WITH_TYPE(NoHandleOnPortException, "Input data required on port " + port.id_.name);
316  return handles;
317  }
318 
319  template <class T, size_t N>
320  std::vector<boost::shared_ptr<T>> Module::getOptionalDynamicInputs(const DynamicPortName<T,N>& port)
321  {
322  auto handleOptions = get_dynamic_input_handles(port.id_);
323  std::vector<boost::shared_ptr<T>> handles;
324  auto check = [&, this](SCIRun::Core::Datatypes::DatatypeHandleOption opt) { return this->checkInput<T>(opt, port.id_); };
325  auto end = handleOptions.end() - 1; //leave off empty final port
326  std::transform(handleOptions.begin(), end, std::back_inserter(handles), check);
327  return handles;
328  }
329 
330  template <class T, size_t N>
331  boost::optional<boost::shared_ptr<T>> Module::getOptionalInput(const StaticPortName<T,N>& port)
332  {
333  return getOptionalInputAtIndex<T>(port.id_);
334  }
335 
336  template <class T, class D, size_t N>
337  void Module::sendOutput(const StaticPortName<T,N>& port, boost::shared_ptr<D> data)
338  {
339  const bool datatypeForThisPortMustBeCompatible = boost::is_base_of<T,D>::value;
340  BOOST_STATIC_ASSERT(datatypeForThisPortMustBeCompatible);
341  send_output_handle(port.id_, data);
342  }
343 
344  template <class T, size_t N>
346  {
347  sendOutput<T, T, N>(port, output.get<T>(Core::Algorithms::AlgorithmParameterName(port)));
348  }
349 
350  template <class T>
351  boost::shared_ptr<T> Module::checkInput(SCIRun::Core::Datatypes::DatatypeHandleOption inputOpt, const PortId& id)
352  {
353  if (!*inputOpt)
354  MODULE_ERROR_WITH_TYPE(NullHandleOnPortException, "Null handle on port " + id.name);
355 
356  boost::shared_ptr<T> data = boost::dynamic_pointer_cast<T>(*inputOpt);
357  if (!data)
358  {
359  std::ostringstream ostr;
360  ostr << "Wrong datatype on port #" << id.name << "; expected " << typeid(T).name() << " but received " << typeid(*inputOpt).name();
362  }
363  return data;
364  }
365 
367  {
368  public:
369  explicit ModuleWithAsyncDynamicPorts(const ModuleLookupInfo& info);
370  virtual bool hasDynamicPorts() const override { return true; }
371  virtual void execute() override;
372  virtual void asyncExecute(const Dataflow::Networks::PortId& pid, Core::Datatypes::DatatypeHandle data) = 0;
373  virtual void portRemovedSlot(const ModuleId& mid, const PortId& pid) override;
374  protected:
375  virtual void portRemovedSlotImpl(const PortId& pid) = 0;
376  virtual size_t add_input_port(InputPortHandle h) override;
377  private:
378  bool asyncConnected_;
379  };
380 
381 }}
382 
383 
384 namespace Modules
385 {
386 
395 
396  template <typename Base>
397  struct DynamicPortTag : Base
398  {
399  typedef Base type;
400  };
401 
402  template <typename Base>
404  {
405  typedef Base type;
406  };
407 
408  template <size_t N>
410  {
411  enum { NumIPorts = N };
412  };
413 
414  template <size_t N>
416  {
417  enum { NumOPorts = N };
418  };
419 
422 
423  //MEGA TODO: these will become variadic templates in VS2013
424  template <class PortTypeTag>
425  class Has1InputPort : public NumInputPorts<1>
426  {
427  public:
428  static std::vector<SCIRun::Dataflow::Networks::InputPortDescription> inputPortDescription(const std::string& port0Name);
429  };
430 
431  template <class PortTypeTag0, class PortTypeTag1>
432  class Has2InputPorts : public NumInputPorts<2>
433  {
434  public:
435  static std::vector<SCIRun::Dataflow::Networks::InputPortDescription> inputPortDescription(const std::string& port0Name, const std::string& port1Name)
436  {
437  /// @todo: use move semantics
439  ports.push_back(Has1InputPort<PortTypeTag1>::inputPortDescription(port1Name)[0]);
440  return ports;
441  }
442  };
443 
444  template <class PortTypeTag0, class PortTypeTag1, class PortTypeTag2>
445  class Has3InputPorts : public NumInputPorts<3>
446  {
447  public:
448  static std::vector<SCIRun::Dataflow::Networks::InputPortDescription> inputPortDescription(const std::string& port0Name, const std::string& port1Name, const std::string& port2Name)
449  {
450  auto ports = Has2InputPorts<PortTypeTag0, PortTypeTag1>::inputPortDescription(port0Name, port1Name);
451  ports.push_back(Has1InputPort<PortTypeTag2>::inputPortDescription(port2Name)[0]);
452  return ports;
453  }
454  };
455 
456  template <class PortTypeTag0, class PortTypeTag1, class PortTypeTag2, class PortTypeTag3>
457  class Has4InputPorts : public NumInputPorts<4>
458  {
459  public:
460  static std::vector<SCIRun::Dataflow::Networks::InputPortDescription> inputPortDescription(const std::string& port0Name, const std::string& port1Name, const std::string& port2Name, const std::string& port3Name)
461  {
462  auto ports = Has3InputPorts<PortTypeTag0, PortTypeTag1, PortTypeTag2>::inputPortDescription(port0Name, port1Name, port2Name);
463  ports.push_back(Has1InputPort<PortTypeTag3>::inputPortDescription(port3Name)[0]);
464  return ports;
465  }
466  };
467 
468  template <class PortTypeTag0, class PortTypeTag1, class PortTypeTag2, class PortTypeTag3, class PortTypeTag4>
469  class Has5InputPorts : public NumInputPorts<5>
470  {
471  public:
472  static std::vector<SCIRun::Dataflow::Networks::InputPortDescription> inputPortDescription(const std::string& port0Name, const std::string& port1Name, const std::string& port2Name, const std::string& port3Name, const std::string& port4Name)
473  {
474  auto ports = Has4InputPorts<PortTypeTag0, PortTypeTag1, PortTypeTag2, PortTypeTag3>::inputPortDescription(port0Name, port1Name, port2Name, port3Name);
475  ports.push_back(Has1InputPort<PortTypeTag4>::inputPortDescription(port4Name)[0]);
476  return ports;
477  }
478  };
479 
480  template <class PortTypeTag0, class PortTypeTag1, class PortTypeTag2, class PortTypeTag3, class PortTypeTag4, class PortTypeTag5>
481  class Has6InputPorts : public NumInputPorts<6>
482  {
483  public:
484  static std::vector<SCIRun::Dataflow::Networks::InputPortDescription> inputPortDescription(const std::string& port0Name, const std::string& port1Name, const std::string& port2Name, const std::string& port3Name, const std::string& port4Name, const std::string& port5Name)
485  {
486  auto ports = Has5InputPorts<PortTypeTag0, PortTypeTag1, PortTypeTag2, PortTypeTag3, PortTypeTag4>::inputPortDescription(port0Name, port1Name, port2Name, port3Name, port4Name);
487  ports.push_back(Has1InputPort<PortTypeTag5>::inputPortDescription(port5Name)[0]);
488  return ports;
489  }
490  };
491 
492  template <class PortTypeTag0, class PortTypeTag1, class PortTypeTag2, class PortTypeTag3, class PortTypeTag4, class PortTypeTag5, class PortTypeTag6>
493  class Has7InputPorts : public NumInputPorts<7>
494  {
495  public:
496  static std::vector<SCIRun::Dataflow::Networks::InputPortDescription> inputPortDescription(const std::string& port0Name, const std::string& port1Name, const std::string& port2Name, const std::string& port3Name, const std::string& port4Name, const std::string& port5Name, const std::string& port6Name)
497  {
498  auto ports = Has6InputPorts<PortTypeTag0, PortTypeTag1, PortTypeTag2, PortTypeTag3, PortTypeTag4, PortTypeTag5>::inputPortDescription(port0Name, port1Name, port2Name, port3Name, port4Name, port5Name);
499  ports.push_back(Has1InputPort<PortTypeTag6>::inputPortDescription(port6Name)[0]);
500  return ports;
501  }
502  };
503 
504  template <class PortTypeTag>
505  class Has1OutputPort : public NumOutputPorts<1>
506  {
507  public:
508  static std::vector<SCIRun::Dataflow::Networks::OutputPortDescription> outputPortDescription(const std::string& port0Name);
509  };
510 
511  template <class PortTypeTag0, class PortTypeTag1>
512  class Has2OutputPorts : public NumOutputPorts<2>
513  {
514  public:
515  static std::vector<SCIRun::Dataflow::Networks::OutputPortDescription> outputPortDescription(const std::string& port0Name, const std::string& port1Name)
516  {
517  /// @todo: use move semantics
519  ports.push_back(Has1OutputPort<PortTypeTag1>::outputPortDescription(port1Name)[0]);
520  return ports;
521  }
522  };
523 
524  template <class PortTypeTag0, class PortTypeTag1, class PortTypeTag2>
525  class Has3OutputPorts : public NumOutputPorts<3>
526  {
527  public:
528  static std::vector<SCIRun::Dataflow::Networks::OutputPortDescription> outputPortDescription(const std::string& port0Name, const std::string& port1Name, const std::string& port2Name)
529  {
531  ports.push_back(Has1OutputPort<PortTypeTag2>::outputPortDescription(port2Name)[0]);
532  return ports;
533  }
534  };
535 
536  template <class PortTypeTag0, class PortTypeTag1, class PortTypeTag2, class PortTypeTag3>
537  class Has4OutputPorts : public NumOutputPorts<4>
538  {
539  public:
540  static std::vector<SCIRun::Dataflow::Networks::OutputPortDescription> outputPortDescription(const std::string& port0Name, const std::string& port1Name, const std::string& port2Name, const std::string& port3Name)
541  {
542  auto ports = Has3OutputPorts<PortTypeTag0, PortTypeTag1, PortTypeTag2>::outputPortDescription(port0Name, port1Name, port2Name);
543  ports.push_back(Has1OutputPort<PortTypeTag3>::outputPortDescription(port3Name)[0]);
544  return ports;
545  }
546  };
547 
548  template <class PortTypeTag0, class PortTypeTag1, class PortTypeTag2, class PortTypeTag3, class PortTypeTag4>
549  class Has5OutputPorts : public NumOutputPorts<5>
550  {
551  public:
552  static std::vector<SCIRun::Dataflow::Networks::OutputPortDescription> outputPortDescription(const std::string& port0Name, const std::string& port1Name, const std::string& port2Name, const std::string& port3Name, const std::string& port4Name)
553  {
554  auto ports = Has4OutputPorts<PortTypeTag0, PortTypeTag1, PortTypeTag2, PortTypeTag3>::outputPortDescription(port0Name, port1Name, port2Name, port3Name);
555  ports.push_back(Has1OutputPort<PortTypeTag4>::outputPortDescription(port4Name)[0]);
556  return ports;
557  }
558  };
559 
560  template <class PortTypeTag0, class PortTypeTag1, class PortTypeTag2, class PortTypeTag3, class PortTypeTag4, class PortTypeTag5>
561  class Has6OutputPorts : public NumOutputPorts<6>
562  {
563  public:
564  static std::vector<SCIRun::Dataflow::Networks::OutputPortDescription> outputPortDescription(const std::string& port0Name, const std::string& port1Name, const std::string& port2Name, const std::string& port3Name, const std::string& port4Name, const std::string& port5Name)
565  {
566  auto ports = Has5OutputPorts<PortTypeTag0, PortTypeTag1, PortTypeTag2, PortTypeTag3, PortTypeTag4>::outputPortDescription(port0Name, port1Name, port2Name, port3Name, port4Name);
567  ports.push_back(Has1OutputPort<PortTypeTag5>::outputPortDescription(port5Name)[0]);
568  return ports;
569  }
570  };
571 
572  template <class PortTypeTag0, class PortTypeTag1, class PortTypeTag2, class PortTypeTag3, class PortTypeTag4, class PortTypeTag5, class PortTypeTag6>
573  class Has7OutputPorts : public NumOutputPorts<7>
574  {
575  public:
576  static std::vector<SCIRun::Dataflow::Networks::OutputPortDescription> outputPortDescription(const std::string& port0Name, const std::string& port1Name, const std::string& port2Name, const std::string& port3Name, const std::string& port4Name, const std::string& port5Name, const std::string& port6Name)
577  {
578  auto ports = Has6OutputPorts<PortTypeTag0, PortTypeTag1, PortTypeTag2, PortTypeTag3, PortTypeTag4, PortTypeTag5>::outputPortDescription(port0Name, port1Name, port2Name, port3Name, port4Name, port5Name);
579  ports.push_back(Has1OutputPort<PortTypeTag6>::outputPortDescription(port6Name)[0]);
580  return ports;
581  }
582  };
583 
584  template <class PortTypeTag0, class PortTypeTag1, class PortTypeTag2, class PortTypeTag3, class PortTypeTag4, class PortTypeTag5, class PortTypeTag6, class PortTypeTag7>
585  class Has8OutputPorts : public NumOutputPorts<8>
586  {
587  public:
588  static std::vector<SCIRun::Dataflow::Networks::OutputPortDescription> outputPortDescription(const std::string& port0Name, const std::string& port1Name, const std::string& port2Name, const std::string& port3Name, const std::string& port4Name, const std::string& port5Name, const std::string& port6Name, const std::string& port7Name)
589  {
590  auto ports = Has7OutputPorts<PortTypeTag0, PortTypeTag1, PortTypeTag2, PortTypeTag3, PortTypeTag4, PortTypeTag5, PortTypeTag6>::outputPortDescription(port0Name, port1Name, port2Name, port3Name, port4Name, port5Name, port6Name);
591  ports.push_back(Has1OutputPort<PortTypeTag6>::outputPortDescription(port7Name)[0]);
592  return ports;
593  }
594  };
595 
596  template <class PortTypeTag0, class PortTypeTag1, class PortTypeTag2, class PortTypeTag3, class PortTypeTag4, class PortTypeTag5, class PortTypeTag6, class PortTypeTag7, class PortTypeTag8>
597  class Has9OutputPorts : public NumOutputPorts<9>
598  {
599  public:
600  static std::vector<SCIRun::Dataflow::Networks::OutputPortDescription> outputPortDescription(const std::string& port0Name, const std::string& port1Name, const std::string& port2Name, const std::string& port3Name, const std::string& port4Name, const std::string& port5Name, const std::string& port6Name, const std::string& port7Name, const std::string& port8Name)
601  {
602  auto ports = Has8OutputPorts<PortTypeTag0, PortTypeTag1, PortTypeTag2, PortTypeTag3, PortTypeTag4, PortTypeTag5, PortTypeTag6, PortTypeTag7>::outputPortDescription(port0Name, port1Name, port2Name, port3Name, port4Name, port5Name, port6Name, port7Name);
603  ports.push_back(Has1OutputPort<PortTypeTag6>::outputPortDescription(port8Name)[0]);
604  return ports;
605  }
606  };
607 
608 #define PORT_SPEC(type) template <>\
609  class Has1InputPort<type ##PortTag> : public NumInputPorts<1>\
610  {\
611  public:\
612  static std::vector<SCIRun::Dataflow::Networks::InputPortDescription> inputPortDescription(const std::string& port0Name)\
613  {\
614  std::vector<SCIRun::Dataflow::Networks::InputPortDescription> ports;\
615  ports.push_back(SCIRun::Dataflow::Networks::PortDescription(SCIRun::Dataflow::Networks::PortId(0, port0Name), #type, false)); \
616  return ports;\
617  }\
618  };\
619  template <>\
620  class Has1OutputPort<type ##PortTag> : public NumOutputPorts<1>\
621  {\
622  public:\
623  static std::vector<SCIRun::Dataflow::Networks::OutputPortDescription> outputPortDescription(const std::string& port0Name)\
624  {\
625  std::vector<SCIRun::Dataflow::Networks::OutputPortDescription> ports;\
626  ports.push_back(SCIRun::Dataflow::Networks::PortDescription(SCIRun::Dataflow::Networks::PortId(0, port0Name), #type, false)); \
627  return ports;\
628  }\
629  };\
630  template <>\
631  class Has1InputPort<DynamicPortTag<type ## PortTag>> : public NumInputPorts<1>\
632  {\
633  public:\
634  static std::vector<SCIRun::Dataflow::Networks::InputPortDescription> inputPortDescription(const std::string& port0Name)\
635  {\
636  std::vector<SCIRun::Dataflow::Networks::InputPortDescription> ports;\
637  ports.push_back(SCIRun::Dataflow::Networks::PortDescription(SCIRun::Dataflow::Networks::PortId(0, port0Name), #type, true)); \
638  return ports;\
639  }\
640  };\
641  template <>\
642  class Has1InputPort<AsyncDynamicPortTag<type ## PortTag>> : public NumInputPorts<1>\
643  {\
644  public:\
645  static std::vector<SCIRun::Dataflow::Networks::InputPortDescription> inputPortDescription(const std::string& port0Name)\
646  {\
647  std::vector<SCIRun::Dataflow::Networks::InputPortDescription> ports;\
648  ports.push_back(SCIRun::Dataflow::Networks::PortDescription(SCIRun::Dataflow::Networks::PortId(0, port0Name), #type, true)); \
649  return ports;\
650  }\
651  }\
652 
653  PORT_SPEC(Matrix);
654  PORT_SPEC(Scalar);
655  PORT_SPEC(String);
656  PORT_SPEC(Field);
657  PORT_SPEC(Geometry);
658  PORT_SPEC(ColorMap);
659  PORT_SPEC(Bundle);
660  PORT_SPEC(Datatype);
661 
662 #define ATTACH_NAMESPACE(type) Core::Datatypes::type
663 #define ATTACH_NAMESPACE2(type) SCIRun::Core::Datatypes::type
664 
665 #define INPUT_PORT(index, name, type) static std::string inputPort ## index ## Name() { return #name; } \
666  StaticPortName< ATTACH_NAMESPACE(type), index > name;
667 
668 #define INPUT_PORT_DYNAMIC(index, name, type) static std::string inputPort ## index ## Name() { return #name; } \
669  DynamicPortName< ATTACH_NAMESPACE(type), index > name;
670 
671 #define OUTPUT_PORT(index, name, type) static std::string outputPort ## index ## Name() { return #name; } \
672  StaticPortName< ATTACH_NAMESPACE(type), index> name;
673 
674 #define INITIALIZE_PORT(nameObj) do{ nameObj.id_.name = #nameObj; }while(0);
675 
676  /// @todo: make metafunc for Input/Output
677 
678  template <size_t numPorts, class ModuleType>
680  {
681  static std::vector<SCIRun::Dataflow::Networks::InputPortDescription> inputs()
682  {
683  return std::vector<SCIRun::Dataflow::Networks::InputPortDescription>();
684  }
685  };
686 
687  template <class ModuleType>
688  struct IPortDescriber<1, ModuleType>
689  {
690  static std::vector<SCIRun::Dataflow::Networks::InputPortDescription> inputs()
691  {
692  return ModuleType::inputPortDescription(ModuleType::inputPort0Name());
693  }
694  };
695 
696  template <class ModuleType>
697  struct IPortDescriber<2, ModuleType>
698  {
699  static std::vector<SCIRun::Dataflow::Networks::InputPortDescription> inputs()
700  {
701  return ModuleType::inputPortDescription(ModuleType::inputPort0Name(), ModuleType::inputPort1Name());
702  }
703  };
704 
705  template <class ModuleType>
706  struct IPortDescriber<3, ModuleType>
707  {
708  static std::vector<SCIRun::Dataflow::Networks::InputPortDescription> inputs()
709  {
710  return ModuleType::inputPortDescription(ModuleType::inputPort0Name(), ModuleType::inputPort1Name(), ModuleType::inputPort2Name());
711  }
712  };
713 
714  template <class ModuleType>
715  struct IPortDescriber<4, ModuleType>
716  {
717  static std::vector<SCIRun::Dataflow::Networks::InputPortDescription> inputs()
718  {
719  return ModuleType::inputPortDescription(ModuleType::inputPort0Name(), ModuleType::inputPort1Name(), ModuleType::inputPort2Name(), ModuleType::inputPort3Name());
720  }
721  };
722 
723  template <class ModuleType>
724  struct IPortDescriber<5, ModuleType>
725  {
726  static std::vector<SCIRun::Dataflow::Networks::InputPortDescription> inputs()
727  {
728  return ModuleType::inputPortDescription(ModuleType::inputPort0Name(), ModuleType::inputPort1Name(), ModuleType::inputPort2Name(), ModuleType::inputPort3Name(), ModuleType::inputPort4Name());
729  }
730  };
731 
732  template <class ModuleType>
733  struct IPortDescriber<6, ModuleType>
734  {
735  static std::vector<SCIRun::Dataflow::Networks::InputPortDescription> inputs()
736  {
737  return ModuleType::inputPortDescription(ModuleType::inputPort0Name(), ModuleType::inputPort1Name(), ModuleType::inputPort2Name(), ModuleType::inputPort3Name(), ModuleType::inputPort4Name(), ModuleType::inputPort5Name());
738  }
739  };
740 
741  template <class ModuleType>
742  struct IPortDescriber<7, ModuleType>
743  {
744  static std::vector<SCIRun::Dataflow::Networks::InputPortDescription> inputs()
745  {
746  return ModuleType::inputPortDescription(ModuleType::inputPort0Name(), ModuleType::inputPort1Name(), ModuleType::inputPort2Name(), ModuleType::inputPort3Name(), ModuleType::inputPort4Name(), ModuleType::inputPort5Name(), ModuleType::inputPort6Name());
747  }
748  };
749 
750  template <class ModuleType>
751  struct IPortDescriber<8, ModuleType>
752  {
753  static std::vector<SCIRun::Dataflow::Networks::InputPortDescription> inputs()
754  {
755  return ModuleType::inputPortDescription(ModuleType::inputPort0Name(), ModuleType::inputPort1Name(), ModuleType::inputPort2Name(), ModuleType::inputPort3Name(), ModuleType::inputPort4Name(), ModuleType::inputPort5Name(), ModuleType::inputPort6Name(), ModuleType::inputPort7Name());
756  }
757  };
758 
759  template <class ModuleType>
760  struct IPortDescriber<9, ModuleType>
761  {
762  static std::vector<SCIRun::Dataflow::Networks::InputPortDescription> inputs()
763  {
764  return ModuleType::inputPortDescription(ModuleType::inputPort0Name(), ModuleType::inputPort1Name(), ModuleType::inputPort2Name(), ModuleType::inputPort3Name(), ModuleType::inputPort4Name(), ModuleType::inputPort5Name(), ModuleType::inputPort6Name(), ModuleType::inputPort7Name(), ModuleType::inputPort8Name());
765  }
766  };
767 
768  template <size_t numPorts, class ModuleType>
770  {
771  static std::vector<SCIRun::Dataflow::Networks::OutputPortDescription> outputs()
772  {
773  return std::vector<SCIRun::Dataflow::Networks::OutputPortDescription>();
774  }
775  };
776 
777  template <class ModuleType>
778  struct OPortDescriber<1, ModuleType>
779  {
780  static std::vector<SCIRun::Dataflow::Networks::OutputPortDescription> outputs()
781  {
782  return ModuleType::outputPortDescription(ModuleType::outputPort0Name());
783  }
784  };
785 
786  template <class ModuleType>
787  struct OPortDescriber<2, ModuleType>
788  {
789  static std::vector<SCIRun::Dataflow::Networks::OutputPortDescription> outputs()
790  {
791  return ModuleType::outputPortDescription(ModuleType::outputPort0Name(), ModuleType::outputPort1Name());
792  }
793  };
794 
795  template <class ModuleType>
796  struct OPortDescriber<3, ModuleType>
797  {
798  static std::vector<SCIRun::Dataflow::Networks::OutputPortDescription> outputs()
799  {
800  return ModuleType::outputPortDescription(ModuleType::outputPort0Name(), ModuleType::outputPort1Name(), ModuleType::outputPort2Name());
801  }
802  };
803 
804  template <class ModuleType>
805  struct OPortDescriber<4, ModuleType>
806  {
807  static std::vector<SCIRun::Dataflow::Networks::OutputPortDescription> outputs()
808  {
809  return ModuleType::outputPortDescription(ModuleType::outputPort0Name(), ModuleType::outputPort1Name(), ModuleType::outputPort2Name(), ModuleType::outputPort3Name());
810  }
811  };
812 
813  template <class ModuleType>
814  struct OPortDescriber<5, ModuleType>
815  {
816  static std::vector<SCIRun::Dataflow::Networks::OutputPortDescription> outputs()
817  {
818  return ModuleType::outputPortDescription(ModuleType::outputPort0Name(), ModuleType::outputPort1Name(), ModuleType::outputPort2Name(), ModuleType::outputPort3Name(), ModuleType::outputPort4Name());
819  }
820  };
821 
822  template <class ModuleType>
823  struct OPortDescriber<6, ModuleType>
824  {
825  static std::vector<SCIRun::Dataflow::Networks::OutputPortDescription> outputs()
826  {
827  return ModuleType::outputPortDescription(ModuleType::outputPort0Name(), ModuleType::outputPort1Name(), ModuleType::outputPort2Name(), ModuleType::outputPort3Name(), ModuleType::outputPort4Name(), ModuleType::outputPort5Name());
828  }
829  };
830 
831  template <class ModuleType>
832  struct OPortDescriber<7, ModuleType>
833  {
834  static std::vector<SCIRun::Dataflow::Networks::OutputPortDescription> outputs()
835  {
836  return ModuleType::outputPortDescription(ModuleType::outputPort0Name(), ModuleType::outputPort1Name(), ModuleType::outputPort2Name(), ModuleType::outputPort3Name(), ModuleType::outputPort4Name(), ModuleType::outputPort5Name(), ModuleType::outputPort6Name());
837  }
838  };
839 
840  template <class ModuleType>
841  struct OPortDescriber<8, ModuleType>
842  {
843  static std::vector<SCIRun::Dataflow::Networks::OutputPortDescription> outputs()
844  {
845  return ModuleType::outputPortDescription(ModuleType::outputPort0Name(), ModuleType::outputPort1Name(), ModuleType::outputPort2Name(), ModuleType::outputPort3Name(), ModuleType::outputPort4Name(), ModuleType::outputPort5Name(), ModuleType::outputPort6Name(), ModuleType::outputPort7Name());
846  }
847  };
848 
849  template <class ModuleType>
850  struct OPortDescriber<9, ModuleType>
851  {
852  static std::vector<SCIRun::Dataflow::Networks::OutputPortDescription> outputs()
853  {
854  return ModuleType::outputPortDescription(ModuleType::outputPort0Name(), ModuleType::outputPort1Name(), ModuleType::outputPort2Name(), ModuleType::outputPort3Name(), ModuleType::outputPort4Name(), ModuleType::outputPort5Name(), ModuleType::outputPort6Name(), ModuleType::outputPort7Name(), ModuleType::outputPort8Name());
855  }
856  };
857 }
858 }
859 
860 #endif
boost::shared_ptr< T > getRequiredInput(const StaticPortName< T, N > &port)
Definition: Module.h:291
boost::optional< DatatypeHandle > DatatypeHandleOption
Definition: DatatypeFwd.h:47
boost::optional< boost::shared_ptr< T > > getOptionalInput(const StaticPortName< T, N > &port)
Definition: Module.h:331
Definition: Module.h:397
Definition: Module.h:457
virtual SCIRun::Core::Algorithms::AlgorithmStatusReporter::UpdaterFunc getUpdaterFunc() const
Definition: Module.h:111
#define msg(m)
Definition: PiecewiseInterp.h:55
#define private
Definition: Thread_none.cc:52
virtual void status(const std::string &msg) const
Definition: Module.h:109
Definition: Module.h:392
boost::shared_ptr< LegacyLoggerInterface > LoggerHandle
Definition: LoggerFwd.h:42
static std::vector< SCIRun::Dataflow::Networks::OutputPortDescription > outputPortDescription(const std::string &port0Name, const std::string &port1Name, const std::string &port2Name, const std::string &port3Name)
Definition: Module.h:540
Definition: AlgorithmBase.h:52
void sendOutput(const StaticPortName< T, N > &port, boost::shared_ptr< D > data)
Definition: Module.h:337
static std::vector< SCIRun::Dataflow::Networks::InputPortDescription > inputs()
Definition: Module.h:690
std::string get_packagename() const
Definition: Module.h:65
Definition: AlgorithmBase.h:296
Definition: LoggerInterface.h:43
Definition: Module.h:403
static std::vector< SCIRun::Dataflow::Networks::OutputPortDescription > outputs()
Definition: Module.h:798
Definition: Module.h:573
std::string name
Definition: ModuleDescription.h:51
boost::signals2::signal< void(const ModuleId &)> ExecuteEndsSignalType
Definition: ExecutableObject.h:42
Definition: ModuleStateInterface.h:105
Definition: Module.h:769
PortNameBase(const PortId &id)
Definition: Module.h:135
Definition: ModuleDescription.h:99
Definition: ModuleInterface.h:134
ModuleId get_id() const
Definition: Module.h:66
static std::vector< SCIRun::Dataflow::Networks::OutputPortDescription > outputPortDescription(const std::string &port0Name, const std::string &port1Name, const std::string &port2Name, const std::string &port3Name, const std::string &port4Name, const std::string &port5Name, const std::string &port6Name)
Definition: Module.h:576
Definition: Module.h:389
static std::vector< SCIRun::Dataflow::Networks::OutputPortDescription > outputPortDescription(const std::string &port0Name, const std::string &port1Name)
Definition: Module.h:515
#define MODULE_ERROR_WITH_TYPE(type, message)
Definition: ModuleInterface.h:141
Definition: ModuleInterface.h:81
static std::vector< SCIRun::Dataflow::Networks::OutputPortDescription > outputs()
Definition: Module.h:789
Definition: AlgorithmBase.h:219
virtual void setUiToggleFunc(UiToggleFunc func)
Definition: Module.h:113
boost::function< class Module *()> ModuleMaker
Definition: ModuleDescription.h:108
Definition: Module.h:597
boost::function< void(double)> UpdaterFunc
Definition: AlgorithmBase.h:155
static std::vector< SCIRun::Dataflow::Networks::InputPortDescription > inputPortDescription(const std::string &port0Name, const std::string &port1Name, const std::string &port2Name, const std::string &port3Name, const std::string &port4Name)
Definition: Module.h:472
Base type
Definition: Module.h:399
boost::shared_ptr< ModuleStateInterface > ModuleStateHandle
Definition: NetworkFwd.h:75
Definition: Module.h:469
boost::function< SCIRun::Dataflow::Networks::DatatypeSourceInterface *()> SourceMaker
Definition: Module.h:204
Definition: Module.h:415
#define SCISHARE
Definition: share.h:39
Definition: Module.h:505
virtual void set_id(const std::string &id)
Definition: Module.h:70
boost::shared_ptr< OutputPortInterface > OutputPortHandle
Definition: NetworkFwd.h:80
Definition: Module.h:512
static std::vector< SCIRun::Dataflow::Networks::OutputPortDescription > outputs()
Definition: Module.h:780
boost::shared_ptr< ModuleStateInterfaceFactory > ModuleStateFactoryHandle
Definition: NetworkFwd.h:76
virtual void remark(const std::string &msg) const
Definition: Module.h:108
Definition: Module.h:525
boost::error_info< struct tag_error_message, std::string > ErrorMessage
Definition: Exception.h:52
Definition: Module.h:432
static std::vector< SCIRun::Dataflow::Networks::OutputPortDescription > outputPortDescription(const std::string &port0Name)
virtual bool hasDynamicPorts() const
Definition: Module.h:125
Definition: Module.h:420
Definition: Module.h:388
static std::vector< SCIRun::Dataflow::Networks::OutputPortDescription > outputs()
Definition: Module.h:771
boost::shared_ptr< InputPortInterface > InputPortHandle
Definition: NetworkFwd.h:79
boost::shared_ptr< AlgorithmFactory > AlgorithmFactoryHandle
Definition: AlgorithmFwd.h:42
bool has_ui() const
Definition: Module.h:75
static std::vector< SCIRun::Dataflow::Networks::InputPortDescription > inputPortDescription(const std::string &port0Name, const std::string &port1Name)
Definition: Module.h:435
Definition: BoostGraphExampleTests.cc:86
static std::vector< SCIRun::Dataflow::Networks::InputPortDescription > inputs()
Definition: Module.h:699
static std::vector< SCIRun::Dataflow::Networks::OutputPortDescription > outputs()
Definition: Module.h:843
static std::vector< SCIRun::Dataflow::Networks::OutputPortDescription > outputs()
Definition: Module.h:816
std::vector< boost::shared_ptr< T > > getRequiredDynamicInputs(const DynamicPortName< T, N > &port)
Definition: Module.h:307
Definition: Module.h:549
static std::vector< SCIRun::Dataflow::Networks::InputPortDescription > inputPortDescription(const std::string &port0Name, const std::string &port1Name, const std::string &port2Name, const std::string &port3Name, const std::string &port4Name, const std::string &port5Name, const std::string &port6Name)
Definition: Module.h:496
Definition: Module.h:390
ModuleId id_
Definition: Module.h:220
std::vector< boost::shared_ptr< T > > getOptionalDynamicInputs(const DynamicPortName< T, N > &port)
Definition: Module.h:320
static std::vector< SCIRun::Dataflow::Networks::OutputPortDescription > outputs()
Definition: Module.h:834
Definition: Module.h:481
const char * name[]
Definition: BoostGraphExampleTests.cc:87
Definition: Module.h:394
static std::vector< SCIRun::Dataflow::Networks::OutputPortDescription > outputs()
Definition: Module.h:807
DynamicPortName(const PortId &id=PortId(0,"[not defined yet]"))
Definition: Module.h:166
std::string get_categoryname() const
Definition: Module.h:64
static std::vector< SCIRun::Dataflow::Networks::OutputPortDescription > outputPortDescription(const std::string &port0Name, const std::string &port1Name, const std::string &port2Name)
Definition: Module.h:528
Definition: ModuleDescription.h:77
static std::vector< SCIRun::Dataflow::Networks::OutputPortDescription > outputs()
Definition: Module.h:852
static std::vector< SCIRun::Dataflow::Networks::OutputPortDescription > outputPortDescription(const std::string &port0Name, const std::string &port1Name, const std::string &port2Name, const std::string &port3Name, const std::string &port4Name, const std::string &port5Name)
Definition: Module.h:564
dictionary data
Definition: eabLatVolData.py:11
static std::vector< SCIRun::Dataflow::Networks::InputPortDescription > inputPortDescription(const std::string &port0Name, const std::string &port1Name, const std::string &port2Name)
Definition: Module.h:448
static std::vector< SCIRun::Dataflow::Networks::OutputPortDescription > outputPortDescription(const std::string &port0Name, const std::string &port1Name, const std::string &port2Name, const std::string &port3Name, const std::string &port4Name)
Definition: Module.h:552
static std::vector< SCIRun::Dataflow::Networks::OutputPortDescription > outputs()
Definition: Module.h:825
static Core::Algorithms::AlgorithmFactoryHandle defaultAlgoFactory_
Definition: Module.h:216
virtual Core::Algorithms::AlgorithmHandle getAlgorithm() const
Definition: Module.h:121
LegacyState
Definition: Module.h:225
std::string get_module_name() const
Definition: Module.h:63
static std::vector< SCIRun::Dataflow::Networks::InputPortDescription > inputPortDescription(const std::string &port0Name)
void update_state(LegacyState)
Definition: Module.h:231
Definition: Module.h:585
Definition: Module.h:421
boost::signals2::signal< void(const ModuleId &)> ErrorSignalType
Definition: ExecutableObject.h:43
static std::vector< SCIRun::Dataflow::Networks::InputPortDescription > inputPortDescription(const std::string &port0Name, const std::string &port1Name, const std::string &port2Name, const std::string &port3Name)
Definition: Module.h:460
LockingHandle< Datatype > DatatypeHandle
Definition: Datatype.h:71
Definition: Module.h:679
boost::signals2::signal< void(const ModuleId &)> ExecuteBeginsSignalType
Definition: ExecutableObject.h:41
static std::vector< SCIRun::Dataflow::Networks::OutputPortDescription > outputPortDescription(const std::string &port0Name, const std::string &port1Name, const std::string &port2Name, const std::string &port3Name, const std::string &port4Name, const std::string &port5Name, const std::string &port6Name, const std::string &port7Name, const std::string &port8Name)
Definition: Module.h:600
static std::vector< SCIRun::Dataflow::Networks::OutputPortDescription > outputPortDescription(const std::string &port0Name, const std::string &port1Name, const std::string &port2Name, const std::string &port3Name, const std::string &port4Name, const std::string &port5Name, const std::string &port6Name, const std::string &port7Name)
Definition: Module.h:588
static std::vector< SCIRun::Dataflow::Networks::InputPortDescription > inputPortDescription(const std::string &port0Name, const std::string &port1Name, const std::string &port2Name, const std::string &port3Name, const std::string &port4Name, const std::string &port5Name)
Definition: Module.h:484
Definition: Module.h:391
static std::vector< SCIRun::Dataflow::Networks::InputPortDescription > inputs()
Definition: Module.h:708
boost::shared_ptr< ModuleInterface > ModuleHandle
Definition: NetworkFwd.h:74
static std::vector< SCIRun::Dataflow::Networks::InputPortDescription > inputs()
Definition: Module.h:717
Definition: Module.h:53
Definition: Module.h:537
static std::vector< SCIRun::Dataflow::Networks::InputPortDescription > inputs()
Definition: Module.h:726
virtual const ModuleLookupInfo & get_info() const
Definition: Module.h:69
virtual bool hasDynamicPorts() const override
Definition: Module.h:370
static std::vector< SCIRun::Dataflow::Networks::InputPortDescription > inputs()
Definition: Module.h:735
boost::shared_ptr< AlgorithmBase > AlgorithmHandle
Definition: AlgorithmFwd.h:39
boost::function< void(bool)> UiToggleFunc
Definition: ModuleInterface.h:78
Definition: Module.h:445
Name AlgorithmParameterName
Definition: AlgorithmBase.h:70
static ModuleStateFactoryHandle defaultStateFactory_
Definition: Module.h:215
ModuleLookupInfo info_
Definition: Module.h:219
static std::vector< SCIRun::Dataflow::Networks::InputPortDescription > inputs()
Definition: Module.h:744
Definition: Module.h:387
Base type
Definition: Module.h:405
static std::vector< SCIRun::Dataflow::Networks::InputPortDescription > inputs()
Definition: Module.h:753
Definition: Module.h:493
Definition: Module.h:561
Definition: Module.h:425
Definition: ModuleDescription.h:45
PortId toId() const
Definition: Module.h:143
static std::vector< SCIRun::Dataflow::Networks::InputPortDescription > inputs()
Definition: Module.h:762
MatrixBase< double > Matrix
Definition: MatrixFwd.h:40
boost::shared_ptr< Datatype > DatatypeHandle
Definition: DatatypeFwd.h:44
Definition: Module.h:409
void sendOutputFromAlgorithm(const StaticPortName< T, N > &port, const Core::Algorithms::AlgorithmOutput &output)
Definition: Module.h:345
virtual void warning(const std::string &msg) const
Definition: Module.h:107
Definition: Module.h:393
static std::vector< SCIRun::Dataflow::Networks::InputPortDescription > inputs()
Definition: Module.h:681
boost::shared_ptr< T > get(const Name &name) const
Definition: AlgorithmBase.h:182
boost::function< SCIRun::Dataflow::Networks::DatatypeSinkInterface *()> SinkMaker
Definition: Module.h:203
StaticPortName(const PortId &id=PortId(0,"[not defined yet]"))
Definition: Module.h:160