stromx  0.8.0
OperatorKernel.h
1 /*
2 * Copyright 2011 Matthias Fuchs
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 
17 #ifndef STROMX_RUNTIME_OPERATORKERNEL_H
18 #define STROMX_RUNTIME_OPERATORKERNEL_H
19 
20 #include <map>
21 #include <set>
22 #include "stromx/runtime/DataRef.h"
23 #include "stromx/runtime/Exception.h"
24 #include "stromx/runtime/OperatorInfo.h"
25 
26 namespace stromx
27 {
28  namespace runtime
29  {
30  class DataContainer;
31  class DataProvider;
32 
33  namespace impl
34  {
35  class SynchronizedOperatorKernel;
36  }
37 
46  class STROMX_RUNTIME_API OperatorKernel : public OperatorInfo
47  {
48  friend class impl::SynchronizedOperatorKernel;
49  friend class OperatorKernelTest;
50 
51  public:
52  virtual ~OperatorKernel();
53 
59  virtual OperatorKernel* clone() const = 0;
60 
61  const std::string& type() const { return m_type; }
62 
63  const std::string& package() const { return m_package; }
64 
65  const Version& version() const { return m_version; }
66 
67  const std::vector<const Input*>& inputs() const { return m_visibleInputs; }
68 
69  const std::vector<const Output*>& outputs() const { return m_visibleOutputs; }
70 
71  const std::vector<const Parameter*>& parameters() const { return m_visibleParameters; }
72 
73  const Parameter & parameter(const unsigned int id) const;
74 
75  const Input & input(const unsigned int id) const;
76 
77  const Output & output(const unsigned int id) const;
78 
79  const Description & description(const unsigned int id) const;
80 
81  const OperatorProperties & properties() const;
82 
84  virtual void setParameter(const unsigned int, const Data&) { throw NotImplemented(); };
85 
87  virtual const DataRef getParameter(const unsigned int) const { throw NotImplemented(); };
88 
93  virtual void execute(DataProvider& provider) = 0;
94 
99  virtual void initialize();
100 
105  virtual void deinitialize();
106 
111  virtual void activate() {}
112 
117  virtual void deactivate() {}
118 
125  virtual void interrupt() {}
126 
127  protected:
141  OperatorKernel(const std::string & type,
142  const std::string & package,
143  const Version & version,
144  const std::vector<const Parameter*>& parameters,
145  const OperatorProperties & properties = OperatorProperties());
146 
168  OperatorKernel(const std::string & type,
169  const std::string & package,
170  const Version & version,
171  const std::vector<const Input*>& inputs,
172  const std::vector<const Output*>& outputs,
173  const std::vector<const Parameter*>& parameters,
174  const OperatorProperties & properties = OperatorProperties());
175 
189  OperatorKernel(const std::string& type,
190  const std::string& package,
191  const runtime::Version& version,
192  const std::vector<const Input* >& inputs,
193  const std::vector<const Output* >& outputs,
194  const OperatorProperties & properties = OperatorProperties());
195 
201  OperatorKernel(const std::string & type,
202  const std::string & package,
203  const Version & version,
204  const OperatorProperties & properties = OperatorProperties());
205 
225  virtual void initialize(const std::vector<const Input*>& inputs,
226  const std::vector<const Output*>& outputs,
227  const std::vector<const Parameter*>& parameters);
228 
232  Parameter & parameter(const unsigned int id);
233 
234  private:
235  void validateDescriptions(const std::vector<const Input*>& inputs,
236  const std::vector<const Output*>& outputs,
237  const std::vector<const Parameter*>& parameters);
238  void setupDefaultTypeMap();
239  void updateVisibleDescriptions(const bool isInitialized);
240  const Parameter & findParameter(const unsigned int id) const;
241  const Description* findDescription(const unsigned int id) const;
242  void setConnectorType(const unsigned int id, const Description::Type type,
243  const Parameter::UpdateBehavior updateBehavior = Parameter::PERSISTENT);
244 
245  std::string m_type;
246  std::string m_package;
247  Version m_version;
248  std::vector<const Input*> m_inputs;
249  std::vector<const Output*> m_outputs;
250  std::vector<const Parameter*> m_parameters;
251 
252  std::vector<const Input*> m_visibleInputs;
253  std::vector<const Output*> m_visibleOutputs;
254  std::vector<const Parameter*> m_visibleParameters;
255 
256  std::map<unsigned int, const Parameter*> m_parameterMap;
257  std::map<unsigned int, const Input*> m_inputMap;
258  std::map<unsigned int, const Output*> m_outputMap;
259 
260  // maps each description to its current type and update behavior
261  std::map<unsigned int, Description::Type> m_typeMap;
262  std::map<unsigned int, Description::UpdateBehavior> m_behaviorMap;
263 
264  // the indices of all inputs, output and parameters which have
265  // been added during initialization, i.e. which must be removed
266  // upon deinitialization
267  std::set<unsigned int> m_activeInputs;
268  std::set<unsigned int> m_activeOutputs;
269  std::set<unsigned int> m_activeParameters;
270 
271  OperatorProperties m_properties;
272  };
273  }
274 }
275 
276 #endif // STROMX_RUNTIME_OPERATORKERNEL_H
Abstract description of an ID to variant map.
Definition: Description.h:69
A version of an operator or data type.
Definition: Version.h:46
Abstract data object.
Definition: Data.h:53
Reference to a data object.
Definition: DataRef.h:48
virtual void activate()
Definition: OperatorKernel.h:111
virtual const DataRef getParameter(const unsigned int) const
Definition: OperatorKernel.h:87
Description of an input.
Definition: Input.h:28
Type
Definition: Description.h:73
virtual void setParameter(const unsigned int, const Data &)
Definition: OperatorKernel.h:84
Description of an input.
Definition: Output.h:28
Version version()
Returns the version of the stromx runtime library.
Definition: Runtime.cpp:54
UpdateBehavior
Definition: Description.h:86
The stromx class library.
Definition: AdjustRgbChannels.cpp:29
A function which is not implemented was called.
Definition: Exception.h:192
virtual void deactivate()
Definition: OperatorKernel.h:117
const std::string & package() const
Definition: OperatorKernel.h:63
const std::vector< const Output * > & outputs() const
Definition: OperatorKernel.h:69
const std::string & type() const
Definition: OperatorKernel.h:61
Meta-information about an operator.
Definition: OperatorInfo.h:51
Description of a parameter.
Definition: Parameter.h:34
Abstract operator kernel.
Definition: OperatorKernel.h:46
Provider of functions to receive and send data.
Definition: DataProvider.h:35
const std::vector< const Input * > & inputs() const
Definition: OperatorKernel.h:67
Definition: OperatorInfo.h:30
const std::vector< const Parameter * > & parameters() const
Definition: OperatorKernel.h:71
const Version & version() const
Definition: OperatorKernel.h:65
virtual void interrupt()
Definition: OperatorKernel.h:125
Definition: Description.h:99