artdaq_core  v3_02_01
SharedMemoryEventReceiver.hh
1 #ifndef artdaq_core_Core_SharedMemoryEventReceiver_hh
2 #define artdaq_core_Core_SharedMemoryEventReceiver_hh 1
3 
4 #include <set>
5 
6 #include "artdaq-core/Core/SharedMemoryManager.hh"
7 #include "artdaq-core/Data/Fragment.hh"
8 #include "artdaq-core/Data/RawEvent.hh"
9 
10 namespace artdaq
11 {
16  {
17  public:
23  SharedMemoryEventReceiver(uint32_t shm_key, uint32_t broadcast_shm_key);
27  virtual ~SharedMemoryEventReceiver() = default;
28 
35  bool ReadyForRead(bool broadcast = false, size_t timeout_us = 1000000);
36 
43 
49  std::set<Fragment::type_t> GetFragmentTypes(bool& err);
50 
57  std::unique_ptr<Fragments> GetFragmentsByType(bool& err, Fragment::type_t type);
58 
63  std::string toString();
64 
68  void ReleaseBuffer();
69 
74  int GetRank() { return data_.GetRank(); }
75 
80  int ReadReadyCount() { return data_.ReadReadyCount() + broadcasts_.ReadReadyCount(); }
81 
86  size_t size() { return data_.size(); }
87 
88  private:
89  std::string printBuffers_(SharedMemoryManager* data_source);
90 
91  int current_read_buffer_;
92  bool initialized_;
93  detail::RawEventHeader* current_header_;
94  SharedMemoryManager* current_data_source_;
95  SharedMemoryManager data_;
96  SharedMemoryManager broadcasts_;
97  };
98 } // artdaq
99 
100 #endif /* artdaq_core_Core_SharedMemoryEventReceiver_hh */
void ReleaseBuffer()
Release the buffer currently being read to the Empty state.
detail::RawFragmentHeader::type_t type_t
typedef for type_t from RawFragmentHeader
Definition: Fragment.hh:136
SharedMemoryEventReceiver can receive events (as written by SharedMemoryEventManager) from Shared Mem...
The SharedMemoryManager creates a Shared Memory area which is divided into a number of fixed-size buf...
int GetRank()
Returns the Rank of the writing process.
size_t ReadReadyCount()
Count the number of buffers that are ready for reading.
size_t size()
Get the size of the data buffer.
int GetRank() const
Get the rank of the owner of the Shared Memory (artdaq assigns rank to each artdaq process for data f...
SharedMemoryEventReceiver(uint32_t shm_key, uint32_t broadcast_shm_key)
Connect to a Shared Memory segment using the given parameters.
size_t size() const
Get the number of buffers in the shared memory segment.
The header information used to identify key properties of the RawEvent object.
Definition: RawEvent.hh:30
std::set< Fragment::type_t > GetFragmentTypes(bool &err)
Get a set of Fragment Types present in the event.
int ReadReadyCount()
Get the count of available buffers, both broadcasts and data.
virtual ~SharedMemoryEventReceiver()=default
SharedMemoryEventReceiver Destructor.
bool ReadyForRead(bool broadcast=false, size_t timeout_us=1000000)
Determine whether an event is available for reading.
std::string toString()
Write out information about the Shared Memory to a string.
detail::RawEventHeader * ReadHeader(bool &err)
Get the Event header.
std::unique_ptr< Fragments > GetFragmentsByType(bool &err, Fragment::type_t type)
Get a pointer to the Fragments of a given type in the event.