artdaq  v3_12_02
NoOp_policy.cc
1 #define TRACE_NAME "NoOp_policy"
2 #include "TRACE/tracemf.h"
3 
4 #include <utility>
5 
6 #include "artdaq/RoutingPolicies/PolicyMacros.hh"
7 #include "artdaq/RoutingPolicies/RoutingManagerPolicy.hh"
8 
9 #include "fhiclcpp/ParameterSet.h"
10 
11 namespace artdaq {
16 {
17 public:
24  explicit NoOpPolicy(fhicl::ParameterSet const& ps)
26  {
27  }
28 
32  ~NoOpPolicy() override = default;
33 
40  void CreateRoutingTable(detail::RoutingPacket& table) override;
47  detail::RoutingPacketEntry CreateRouteForSequenceID(artdaq::Fragment::sequence_id_t seq, int requesting_rank) override;
48 
49 private:
50  NoOpPolicy(NoOpPolicy const&) = delete;
51  NoOpPolicy(NoOpPolicy&&) = delete;
52  NoOpPolicy& operator=(NoOpPolicy const&) = delete;
53  NoOpPolicy& operator=(NoOpPolicy&&) = delete;
54 };
55 
57 {
58  while (!tokens_.empty())
59  {
60  table.emplace_back(next_sequence_id_, tokens_.front());
62  tokens_.pop_front();
64  }
65 }
66 
67 detail::RoutingPacketEntry NoOpPolicy::CreateRouteForSequenceID(artdaq::Fragment::sequence_id_t seq, int)
68 {
70  if (!tokens_.empty())
71  {
72  auto dest = tokens_.front(); // No-Op: Use first token
73  output = detail::RoutingPacketEntry(seq, dest);
74  tokens_.pop_front();
76  }
77 
78  return output;
79 }
80 
81 } // namespace artdaq
82 
83 DEFINE_ARTDAQ_ROUTING_POLICY(artdaq::NoOpPolicy)
detail::RoutingPacketEntry CreateRouteForSequenceID(artdaq::Fragment::sequence_id_t seq, int requesting_rank) override
Get an artdaq::detail::RoutingPacketEntry for a given sequence ID and rank. Used by RequestBasedEvent...
Definition: NoOp_policy.cc:67
A row of the Routing Table.
A RoutingManagerPolicy which simply assigns Sequence IDs to tokens in the order they were received...
Definition: NoOp_policy.cc:15
NoOpPolicy(fhicl::ParameterSet const &ps)
NoOpPolicy Constructor.
Definition: NoOp_policy.cc:24
Fragment::sequence_id_t next_sequence_id_
The next sequence ID to be assigned.
The interface through which RoutingManagerCore obtains Routing Tables using received Routing Tokens...
std::vector< RoutingPacketEntry > RoutingPacket
A RoutingPacket is simply a vector of RoutingPacketEntry objects. It is not suitable for network tran...
void CreateRoutingTable(detail::RoutingPacket &table) override
Add entries to the given RoutingPacket using currently-held tokens.
Definition: NoOp_policy.cc:56
~NoOpPolicy() override=default
Default virtual Destructor.
std::deque< int > tokens_
The list of tokens which are available for use.
std::atomic< size_t > tokens_used_since_last_update_
Number of tokens consumed since last metric update.