FAST  3.2.0
Framework for Heterogeneous Medical Image Computing and Visualization
DataChannel.hpp
Go to the documentation of this file.
1 #pragma once
2 
5 
6 namespace fast {
7 
8 class ProcessObject;
9 
10 class FAST_EXPORT DataChannel : public Object {
11  public:
12  typedef std::shared_ptr<DataChannel> pointer;
13 
18  virtual void addFrame(DataObject::pointer data) = 0;
19 
24  template <class T = DataObject>
25  std::shared_ptr<T> getNextFrame();
26 
30  virtual int getSize() = 0;
31 
35  virtual void setMaximumNumberOfFrames(uint frames) = 0;
36 
40  virtual void stop() = 0;
41 
42  // TODO consider removing, it is equal to getSize() > 0 atm
43  virtual bool hasCurrentData() = 0;
44 
48  virtual DataObject::pointer getFrame() = 0;
49 
50  std::shared_ptr<ProcessObject> getProcessObject() const;
51  void setProcessObject(std::shared_ptr<ProcessObject> po);
52  protected:
53  bool m_stop;
54  std::mutex m_mutex;
55  std::shared_ptr<ProcessObject> m_processObject;
56 
57  virtual DataObject::pointer getNextDataFrame() = 0;
58  DataChannel();
59 };
60 
61 // Template specialization when T = DataObject
62 template <>
63 FAST_EXPORT std::shared_ptr<DataObject> DataChannel::getNextFrame<DataObject>();
64 
65 template <class T>
66 std::shared_ptr<T> DataChannel::getNextFrame() {
67  auto data = getNextDataFrame();
68  auto convertedData = std::dynamic_pointer_cast<T>(data);
69  // Check if the conversion went ok
70  if(!convertedData)
71  throw BadCastException(data->getNameOfClass(), T::getStaticNameOfClass());
72  return convertedData;
73 }
74 
75 }
fast::BadCastException
Definition: Exception.hpp:105
fast
Definition: AffineTransformation.hpp:7
fast::DataChannel::m_processObject
std::shared_ptr< ProcessObject > m_processObject
Definition: DataChannel.hpp:55
fast::Object
Definition: Object.hpp:34
fast::DataChannel::getNextDataFrame
virtual DataObject::pointer getNextDataFrame()=0
fast::DataChannel::m_stop
bool m_stop
Definition: DataChannel.hpp:53
fast::DataChannel::getNextFrame
std::shared_ptr< T > getNextFrame()
Definition: DataChannel.hpp:66
fast::DataChannel::pointer
std::shared_ptr< DataChannel > pointer
Definition: DataChannel.hpp:12
DataTypes.hpp
fast::DataChannel
Definition: DataChannel.hpp:10
fast::DataObject::pointer
std::shared_ptr< DataObject > pointer
Definition: DataObject.hpp:16
fast::DataChannel::m_mutex
std::mutex m_mutex
Definition: DataChannel.hpp:54
uint
unsigned int uint
Definition: DataTypes.hpp:16
DataObject.hpp