Pothos  0.1.1
The Pothos dataflow programming software suite
 All Classes Namespaces Files Functions Variables Typedefs Friends Macros
Block.hpp
Go to the documentation of this file.
1 
11 #pragma once
12 #include <Pothos/Config.hpp>
19 #include <memory>
20 #include <string>
21 #include <vector>
22 #include <map>
23 
24 namespace Pothos {
25 
26  class BufferManager;
27 
38 {
39 public:
40 
42  explicit Block(void);
43 
45  virtual ~Block(void);
46 
48  void setThreadPool(const ThreadPool &threadPool);
49 
51  const ThreadPool &getThreadPool(void) const;
52 
53 protected:
54 
65  virtual void work(void);
66 
71  virtual void activate(void);
72 
77  virtual void deactivate(void);
78 
96  virtual void propagateLabels(const InputPort *input);
97 
108  virtual Object opaqueCallHandler(const std::string &name, const Object *inputArgs, const size_t numArgs);
109 
125  virtual std::shared_ptr<BufferManager> getInputBufferManager(const std::string &name, const std::string &domain);
126 
142  virtual std::shared_ptr<BufferManager> getOutputBufferManager(const std::string &name, const std::string &domain);
143 
144 public:
145 
149  std::vector<PortInfo> inputPortInfo(void);
150 
154  std::vector<PortInfo> outputPortInfo(void);
155 
159  InputPort *input(const std::string &name) const;
160 
164  InputPort *input(const size_t index) const;
165 
169  OutputPort *output(const std::string &name) const;
170 
174  OutputPort *output(const size_t index) const;
175 
182  const std::vector<InputPort*> &inputs(void) const;
183 
190  const std::vector<OutputPort*> &outputs(void) const;
191 
197  const std::map<std::string, InputPort*> &allInputs(void) const;
198 
204  const std::map<std::string, OutputPort*> &allOutputs(void) const;
205 
210  const WorkInfo &workInfo(void) const;
211 
215  WorkStats workStats(void) const;
216 
223  bool isActive(void) const;
224 
235  void setupInput(const std::string &name, const DType &dtype = "", const std::string &domain = "");
236 
244  void setupInput(const size_t index, const DType &dtype = "", const std::string &domain = "");
245 
256  void setupOutput(const std::string &name, const DType &dtype = "", const std::string &domain = "");
257 
265  void setupOutput(const size_t index, const DType &dtype = "", const std::string &domain = "");
266 
273  void registerCallable(const std::string &name, const Callable &call);
274 
281  void registerSignal(const std::string &name);
282 
291  void registerSlot(const std::string &name);
292 
307  void registerProbe(
308  const std::string &name,
309  const std::string &signalName="",
310  const std::string &slotName="");
311 
321  void yield(void);
322 
330  Object opaqueCallMethod(const std::string &name, const Object *inputArgs, const size_t numArgs) const;
331 
332 private:
333  WorkInfo _workInfo;
334  std::vector<std::string> _inputPortNames;
335  std::vector<std::string> _outputPortNames;
336  std::vector<InputPort*> _indexedInputs;
337  std::vector<OutputPort*> _indexedOutputs;
338  std::map<std::string, InputPort*> _namedInputs;
339  std::map<std::string, OutputPort*> _namedOutputs;
340  std::multimap<std::string, Callable> _calls;
341  std::map<std::string, std::pair<std::string, std::string>> _probes;
342  ThreadPool _threadPool;
343  Block(const Block &){} // non construction-copyable
344  Block &operator=(const Block &){return *this;} // non copyable
345 public:
346  std::shared_ptr<WorkerActor> _actor;
347  friend class WorkerActor;
348 };
349 
350 } //namespace Pothos
Definition: WorkInfo.hpp:23
Definition: Connectable.hpp:39
#define POTHOS_API
Definition: Config.hpp:41
Definition: OutputPort.hpp:28
std::shared_ptr< WorkerActor > _actor
Definition: Block.hpp:346
Definition: Callable.tmpl.hpp:30
Definition: ThreadPool.hpp:83
Definition: Object.hpp:55
Definition: InputPort.hpp:27
Definition: Block.hpp:37
Definition: WorkStats.hpp:33
Definition: DType.hpp:38