10#include "../microfmt.hpp"
31template <
typename WordType,
size_t N>
struct RELOCO_POINTER
reg_grid_desc {
43 microfmt::string_view names[N];
55template <
typename WordType,
typename... Names>
68template <
typename WordType,
size_t N>
struct RELOCO_POINTER
reg_grid_view {
72 const WordType *values{
nullptr};
91RELOCO_BEGIN_UNSAFE_CODE
92template <
typename StructOrArray,
typename WordType,
size_t N>
94 static_assert(
sizeof(StructOrArray) >= N *
sizeof(WordType),
95 "Source structure size is smaller than register grid definition");
117 static constexpr size_t hex_digits =
sizeof(WordType) * 2;
130 if (!gv.desc || !gv.values)
132 const auto &d = *gv.desc;
134 if (!d.title.empty()) {
140 const uint8_t cols = (d.columns > 0) ? d.columns : 4;
142 for (
size_t i = 0; i < N; ++i) {
143 RELOCO_BEGIN_UNSAFE_BUFFER_USAGE
145 microfmt::string_view name = d.names[i];
147 RELOCO_END_UNSAFE_BUFFER_USAGE
152 if (name.size() < 5) {
153 for (
size_t p = name.size(); p < 5; ++p)
158 RELOCO_BEGIN_UNSAFE_BUFFER_USAGE
160 detail::format_unsigned<detail::radix::hex>(out,
static_cast<uint64_t
>(gv.values[i]),
true, hex_digits);
162 RELOCO_END_UNSAFE_BUFFER_USAGE
165 if ((i + 1) % cols == 0 || (i + 1) == N) {
Definition microfmt.hpp:881
reloco::sink sink
Type-erased, zero-allocation output sink.
Definition microfmt.hpp:46
RELOCO_BEGIN_UNSAFE_CODE constexpr auto make_reg_grid(const StructOrArray &data, const reg_grid_desc< WordType, N > &desc) noexcept
Builds a reg_grid_view over an array/struct of register data.
Definition grid_view.hpp:93
RELOCO_END_UNSAFE_CODE
Definition remote_object.hpp:132
Static descriptor naming N register entries within a grid.
Definition grid_view.hpp:31
microfmt::string_view title
Optional grid title rendered as === title ===.
Definition grid_view.hpp:35
Empty tag used to drive CTAD for reg_grid_desc.
Definition grid_view.hpp:50
Non-owning view pairing register values with their static descriptor.
Definition grid_view.hpp:68