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