From add199b55d7d566a68b2b4509ad5502e41b09b33 Mon Sep 17 00:00:00 2001
From: Eric Cano <Eric.Cano@cern.ch>
Date: Mon, 1 Oct 2018 16:35:07 +0200
Subject: [PATCH] Added support for increment to timings in TimingsLists.

---
 common/log/TimingList.cpp | 21 +++++++++++++++++++--
 common/log/TimingList.hpp |  5 ++++-
 2 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/common/log/TimingList.cpp b/common/log/TimingList.cpp
index ca6c6ecf9e..c970717e58 100644
--- a/common/log/TimingList.cpp
+++ b/common/log/TimingList.cpp
@@ -31,14 +31,31 @@ void TimingList::addToLog(ScopedParamContainer& spc) {
   }
 }
 
-void TimingList::insert(const std::string& name, double value) {
-  push_back(std::make_tuple(name, value));
+double& TimingList::at(const std::string& name) {
+  for (auto &e: *this) {
+    if (std::get<0>(e) == name) return std::get<1>(e);
+  }
+  throw std::out_of_range("In TimingList::at(): no such element.");
+}
+
+
+void TimingList::insertOrIncrement(const std::string& name, double value) {
+  try {
+    at(name)+=value;
+  } catch (std::out_of_range&) {
+    push_back(std::make_tuple(name, value));
+  }
+}
+
+void TimingList::insOrIncAndReset(const std::string& name, utils::Timer& t) {
+  insertOrIncrement(name, t.secs(utils::Timer::resetCounter));
 }
 
 void TimingList::insertAndReset(const std::string& name, utils::Timer& t) {
   push_back(std::make_tuple(name, t.secs(utils::Timer::resetCounter)));
 }
 
+
 TimingList& TimingList::operator+=(const TimingList& other) {
   for (auto & ot: other) {
     std::string oName;
diff --git a/common/log/TimingList.hpp b/common/log/TimingList.hpp
index 733adbafe5..b8436d485d 100644
--- a/common/log/TimingList.hpp
+++ b/common/log/TimingList.hpp
@@ -32,10 +32,13 @@ class ScopedParamContainer;
 
 class TimingList: public std::list<std::tuple<std::string, double>> {
 public:
-  void insert(const std::string &, double);
+  void insertOrIncrement(const std::string &, double);
+  void insOrIncAndReset(const std::string&, utils::Timer &);
   void insertAndReset(const std::string&, utils::Timer &);
   TimingList & operator+= (const TimingList &);
   void addToLog(ScopedParamContainer &);
+private:
+  double & at(const std::string&);
 };
 
 }} // namespace cta::log
\ No newline at end of file
-- 
GitLab