$treeview $search $mathjax $extrastylesheet
artdaq_core
v3_05_04
$projectbrief
|
$projectbrief
|
$searchbox |
00001 #ifndef artdaq_core_Core_SharedMemoryEventReceiver_hh 00002 #define artdaq_core_Core_SharedMemoryEventReceiver_hh 1 00003 00004 #include <set> 00005 00006 #include "artdaq-core/Core/SharedMemoryManager.hh" 00007 #include "artdaq-core/Data/Fragment.hh" 00008 #include "artdaq-core/Data/RawEvent.hh" 00009 00010 namespace artdaq { 00014 class SharedMemoryEventReceiver 00015 { 00016 public: 00022 SharedMemoryEventReceiver(uint32_t shm_key, uint32_t broadcast_shm_key); 00026 virtual ~SharedMemoryEventReceiver() = default; 00027 00034 bool ReadyForRead(bool broadcast = false, size_t timeout_us = 1000000); 00035 00041 detail::RawEventHeader* ReadHeader(bool& err); 00042 00048 std::set<Fragment::type_t> GetFragmentTypes(bool& err); 00049 00056 std::unique_ptr<Fragments> GetFragmentsByType(bool& err, Fragment::type_t type); 00057 00062 std::string toString(); 00063 00067 void ReleaseBuffer(); 00068 00073 int GetRank() { return data_.GetRank(); } 00074 00079 int GetMyId() { return data_.GetMyId(); } 00080 00085 int ReadReadyCount() { return data_.ReadReadyCount() + broadcasts_.ReadReadyCount(); } 00086 00091 size_t size() { return data_.size(); } 00092 00093 private: 00094 std::string printBuffers_(SharedMemoryManager* data_source); 00095 00096 int current_read_buffer_; 00097 bool initialized_; 00098 detail::RawEventHeader* current_header_; 00099 SharedMemoryManager* current_data_source_; 00100 SharedMemoryManager data_; 00101 SharedMemoryManager broadcasts_; 00102 }; 00103 } // namespace artdaq 00104 00105 #endif /* artdaq_core_Core_SharedMemoryEventReceiver_hh */