Statistics::getUnitFactor and Statistics::getUnitString were not
consistent and difficult to understand. The readout displayed
incorrect values like 0.9kBps while the actual rate was 0.9MBps.

The current function will switch to next-higher rate value when rate
exceeds 512.0 units/s.
---
 src/statistics.cpp |   29 +++++++++++++++++------------
 1 files changed, 17 insertions(+), 12 deletions(-)

diff --git a/src/statistics.cpp b/src/statistics.cpp
index a39e33c..579ee9c 100644
--- a/src/statistics.cpp
+++ b/src/statistics.cpp
@@ -81,13 +81,12 @@ float Statistics::getUnitFactor(dataUnit unit, long long 
value)
     {
         case humanReadableBit:
         case humanReadableByte:
-            factor *= 1024 * 1024 * 1024;
-            for(int i = 3; i >= 0; --i)
+            for(int i = 0; i < 3; i++)
             {
-                if(value * (unit % 2 == 0 ? 8 : 1) >= factor)
+                if( value / factor < 500.0 )
                     return factor;
 
-                factor /= 1024;
+                factor *= 1024.0;
             }
             return factor;
         case bit:
@@ -114,14 +113,20 @@ string Statistics::getUnitString(dataUnit unit, long long 
value)
     switch(unit)
     {
         case humanReadableBit:
-        case humanReadableByte:
-            if(value >= 1024 * 1024 * 1024 / (unit % 2 == 0 ? 8 : 1))
-                return 'G' + description;
-            if(value >= 1024 * 1024 / (unit % 2 == 0 ? 8 : 1))
-                return 'M' + description;
-            if(value >= 1024 / (unit % 2 == 0 ? 8 : 1))
-                return 'k' + description;
-            return description;
+        case humanReadableByte: 
+        {
+            const string units[4] = { "", "k", "M", "G" };
+
+            value *= (unit % 2 == 0 ? 8 : 1);
+            for( int i=0; i<4; i++ ){
+                if(value < 500 )
+                    return units[i] + description;
+
+                value /= 1024;
+            }
+
+            return units[3] + description;
+        }
         case bit:
         case byte:
             return description;
-- 
1.7.1




-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to