diff options
author | Explorer09 <explorer09@gmail.com> | 2023-10-27 18:34:47 +0800 |
---|---|---|
committer | BenBE <BenBE@geshi.org> | 2023-11-24 09:51:25 +0100 |
commit | 5751bafb8db06b843a9a79e100751cfcadc09f90 (patch) | |
tree | 8771ae3f5c4068b7cf1db3b84de3240b3da1dfbe /Meter.h | |
parent | e34a9fcc8cda01e4a58f59b4a9d990eda8effd60 (diff) |
Rewrite Meter_humanUnit() to accept floating point value
Since Meter_humanUnit() is often called with floating point values in
Meter objects, rewrite the function to let it process `double` type
natively, and save floating point to integer casts.
The rewritten function:
* Allows higher orders of magnitude including 'R' and 'Q', and
addresses infinity. (The previous version has a maximum value of
(2^64 - 1) representing 16 ZiB.)
* Rounds values when they are in intervals (99.9, 100) and (9.99, 10),
and displays them with correct precision (number of fraction digits).
* Produces assertion error on negative and NaN values (undefined
behavior).
Signed-off-by: Kang-Che Sung <explorer09@gmail.com>
Diffstat (limited to 'Meter.h')
-rw-r--r-- | Meter.h | 4 |
1 files changed, 3 insertions, 1 deletions
@@ -146,7 +146,9 @@ extern const MeterClass Meter_class; Meter* Meter_new(const Machine* host, unsigned int param, const MeterClass* type); -int Meter_humanUnit(char* buffer, unsigned long int value, size_t size); +/* Converts 'value' in kibibytes into a human readable string. + Example output strings: "0K", "1023K", "98.7M" and "1.23G" */ +int Meter_humanUnit(char* buffer, double value, size_t size); void Meter_delete(Object* cast); |