00001 #ifndef artdaq_TransferPlugins_ShmemTransfer_hh 00002 #define artdaq_TransferPlugins_ShemmTransfer_hh 00003 00004 #include "fhiclcpp/fwd.h" 00005 00006 #include "artdaq/TransferPlugins/TransferInterface.hh" 00007 #include "artdaq-core/Core/SharedMemoryFragmentManager.hh" 00008 00009 namespace artdaq 00010 { 00014 class ShmemTransfer : public TransferInterface 00015 { 00016 public: 00017 00029 ShmemTransfer(fhicl::ParameterSet const& pset, Role role); 00030 00034 virtual ~ShmemTransfer() noexcept; 00035 00042 int receiveFragment(Fragment& fragment, 00043 size_t receiveTimeout) override; 00044 00051 int receiveFragmentHeader(detail::RawFragmentHeader& header, size_t receiveTimeout) override; 00052 00059 int receiveFragmentData(RawDataType* destination,size_t wordCount) override; 00060 00067 CopyStatus copyFragment(Fragment& fragment, 00068 size_t send_timeout_usec = std::numeric_limits<size_t>::max()) override; 00069 00076 CopyStatus moveFragment(Fragment&& fragment, 00077 size_t send_timeout_usec = std::numeric_limits<size_t>::max()) override; 00078 00079 private: 00080 CopyStatus sendFragment(Fragment&& fragment, 00081 size_t send_timeout_usec, bool reliable = false); 00082 00083 size_t send_timeout_usec_; 00084 std::unique_ptr<SharedMemoryFragmentManager> shm_manager_; 00085 00086 Role role_; 00087 }; 00088 } 00089 00090 #endif // artdaq_TransferPlugins/ShmemTransfer_hh