From 6f58fbc5dd091557129895bbd0a05335e411d19e Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Fri, 12 Jun 2015 09:50:55 +0200 Subject: make units more dynamic Signed-off-by: Christian Hesse --- Meter.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'Meter.c') 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; -- cgit v1.2.3