2014-10-25 18:33:52 +00:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <string>
|
2020-05-30 21:35:52 +00:00
|
|
|
#include <fmt/format.h>
|
|
|
|
|
2014-10-25 18:33:52 +00:00
|
|
|
|
2019-10-07 18:56:03 +00:00
|
|
|
namespace DB
|
|
|
|
{
|
|
|
|
|
|
|
|
class WriteBuffer;
|
|
|
|
|
|
|
|
}
|
2014-10-25 18:33:52 +00:00
|
|
|
|
2017-05-10 04:00:19 +00:00
|
|
|
/// Displays the passed size in bytes as 123.45 GiB.
|
2015-09-20 02:03:12 +00:00
|
|
|
void formatReadableSizeWithBinarySuffix(double value, DB::WriteBuffer & out, int precision = 2);
|
2014-10-25 18:33:52 +00:00
|
|
|
std::string formatReadableSizeWithBinarySuffix(double value, int precision = 2);
|
|
|
|
|
2017-05-10 04:00:19 +00:00
|
|
|
/// Displays the passed size in bytes as 132.55 GB.
|
2015-09-20 02:03:12 +00:00
|
|
|
void formatReadableSizeWithDecimalSuffix(double value, DB::WriteBuffer & out, int precision = 2);
|
2014-10-25 18:33:52 +00:00
|
|
|
std::string formatReadableSizeWithDecimalSuffix(double value, int precision = 2);
|
|
|
|
|
2017-05-07 20:25:26 +00:00
|
|
|
/// Prints the number as 123.45 billion.
|
2015-09-20 02:03:12 +00:00
|
|
|
void formatReadableQuantity(double value, DB::WriteBuffer & out, int precision = 2);
|
2014-10-25 18:33:52 +00:00
|
|
|
std::string formatReadableQuantity(double value, int precision = 2);
|
2020-05-30 21:35:52 +00:00
|
|
|
|
|
|
|
|
|
|
|
/// Wrapper around value. If used with fmt library (e.g. for log messages),
|
|
|
|
/// value is automatically formatted as size with binary suffix.
|
|
|
|
struct ReadableSize
|
|
|
|
{
|
|
|
|
double value;
|
|
|
|
explicit ReadableSize(double value_) : value(value_) {}
|
|
|
|
};
|
|
|
|
|
|
|
|
/// See https://fmt.dev/latest/api.html#formatting-user-defined-types
|
|
|
|
template <>
|
|
|
|
struct fmt::formatter<ReadableSize>
|
|
|
|
{
|
|
|
|
constexpr auto parse(format_parse_context & ctx)
|
|
|
|
{
|
|
|
|
auto it = ctx.begin();
|
|
|
|
auto end = ctx.end();
|
|
|
|
|
|
|
|
/// Only support {}.
|
|
|
|
if (it != end && *it != '}')
|
|
|
|
throw format_error("invalid format");
|
|
|
|
|
|
|
|
return it;
|
|
|
|
}
|
|
|
|
|
|
|
|
template <typename FormatContext>
|
|
|
|
auto format(const ReadableSize & size, FormatContext & ctx)
|
|
|
|
{
|
|
|
|
return format_to(ctx.out(), "{}", formatReadableSizeWithBinarySuffix(size.value));
|
|
|
|
}
|
|
|
|
};
|