FAST  3.2.0
Framework for Heterogeneous Medical Image Computing and Visualization
DataObject.hpp
Go to the documentation of this file.
1 #ifndef DATAOBJECT_HPP_
2 #define DATAOBJECT_HPP_
3 
4 
5 #include "FAST/Object.hpp"
7 #include <unordered_map>
8 #include <unordered_set>
9 #include <condition_variable>
10 
11 namespace fast {
12 
13 class FAST_EXPORT DataObject : public Object {
14  public:
15  DataObject();
16  typedef std::shared_ptr<DataObject> pointer;
17  void setMetadata(std::string name, std::string value);
18  void setMetadata(std::unordered_map<std::string, std::string> metadata);
19  std::string getMetadata(std::string name) const;
20  std::unordered_map<std::string, std::string> getMetadata() const;
21  void deleteMetadata(std::string name);
22  uint64_t getTimestamp() const;
23  void updateModifiedTimestamp();
24  virtual ~DataObject() { };
25  virtual std::string getNameOfClass() const = 0;
26  static std::string getStaticNameOfClass() {
27  return "DataObject";
28  };
29  uint64_t getCreationTimestamp() const;
30  void setCreationTimestamp(uint64_t timestamp);
31 
32  void setLastFrame(std::string streamer);
33  bool isLastFrame();
34  bool isLastFrame(std::string streamer);
35  std::unordered_set<std::string> getLastFrame();
36  void setFrameData(std::string name, std::string value);
37  std::string getFrameData(std::string name);
38  std::unordered_map<std::string, std::string> getFrameData();
39  void accessFinished();
40  protected:
41  virtual void free(ExecutionDevice::pointer device) = 0;
42  virtual void freeAll() = 0;
43 
44  void blockIfBeingWrittenTo();
45  void blockIfBeingAccessed();
46 
48  std::condition_variable mDataIsBeingWrittenToCondition;
50 
52  std::condition_variable mDataIsBeingAccessedCondition;
54  private:
55 
56  // Timestamp is set to 0 when data object is constructed
57  uint64_t mTimestampModified;
58 
59  // Timestamp is set to 0 when data object is constructed
60  uint64_t mTimestampCreated;
61 
62  std::unordered_map<std::string, std::string> mMetadata;
63 
64  // Frame data
65  // Similar to metadata, only this is transferred from input to output
66  std::unordered_map<std::string, std::string> m_frameData;
67  // Indicates whether this data object is the last frame in a stream, and if so, the name of the stream
68  std::unordered_set<std::string> m_lastFrame;
69 
70 
71 };
72 
73 }
74 
75 
76 
77 
78 #endif /* DATAOBJECT_HPP_ */
fast::DataObject::mDataIsBeingWrittenTo
bool mDataIsBeingWrittenTo
Definition: DataObject.hpp:49
Object.hpp
fast::ExecutionDevice::pointer
std::shared_ptr< ExecutionDevice > pointer
Definition: ExecutionDevice.hpp:11
fast::DataObject::mDataIsBeingWrittenToCondition
std::condition_variable mDataIsBeingWrittenToCondition
Definition: DataObject.hpp:48
fast::DataObject::mDataIsBeingAccessedMutex
std::mutex mDataIsBeingAccessedMutex
Definition: DataObject.hpp:51
fast
Definition: AffineTransformation.hpp:7
fast::DataObject::~DataObject
virtual ~DataObject()
Definition: DataObject.hpp:24
fast::DataObject::mDataIsBeingAccessed
bool mDataIsBeingAccessed
Definition: DataObject.hpp:53
fast::Object
Definition: Object.hpp:34
ExecutionDevice.hpp
fast::DataObject::mDataIsBeingWrittenToMutex
std::mutex mDataIsBeingWrittenToMutex
Definition: DataObject.hpp:47
fast::DataObject
Definition: DataObject.hpp:13
fast::DataObject::mDataIsBeingAccessedCondition
std::condition_variable mDataIsBeingAccessedCondition
Definition: DataObject.hpp:52
fast::DataObject::getStaticNameOfClass
static std::string getStaticNameOfClass()
Definition: DataObject.hpp:26
fast::DataObject::pointer
std::shared_ptr< DataObject > pointer
Definition: DataObject.hpp:16