]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
enhance: Add offsetted get/set/increment methods for StatisticsCounters
authorJoel Rosdahl <joel@rosdahl.net>
Wed, 28 Dec 2022 09:15:23 +0000 (10:15 +0100)
committerJoel Rosdahl <joel@rosdahl.net>
Wed, 11 Jan 2023 18:42:31 +0000 (19:42 +0100)
src/core/StatisticsCounters.cpp
src/core/StatisticsCounters.hpp

index 3f1f2d6568790e71987748bb46900f95595fde66..f0361719c44767f14d800cf093be7acb4e802b8f 100644 (file)
@@ -51,6 +51,19 @@ StatisticsCounters::get(Statistic statistic) const
   return index < m_counters.size() ? m_counters[index] : 0;
 }
 
+uint64_t
+StatisticsCounters::get_offsetted(Statistic statistic, size_t offset) const
+{
+  return get_raw(static_cast<size_t>(statistic) + offset);
+}
+
+uint64_t
+StatisticsCounters::get_raw(size_t index) const
+{
+  ASSERT(index < size());
+  return m_counters[index];
+}
+
 void
 StatisticsCounters::set(Statistic statistic, uint64_t value)
 {
@@ -59,11 +72,12 @@ StatisticsCounters::set(Statistic statistic, uint64_t value)
   m_counters[index] = value;
 }
 
-uint64_t
-StatisticsCounters::get_raw(size_t index) const
+void
+StatisticsCounters::set_offsetted(Statistic statistic,
+                                  size_t offset,
+                                  uint64_t value)
 {
-  ASSERT(index < size());
-  return m_counters[index];
+  set_raw(static_cast<size_t>(statistic) + offset, value);
 }
 
 void
@@ -101,6 +115,15 @@ StatisticsCounters::increment(const StatisticsCounters& other)
   }
 }
 
+void
+StatisticsCounters::increment_offsetted(Statistic statistic,
+                                        size_t offset,
+                                        int64_t value)
+{
+  increment(static_cast<Statistic>(static_cast<size_t>(statistic) + offset),
+            value);
+}
+
 size_t
 StatisticsCounters::size() const
 {
index 21bb1b3d7e2aa01f7cb18ba5dc39e4e3008530cb..ea325680c106641bcca74775ff9e7b39626a2683 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2021 Joel Rosdahl and other contributors
+// Copyright (C) 2010-2022 Joel Rosdahl and other contributors
 //
 // See doc/AUTHORS.adoc for a complete list of contributors.
 //
@@ -37,13 +37,16 @@ public:
   StatisticsCounters(std::initializer_list<Statistic> statistics);
 
   uint64_t get(Statistic statistic) const;
-  void set(Statistic statistic, uint64_t value);
-
+  uint64_t get_offsetted(Statistic statistic, size_t offset) const;
   uint64_t get_raw(size_t index) const;
+
+  void set(Statistic statistic, uint64_t value);
+  void set_offsetted(Statistic statistic, size_t offset, uint64_t value);
   void set_raw(size_t index, uint64_t value);
 
   void increment(Statistic statistic, int64_t value = 1);
   void increment(const StatisticsCounters& other);
+  void increment_offsetted(Statistic statistic, size_t offset, int64_t value);
 
   size_t size() const;