00001 #ifndef artdaq_TransferPlugins_ShmemTransfer_hh 00002 #define artdaq_TransferPlugins_ShmemTransfer_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 00032 ShmemTransfer(fhicl::ParameterSet const& pset, Role role); 00033 00037 virtual ~ShmemTransfer() noexcept; 00038 00045 int receiveFragment(Fragment& fragment, 00046 size_t receiveTimeout) override; 00047 00054 int receiveFragmentHeader(detail::RawFragmentHeader& header, size_t receiveTimeout) override; 00055 00062 int receiveFragmentData(RawDataType* destination, size_t wordCount) override; 00063 00070 CopyStatus copyFragment(Fragment& fragment, size_t send_timeout_usec) override; 00071 00077 CopyStatus moveFragment(Fragment&& fragment) override; 00078 00079 private: 00080 CopyStatus sendFragment(Fragment&& fragment, 00081 size_t send_timeout_usec, bool reliable = false); 00082 00083 std::unique_ptr<SharedMemoryFragmentManager> shm_manager_; 00084 00085 }; 00086 } 00087 00088 #endif // artdaq_TransferPlugins/ShmemTransfer_hh