Stats: fix dist stat and enable VectorDistStat
authorLisa Hsu <Lisa.Hsu@amd.com>
Thu, 3 Jun 2010 18:06:12 +0000 (11:06 -0700)
committerLisa Hsu <Lisa.Hsu@amd.com>
Thu, 3 Jun 2010 18:06:12 +0000 (11:06 -0700)
src/base/statistics.hh
src/base/stats/text.cc

index 06a9d465dbf32c078ba352f94436ac8c4c6d5aaa..f7625779a141b758232f913c194d92dd049f7647 100644 (file)
@@ -1698,7 +1698,11 @@ class VectorDistBase : public DataWrapVec<Derived, VectorDistInfoProxy>
         delete [] reinterpret_cast<char *>(storage);
     }
 
-    Proxy operator[](off_type index);
+    Proxy operator[](off_type index)
+    {
+        assert(index >= 0 && index < size());
+        return Proxy(this->self(), index);
+    }
 
     size_type
     size() const
@@ -1739,15 +1743,15 @@ template <class Stat>
 class DistProxy
 {
   private:
-    Stat *stat;
+    Stat &stat;
     off_type index;
 
   protected:
-    typename Stat::Storage *data() { return stat->data(index); }
-    const typename Stat::Storage *data() const { return stat->data(index); }
+    typename Stat::Storage *data() { return stat.data(index); }
+    const typename Stat::Storage *data() const { return stat.data(index); }
 
   public:
-    DistProxy(Stat *s, off_type i)
+    DistProxy(Stat &s, off_type i)
         : stat(s), index(i)
     {}
 
@@ -1788,15 +1792,16 @@ class DistProxy
      */
     void reset() { }
 };
-
+/*
 template <class Derived, class Stor>
 inline typename VectorDistBase<Derived, Stor>::Proxy
 VectorDistBase<Derived, Stor>::operator[](off_type index)
 {
     assert (index >= 0 && index < size());
     typedef typename VectorDistBase<Derived, Stor>::Proxy Proxy;
-    return Proxy(this, index);
+    return Proxy(this->self(), index);
 }
+*/
 
 #if 0
 template <class Storage>
@@ -2267,7 +2272,7 @@ class Distribution : public DistBase<Distribution, DistStor>
         params->min = min;
         params->max = max;
         params->bucket_size = bkt;
-        params->buckets = (size_type)rint((max - min) / bkt + 1.0);
+        params->buckets = (size_type)rint((max - min + 1.0) / bkt );
         this->setParams(params);
         this->doInit();
         return this->self();
@@ -2328,7 +2333,7 @@ class VectorDistribution : public VectorDistBase<VectorDistribution, DistStor>
         params->min = min;
         params->max = max;
         params->bucket_size = bkt;
-        params->buckets = (size_type)rint((max - min) / bkt + 1.0);
+        params->buckets = (size_type)rint((max - min + 1.0) / bkt);
         this->setParams(params);
         this->doInit(size);
         return this->self();
index 10983506f1e681bc54967c6ff13b30f56fcdaf6e..090ddff7d3480884f350872d36eb5432e98a0c82 100644 (file)
@@ -412,7 +412,7 @@ DistPrint::operator()(ostream &stream) const
         namestr << base;
 
         Counter low = i * bucket_size + min;
-        Counter high = ::min(low + bucket_size, max);
+        Counter high = ::min(low + bucket_size - 1.0, max);
         namestr << low;
         if (low < high)
             namestr << "-" << high;