Applied. I have made the system used configurable, so one will need to use the --kib option to speed to replace the default (SI system).
On 12/17/2010 07:04 PM, Phil Sutter wrote: > Since measurement is done in bytes, use a capital B as unit. Also, > stepping by 1024 from one magnitude to the next is more common. This is > indicated by the 'i' in between the magnitude and unit symbols. > --- > examples/async_speed.c | 32 +++++++++++--------------------- > examples/speed.c | 32 +++++++++++--------------------- > 2 files changed, 22 insertions(+), 42 deletions(-) > > diff --git a/examples/async_speed.c b/examples/async_speed.c > index 679219b..940d923 100644 > --- a/examples/async_speed.c > +++ b/examples/async_speed.c > @@ -43,29 +43,19 @@ static void alarm_handler(int signo) > pfd.events = POLLIN; > } > > +static char *units[] = { "", "Ki", "Mi", "Gi", "Ti", 0}; > + > static void value2human(double bytes, double time, double* data, double* > speed,char* metric) > { > - if (bytes > 1000 && bytes < 1000*1000) { > - *data = ((double)bytes)/1000; > - *speed = *data/time; > - strcpy(metric, "Kb"); > - return; > - } else if (bytes >= 1000*1000 && bytes < 1000*1000*1000) { > - *data = ((double)bytes)/(1000*1000); > - *speed = *data/time; > - strcpy(metric, "Mb"); > - return; > - } else if (bytes >= 1000*1000*1000) { > - *data = ((double)bytes)/(1000*1000*1000); > - *speed = *data/time; > - strcpy(metric, "Gb"); > - return; > - } else { > - *data = (double)bytes; > - *speed = *data/time; > - strcpy(metric, "bytes"); > - return; > - } > + int unit = 0; > + > + *data = bytes; > + while (*data > 1024 && units[unit + 1]) { > + *data /= 1024; > + unit++; > + } > + *speed = *data / time; > + sprintf(metric, "%sB", units[unit]); > } > > > diff --git a/examples/speed.c b/examples/speed.c > index 998772d..63218a9 100644 > --- a/examples/speed.c > +++ b/examples/speed.c > @@ -39,29 +39,19 @@ static void alarm_handler(int signo) > must_finish = 1; > } > > +static char *units[] = { "", "Ki", "Mi", "Gi", "Ti", 0}; > + > static void value2human(double bytes, double time, double* data, double* > speed,char* metric) > { > - if (bytes > 1000 && bytes < 1000*1000) { > - *data = ((double)bytes)/1000; > - *speed = *data/time; > - strcpy(metric, "Kb"); > - return; > - } else if (bytes >= 1000*1000 && bytes < 1000*1000*1000) { > - *data = ((double)bytes)/(1000*1000); > - *speed = *data/time; > - strcpy(metric, "Mb"); > - return; > - } else if (bytes >= 1000*1000*1000) { > - *data = ((double)bytes)/(1000*1000*1000); > - *speed = *data/time; > - strcpy(metric, "Gb"); > - return; > - } else { > - *data = (double)bytes; > - *speed = *data/time; > - strcpy(metric, "bytes"); > - return; > - } > + int unit = 0; > + > + *data = bytes; > + while (*data > 1024 && units[unit + 1]) { > + *data /= 1024; > + unit++; > + } > + *speed = *data / time; > + sprintf(metric, "%sB", units[unit]); > } > > _______________________________________________ Cryptodev-linux-devel mailing list Cryptodev-linux-devel@gna.org https://mail.gna.org/listinfo/cryptodev-linux-devel