summaryrefslogtreecommitdiffstats
path: root/Meter.c
diff options
context:
space:
mode:
authorChristian Hesse <mail@eworm.de>2015-06-12 09:50:55 +0200
committerChristian Hesse <mail@eworm.de>2015-08-27 06:13:27 +0200
commit6f58fbc5dd091557129895bbd0a05335e411d19e (patch)
tree8c9b67ce97072ab0d53d1c2552994a60eb672984 /Meter.c
parentf3a9f5406beb52da58432fdc30eb9db233cff390 (diff)
make units more dynamic
Signed-off-by: Christian Hesse <mail@eworm.de>
Diffstat (limited to 'Meter.c')
-rw-r--r--Meter.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/Meter.c b/Meter.c
index cc661e6a..732203f9 100644
--- a/Meter.c
+++ b/Meter.c
@@ -141,6 +141,34 @@ Meter* Meter_new(struct ProcessList_* pl, int param, MeterClass* type) {
return this;
}
+int Meter_humanUnit(char* buffer, unsigned long int value, int size) {
+ const char * prefix = "KMGTPEZY";
+ unsigned long int powi = 1;
+ unsigned int written, powj = 1, precision = 2;
+
+ for(;;) {
+ if (value / 1024 < powi)
+ break;
+
+ if (prefix[1] == 0)
+ break;
+
+ powi *= 1024;
+ ++prefix;
+ }
+
+ for (; precision > 0; precision--) {
+ powj *= 10;
+ if (value / powi < powj)
+ break;
+ }
+
+ written = snprintf(buffer, size, "%.*f%c",
+ precision, (double) value / powi, *prefix);
+
+ return written;
+}
+
void Meter_delete(Object* cast) {
if (!cast)
return;

© 2014-2024 Faster IT GmbH | imprint | privacy policy