diff --git a/common/log/TimingList.cpp b/common/log/TimingList.cpp index ca6c6ecf9e597d1e689acea2f15a0fea24f01ff2..c970717e5881a92c8cc84acdb1d976caef2db4ee 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 733adbafe5897b17591851bbc2c5fb5042dfd14e..b8436d485d931f109352fce3854a0d7f17172a16 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