LArSoft  v09_90_00
Liquid Argon Software toolkit - https://larsoft.org/
ExecutionCounts.h
Go to the documentation of this file.
1 #ifndef art_Framework_Principal_ExecutionCounts_h
2 #define art_Framework_Principal_ExecutionCounts_h
3 // vim: set sw=2 expandtab :
4 
5 #include <cstddef>
6 #include <tuple>
7 #include <type_traits>
8 
9 namespace art {
10 
11  namespace stats {
12 
13  struct Visited {
14  std::size_t value{};
15  };
16 
17  struct Run {
18  std::size_t value{};
19  };
20 
21  struct Passed {
22  std::size_t value{};
23  };
24 
25  struct Failed {
26  std::size_t value{};
27  };
28 
29  struct ExceptionThrown {
30  std::size_t value{};
31  };
32 
33  } // namespace stats
34 
35  template <typename... ARGS>
37 
38  public:
39  template <typename FIELD>
40  std::size_t
41  times() const
42  {
43  return std::get<FIELD>(counts_).value;
44  }
45 
46  template <typename FIELD>
47  void
49  {
50  ++std::get<FIELD>(counts_).value;
51  }
52 
53  template <typename HEAD_FIELD, typename... TAIL_FIELDS>
54  std::enable_if_t<(sizeof...(TAIL_FIELDS) > 0)>
56  {
57  increment<HEAD_FIELD>();
58  increment<TAIL_FIELDS...>();
59  }
60 
61  void
62  update(bool const rc)
63  {
64  if (rc) {
65  increment<stats::Passed>();
66  } else {
67  increment<stats::Failed>();
68  }
69  }
70 
71  void
73  {
74  counts_ = std::tuple<ARGS...>();
75  }
76 
77  private:
78  std::tuple<ARGS...> counts_;
79  };
80 
82  stats::Run,
86 
87 } // namespace art
88 
89 #endif /* art_Framework_Principal_ExecutionCounts_h */
90 
91 // Local variables:
92 // mode: c++
93 // End:
std::enable_if_t<(sizeof...(TAIL_FIELDS) > 0)> increment()
std::size_t times() const
std::tuple< ARGS... > counts_
Definition: MVAAlg.h:12
void update(bool const rc)