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 00083 bool isRunning() override; 00084 private: 00085 CopyStatus sendFragment(Fragment&& fragment, 00086 size_t send_timeout_usec, bool reliable = false); 00087 00088 std::unique_ptr<SharedMemoryFragmentManager> shm_manager_; 00089 00090 }; 00091 } 00092 00093 #endif // artdaq_TransferPlugins/ShmemTransfer_hh