base: Add total() to Vector2D stat
authorDavid Guillen Fandos <david.guillen@arm.com>
Thu, 21 Jul 2016 16:19:15 +0000 (17:19 +0100)
committerDavid Guillen Fandos <david.guillen@arm.com>
Thu, 21 Jul 2016 16:19:15 +0000 (17:19 +0100)
This patch adds a total() function to the Vector2D
stat type. Similar to other stats such as Scalar or
Vector it is useful to be able to read the total for
a given stat.

src/base/statistics.hh
src/base/stats/info.hh
src/base/stats/text.cc

index a21bf81d17ba21dda0e6ace9150a396f78b0bd09..f8e651b979298a8f9dddf22683f1bfdde17148ab 100644 (file)
@@ -159,6 +159,8 @@ class Vector2dInfoProxy : public InfoProxy<Stat, Vector2dInfo>
 {
   public:
     Vector2dInfoProxy(Stat &stat) : InfoProxy<Stat, Vector2dInfo>(stat) {}
+
+    Result total() const { return this->s.total(); }
 };
 
 struct StorageParams
@@ -1298,6 +1300,19 @@ class Vector2dBase : public DataWrapVec2d<Derived, Vector2dInfoProxy>
 #endif
     }
 
+    /**
+     * Return a total of all entries in this vector.
+     * @return The total of all vector entries.
+     */
+    Result
+    total() const
+    {
+        Result total = 0.0;
+        for (off_type i = 0; i < size(); ++i)
+            total += data(i)->result();
+        return total;
+    }
+
     void
     prepare()
     {
index b2ba41485349786561b07a30fdfb3e97616ceba4..6ce7376a4a38ebe3f4bf3f5b47af7af47b2b00c0 100644 (file)
@@ -229,6 +229,8 @@ class Vector2dInfo : public Info
     mutable VCounter cvec;
 
     void enable();
+
+    virtual Result total() const = 0;
 };
 
 class FormulaInfo : public VectorInfo
index 05ce33cdf57a8ee039bf0a9fd61324c1e8fb6356..ae09b9b8df0a96b1ef4f630856ca5057987bb940 100644 (file)
@@ -588,7 +588,6 @@ Text::visit(const Vector2dInfo &info)
     }
 
     VResult tot_vec(info.y);
-    VResult super_total(1, 0.0);
     for (off_type i = 0; i < info.x; ++i) {
         if (havesub && (i >= info.subnames.size() || info.subnames[i].empty()))
             continue;
@@ -601,7 +600,6 @@ Text::visit(const Vector2dInfo &info)
             yvec[j] = info.cvec[iy + j];
             tot_vec[j] += yvec[j];
             total += yvec[j];
-            super_total[0] += yvec[j];
         }
 
         print.name = info.name + "_" +
@@ -620,7 +618,7 @@ Text::visit(const Vector2dInfo &info)
         print.name = info.name;
         print.subnames = total_subname;
         print.desc = info.desc;
-        print.vec = super_total;
+        print.vec = VResult(1, info.total());
         print.flags = print.flags & ~total;
         print(*stream);
     }