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 00035 int WriteFragment(Fragment&& fragment, bool overwrite); 00036 00042 int ReadFragment(Fragment& fragment); 00043 00049 int ReadFragmentHeader(detail::RawFragmentHeader& header); 00050 00057 int ReadFragmentData(RawDataType* destination, size_t words); 00058 00059 private: 00060 int active_buffer_; 00061 00062 }; 00063 } 00064 00065 #endif //ARTDAQ_CORE_CORE_SHARED_MEMORY_FRAGMENT_MANAGER_HH