let string_of_size ?(fuzzy=false) sz =
let buffer = Buffer.create 16
in
let append_unit unt vl =
begin
if Buffer.length buffer = 0 then
()
else
Buffer.add_char buffer ' '
end;
Printf.bprintf buffer "%d %s" (truncate vl) unt;
vl -. (float_of_int (truncate vl))
in
let rec string_of_size_aux sz =
if fuzzy && (Buffer.length buffer > 0) then
Buffer.contents buffer
else
begin
match sz with
TB f when f > 1.0 ->
string_of_size_aux (TB (append_unit "TB" f))
| GB f when f > 1.0 ->
string_of_size_aux (GB (append_unit "GB" f))
| MB f when f > 1.0 ->
string_of_size_aux (MB (append_unit "MB" f))
| KB f when f > 1.0 ->
string_of_size_aux (KB (append_unit "KB" f))
| B f when f > 1.0 ->
string_of_size_aux (B (append_unit "B" f))
| B f ->
Buffer.contents buffer
| sz ->
string_of_size_aux (size_convert_down sz)
end
in
string_of_size_aux sz