mimic++ v9.2.1
Loading...
Searching...
No Matches
std-stacktrace.hpp
Go to the documentation of this file.
1// Copyright Dominic (DNKpp) Koepke 2024 - 2025.
2// Distributed under the Boost Software License, Version 1.0.
3// (See accompanying file LICENSE_1_0.txt or copy at
4// https://www.boost.org/LICENSE_1_0.txt)
5
6#ifndef MIMICPP_EXT_STACKTRACE_STD_STACKTRACE_HPP
7#define MIMICPP_EXT_STACKTRACE_STD_STACKTRACE_HPP
8
9#include "mimic++/Fwd.hpp"
11
12#ifndef MIMICPP_DETAIL_IS_MODULE
13 #include <limits>
14 #include <stacktrace>
15 #include <string>
16#endif
17
19{
20 using type = std::stacktrace;
21};
22
23template <typename Allocator>
24struct mimicpp::util::stacktrace::backend_traits<std::basic_stacktrace<Allocator>>
25{
26 using Backend = std::basic_stacktrace<Allocator>;
27
28 [[nodiscard]]
29 static Backend current(std::size_t const skip, std::size_t const max) noexcept
30 {
31 MIMICPP_ASSERT(skip < std::numeric_limits<std::size_t>::max() - max, "Skip + max is too high.");
32
33 return Backend::current(skip + 1, max);
34 }
35
36 [[nodiscard]]
37 static Backend current(std::size_t const skip) noexcept
38 {
39 MIMICPP_ASSERT(skip < std::numeric_limits<std::size_t>::max(), "Skip is too high.");
40
41 return Backend::current(skip + 1);
42 }
43
44 [[nodiscard]]
45 static std::size_t size(Backend const& backend) noexcept
46 {
47 return backend.size();
48 }
49
50 [[nodiscard]]
51 static bool empty(Backend const& backend) noexcept
52 {
53 return backend.empty();
54 }
55
56 [[nodiscard]]
57 static std::string description(Backend const& backend, std::size_t const at)
58 {
59 return entry(backend, at).description();
60 }
61
62 [[nodiscard]]
63 static std::string source_file(Backend const& backend, std::size_t const at)
64 {
65 return entry(backend, at).source_file();
66 }
67
68 [[nodiscard]]
69 static std::size_t source_line(Backend const& backend, std::size_t const at)
70 {
71 return entry(backend, at).source_line();
72 }
73
74 [[nodiscard]]
75 static std::stacktrace_entry const& entry(Backend const& backend, std::size_t const at)
76 {
77 return backend.at(at);
78 }
79};
80
81#endif
#define MIMICPP_ASSERT(condition, msg)
Definition Config.hpp:51
Checks whether the given type satisfies the requirements of a stacktrace backend.
Definition Stacktrace.hpp:109
std::basic_stacktrace< Allocator > Backend
Definition std-stacktrace.hpp:26
static std::size_t source_line(Backend const &backend, std::size_t const at)
Definition std-stacktrace.hpp:69
static Backend current(std::size_t const skip) noexcept
Definition std-stacktrace.hpp:37
static Backend current(std::size_t const skip, std::size_t const max) noexcept
Definition std-stacktrace.hpp:29
static std::stacktrace_entry const & entry(Backend const &backend, std::size_t const at)
Definition std-stacktrace.hpp:75
static bool empty(Backend const &backend) noexcept
Definition std-stacktrace.hpp:51
static std::string description(Backend const &backend, std::size_t const at)
Definition std-stacktrace.hpp:57
static std::string source_file(Backend const &backend, std::size_t const at)
Definition std-stacktrace.hpp:63
static std::size_t size(Backend const &backend) noexcept
Definition std-stacktrace.hpp:45
Trait type for stacktrace backends.
Definition Fwd.hpp:453
Definition Stacktrace.hpp:529
NullBackend type
Definition Stacktrace.hpp:530