35 #include <string_view> 41 #ifndef STX_REPORT_RESERVE_SIZE 48 "... (error report truncated)";
52 "STX_REPORT_RESERVE_SIZE must contain truncation message");
131 : reserve_{}, report_size_{size} {
135 explicit constexpr
FixedReport(std::string_view
const& info) noexcept
136 : reserve_{}, report_size_{0} {
139 size_t const str_size = info.size();
141 size_t const str_clip_size =
147 for (; pos < str_clip_size; pos++) {
148 reserve_[pos] = info[pos];
151 if (should_truncate) {
166 [[nodiscard]] constexpr std::string_view
what() const noexcept {
167 return std::string_view(reserve_, report_size_);
272 constexpr
SpanReport() noexcept : custom_payload_{
nullptr}, report_size_{0} {}
276 : custom_payload_{str}, report_size_{size} {}
278 explicit constexpr
SpanReport(std::string_view
const& str) noexcept
279 : custom_payload_{str.data()}, report_size_{str.size()} {}
281 [[nodiscard]] constexpr std::string_view
what() const noexcept {
282 return std::string_view(custom_payload_, report_size_);
292 const char* custom_payload_;
307 : content_{report.what()} {}
310 : content_{report.what()} {}
318 [[nodiscard]] constexpr std::string_view
const&
data() const noexcept {
323 std::string_view content_;
330 template <
typename T>
335 #define STX_INTERNAL_MAKE_REPORT_(STX_ARG_SIZE, STX_ARG_FORMAT, STX_ARG_VALUE) \ 337 char fmt_buffer[STX_ARG_SIZE + 1]; \ 338 int fmt_buffer_size = std::snprintf(fmt_buffer, STX_ARG_SIZE + 1, \ 339 STX_ARG_FORMAT, STX_ARG_VALUE); \ 340 if (fmt_buffer_size < 0 || fmt_buffer_size >= STX_ARG_SIZE + 1) { \ 341 return FixedReport(kFormatError, kFormatErrorSize); \ 343 return FixedReport(fmt_buffer, fmt_buffer_size); \ 346 template <
typename T>
348 T
const*
const& ptr) noexcept {
350 reinterpret_cast<uintptr_t const>(ptr));
353 template <
typename T>
355 T*
const& ptr) noexcept {
357 reinterpret_cast<uintptr_t>(ptr));
361 int8_t
const& v) noexcept {
366 uint8_t
const& v) noexcept {
371 int16_t
const& v) noexcept {
376 uint16_t
const& v) noexcept {
381 int32_t
const& v) noexcept {
386 uint32_t
const& v) noexcept {
390 #undef STX_INTERNAL_MAKE_REPORT_ 393 std::string_view
const& v) noexcept {
398 std::string
const& v) noexcept {
constexpr int kU16FmtSize
5 digits
Definition: common.h:124
constexpr int kU32FmtSize
10 digits
Definition: common.h:120
constexpr size_t const kFormatErrorSize
Definition: report.h:328
char[kReportReserveSize] storage_type
Definition: report.h:125
#define STX_INTERNAL_MAKE_REPORT_(STX_ARG_SIZE, STX_ARG_FORMAT, STX_ARG_VALUE)
Definition: report.h:335
constexpr std::string_view what() const noexcept
Definition: report.h:281
constexpr FixedReport(const char *str, size_t size) noexcept
size: string size excluding null-terminator
Definition: report.h:130
constexpr FixedReport(std::string_view const &info) noexcept
Definition: report.h:135
constexpr char const kFormatError[]
Definition: report.h:327
constexpr char const kReportTruncationMessage[]
Definition: report.h:47
constexpr SpanReport(const char *str, size_t size) noexcept
size: string size excluding null-terminator
Definition: report.h:275
constexpr ReportPayload(SpanReport const &report) noexcept
Definition: report.h:309
constexpr int kI16FmtSize
5 digits + 1 sign
Definition: common.h:122
constexpr std::string_view const & data() const noexcept
Definition: report.h:318
constexpr SpanReport() noexcept
Definition: report.h:272
constexpr ReportPayload(FixedReport const &report) noexcept
Definition: report.h:306
constexpr int kI8FmtSize
3 digits + 1 sign
Definition: common.h:126
#define STX_END_NAMESPACE
Definition: config.h:329
constexpr int kI32FmtSize
10 digits + 1 sign
Definition: common.h:118
constexpr ReportQuery const report_query
Tag value for dispatching reports.
Definition: report.h:58
constexpr FixedReport() noexcept
Definition: report.h:127
constexpr int kxPtrFmtSize
Definition: common.h:110
constexpr int kU8FmtSize
3 digits
Definition: common.h:128
#define STX_BEGIN_NAMESPACE
Definition: config.h:325
SpanReport operator>>(ReportQuery, std::string const &v) noexcept
Definition: report.h:397
Tag type for dispatching reports.
Definition: report.h:55
constexpr size_t kReportReserveSize
Definition: report.h:42
constexpr std::string_view what() const noexcept
Definition: report.h:166
constexpr SpanReport(std::string_view const &str) noexcept
Definition: report.h:278