8#include "../microfmt.hpp"
29[[nodiscard]]
constexpr hex_view<T> hex(T val,
int width = 0,
bool prefix =
false,
bool uppercase =
false) noexcept {
38 out.write(h.uppercase ?
"0X" :
"0x");
40 detail::format_unsigned<detail::radix::hex>(out,
static_cast<uint64_t
>(h.value), h.uppercase, h.width);
55[[nodiscard]]
constexpr bin_view<T> bin(T val,
int width =
sizeof(T) * 8,
bool prefix =
false) noexcept {
66 detail::format_binary(out,
static_cast<uint64_t
>(b.value), b.width);
88 static constexpr reloco::array<string_view, 6> units = {
"B",
"KiB",
"MiB",
"GiB",
"TiB",
"PiB"};
89 uint64_t val = b.bytes;
93 while (val >= 1024 && unit_idx < 5) {
94 rem = (val % 1024) * 10 / 1024;
99 detail::format_unsigned<detail::radix::decimal>(out, val,
false, 0);
100 if (unit_idx > 0 && rem > 0) {
102 detail::format_unsigned<detail::radix::decimal>(out, rem,
false, 0);
105 out.write(units[unit_idx]);
130 detail::format_unsigned<detail::radix::hex>(out,
static_cast<uint64_t
>(v.base),
false);
131 if (v.addr >= v.base) {
133 detail::format_unsigned<detail::radix::hex>(out,
static_cast<uint64_t
>(v.addr - v.base),
false);
136 detail::format_unsigned<detail::radix::hex>(out,
static_cast<uint64_t
>(v.base - v.addr),
false);
158 detail::format_unsigned<detail::radix::hex>(out,
static_cast<uint64_t
>(r.start),
false);
160 detail::format_unsigned<detail::radix::hex>(out,
static_cast<uint64_t
>(r.end),
false);
162 if (r.end >= r.start) {
165 out.write(
"invalid");
178 microfmt::string_view text{};
193 if (v.text.size() >= v.width) {
198 const size_t pad_total = v.width - v.text.size();
201 for (
size_t i = 0; i < pad_total; ++i)
206 const size_t left = pad_total / 2;
208 for (
size_t i = 0; i <
left; ++i)
211 for (
size_t i = 0; i <
right; ++i)
218 for (
size_t i = 0; i < pad_total; ++i)
234 span<const T> items{};
235 microfmt::string_view delimiter{
", "};
250 elem_fmt.
parse(dummy_ctx);
252 for (
const auto &item : j.items) {
254 out.write(j.delimiter);
257 elem_fmt.
format(item, out);
Definition microfmt.hpp:881
#define MICROFMT_API_CLASS
Definition compat.hpp:181
constexpr hex_view< T > hex(T val, int width=0, bool prefix=false, bool uppercase=false) noexcept
Definition format_helpers.hpp:29
reloco::sink sink
Type-erased, zero-allocation output sink.
Definition microfmt.hpp:46
constexpr aligned_text_view align(microfmt::string_view text, size_t width, align_mode mode=align_mode::left, char pad_char=' ') noexcept
Definition format_helpers.hpp:184
constexpr joined_span_view< T > join(span< const T > items, microfmt::string_view delim=", ") noexcept
Definition format_helpers.hpp:239
constexpr addr_offset_view addr_offset(uintptr_t addr, uintptr_t base) noexcept
Definition format_helpers.hpp:121
align_mode
Definition format_helpers.hpp:175
constexpr bytes_view bytes(uint64_t count) noexcept
Definition format_helpers.hpp:82
constexpr auto bin(T val) noexcept
Definition binary.hpp:34
constexpr memory_range_view mem_range(uintptr_t start, uintptr_t end) noexcept
Definition format_helpers.hpp:149
Formats an address with a base + offset view: 0x7fff0000+0x140
Definition format_helpers.hpp:116
Definition format_helpers.hpp:177
Explicit binary integer formatter (e.g. for bitfield and control register flags).
Definition format_helpers.hpp:48
T value
Definition format_helpers.hpp:49
int width
Definition format_helpers.hpp:50
bool prefix
Definition format_helpers.hpp:51
Automatically formats byte counts into human-readable units (B, KiB, MiB, GiB, TiB).
Definition format_helpers.hpp:78
void format(const aligned_text_view &v, const sink &out) const noexcept
Definition format_helpers.hpp:192
constexpr void parse(format_parse_context &) noexcept
Definition format_helpers.hpp:190
Explicitly formats an integer in hexadecimal or binary with customizable prefix, padding width,...
Definition format_helpers.hpp:21
int width
Definition format_helpers.hpp:23
bool prefix
Definition format_helpers.hpp:24
bool uppercase
Definition format_helpers.hpp:25
T value
Definition format_helpers.hpp:22
Formats a contiguous array/span of values separated by a custom delimiter. Example: join(span,...
Definition format_helpers.hpp:233
Formats an address range: [0x10000000..0x10004000] (16 KiB)
Definition format_helpers.hpp:144