00001 #ifndef ARTDAQ_CORE_CORE_SHARED_MEMORY_FRAGMENT_MANAGER_HH 00002 #define ARTDAQ_CORE_CORE_SHARED_MEMORY_FRAGMENT_MANAGER_HH 1 00003 00004 #include "artdaq-core/Core/SharedMemoryManager.hh" 00005 #include "artdaq-core/Data/RawEvent.hh" 00006 00007 namespace artdaq { 00011 class SharedMemoryFragmentManager : public SharedMemoryManager 00012 { 00013 public: 00022 SharedMemoryFragmentManager(uint32_t shm_key, size_t buffer_count, size_t max_buffer_size, size_t buffer_timeout_us = 100 * 1000000); 00023 00027 virtual ~SharedMemoryFragmentManager() =default; 00028 00036 int WriteFragment(Fragment&& fragment, bool overwrite, size_t timeout_us); 00037 00043 int ReadFragment(Fragment& fragment); 00044 00050 int ReadFragmentHeader(detail::RawFragmentHeader& header); 00051 00058 int ReadFragmentData(RawDataType* destination, size_t words); 00059 00065 bool ReadyForWrite(bool overwrite) override; 00066 00067 private: 00068 int active_buffer_; 00069 }; 00070 } 00071 00072 #endif //ARTDAQ_CORE_CORE_SHARED_MEMORY_FRAGMENT_MANAGER_HH