artdaq  v3_11_01
NoOp_policy.cc
1 #include <utility>
2 
3 #include "artdaq/RoutingPolicies/PolicyMacros.hh"
4 #include "artdaq/RoutingPolicies/RoutingManagerPolicy.hh"
5 #include "fhiclcpp/ParameterSet.h"
6 #include "tracemf.h"
7 #define TRACE_NAME "NoOp_policy"
8 namespace artdaq {
13 {
14 public:
21  explicit NoOpPolicy(fhicl::ParameterSet const& ps)
23  {
24  }
25 
29  ~NoOpPolicy() override = default;
30 
37  void CreateRoutingTable(detail::RoutingPacket& table) override;
44  detail::RoutingPacketEntry CreateRouteForSequenceID(artdaq::Fragment::sequence_id_t seq, int requesting_rank) override;
45 
46 private:
47  NoOpPolicy(NoOpPolicy const&) = delete;
48  NoOpPolicy(NoOpPolicy&&) = delete;
49  NoOpPolicy& operator=(NoOpPolicy const&) = delete;
50  NoOpPolicy& operator=(NoOpPolicy&&) = delete;
51 };
52 
54 {
55  while (!tokens_.empty())
56  {
57  table.emplace_back(next_sequence_id_, tokens_.front());
59  tokens_.pop_front();
61  }
62 }
63 
64 detail::RoutingPacketEntry NoOpPolicy::CreateRouteForSequenceID(artdaq::Fragment::sequence_id_t seq, int)
65 {
67  if (!tokens_.empty())
68  {
69  auto dest = tokens_.front(); // No-Op: Use first token
70  output = detail::RoutingPacketEntry(seq, dest);
71  tokens_.pop_front();
73  }
74 
75  return output;
76 }
77 
78 } // namespace artdaq
79 
80 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:64
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:12
NoOpPolicy(fhicl::ParameterSet const &ps)
NoOpPolicy Constructor.
Definition: NoOp_policy.cc:21
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:53
~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.