Line data Source code
1 : #include "artdaq/TransferPlugins/TransferInterface.hh"
2 :
3 : namespace artdaq {
4 : /**
5 : * \brief NullTransfer does not send or receive data, but acts as if it did
6 : */
7 : class NullTransfer : public TransferInterface
8 : {
9 : public:
10 : /**
11 : * \brief NullTransfer constructor
12 : * \param pset ParameterSet used to configure TransferInterface
13 : * \param role Role of this NullTransfer instance (kSend or kReceive)
14 : *
15 : * NullTransfer only requires the Parameters for configuring a TransferInterface
16 : */
17 : NullTransfer(const fhicl::ParameterSet& pset, Role role);
18 :
19 : /**
20 : * \brief NullTransfer default Destructor
21 : */
22 0 : ~NullTransfer() override = default;
23 :
24 : /**
25 : * \brief Pretend to receive a Fragment
26 : * \return Source Rank (Success code)
27 : *
28 : * WARNING: This function may create unintended side-effets. NullTransfer should
29 : * only really be used in Role::kSend!
30 : */
31 0 : int receiveFragment(artdaq::Fragment& /*fragment*/, size_t /*receiveTimeout*/) override { return source_rank(); }
32 :
33 : /**
34 : * \brief Pretend to receive a Fragment Header
35 : * \return Source Rank (Success code)
36 : *
37 : * WARNING: This function may create unintended side-effets. NullTransfer should
38 : * only really be used in Role::kSend!
39 : */
40 0 : int receiveFragmentHeader(detail::RawFragmentHeader& /*header*/, size_t /*receiveTimeout*/) override { return source_rank(); }
41 :
42 : /**
43 : * \brief Pretend to receive Fragment Data
44 : * \return Source Rank (Success code)
45 : *
46 : * WARNING: This function may create unintended side-effets. NullTransfer should
47 : * only really be used in Role::kSend!
48 : */
49 0 : int receiveFragmentData(RawDataType* /*destination*/ /*destination*/ /*destination*/ /*destination*/, size_t /*wordCount*/) override { return source_rank(); }
50 :
51 : /**
52 : * \brief Pretend to send a Fragment to a destination
53 : * \return CopyStatus::kSuccess (No-Op)
54 : */
55 0 : CopyStatus transfer_fragment_min_blocking_mode(artdaq::Fragment const& /*fragment*/, size_t /*send_timeout_usec*/) override
56 : {
57 0 : return CopyStatus::kSuccess;
58 : }
59 :
60 : /**
61 : * \brief Pretend to send a Fragment to a destination
62 : * \return CopyStatus::kSuccess (No-Op)
63 : */
64 0 : CopyStatus transfer_fragment_reliable_mode(artdaq::Fragment&& /*fragment*/) override { return CopyStatus::kSuccess; }
65 :
66 : /**
67 : * \brief Determine whether the TransferInterface plugin is able to send/receive data
68 : * \return True if the TransferInterface plugin is currently able to send/receive data
69 : */
70 0 : bool isRunning() override { return true; }
71 :
72 : /**
73 : * \brief Flush any in-flight data. This should be used by the receiver after the receive loop has
74 : * ended.
75 : */
76 0 : void flush_buffers() override {}
77 :
78 : private:
79 : NullTransfer(NullTransfer const&) = delete;
80 : NullTransfer(NullTransfer&&) = delete;
81 : NullTransfer& operator=(NullTransfer const&) = delete;
82 : NullTransfer& operator=(NullTransfer&&) = delete;
83 : };
84 : } // namespace artdaq
85 :
86 0 : artdaq::NullTransfer::NullTransfer(const fhicl::ParameterSet& pset, Role role)
87 0 : : TransferInterface(pset, role) {}
88 :
89 0 : DEFINE_ARTDAQ_TRANSFER(artdaq::NullTransfer)
|