github.com/searKing/golang/go@v1.2.117/os/signal/cgo/include/boost/stacktrace/detail/frame_decl.hpp (about) 1 // Copyright Antony Polukhin, 2016-2023. 2 // 3 // Distributed under the Boost Software License, Version 1.0. (See 4 // accompanying file LICENSE_1_0.txt or copy at 5 // http://www.boost.org/LICENSE_1_0.txt) 6 7 #ifndef BOOST_STACKTRACE_DETAIL_FRAME_DECL_HPP 8 #define BOOST_STACKTRACE_DETAIL_FRAME_DECL_HPP 9 10 #include <boost/config.hpp> 11 #ifdef BOOST_HAS_PRAGMA_ONCE 12 # pragma once 13 #endif 14 15 #include <iosfwd> 16 #include <string> 17 18 #include <boost/stacktrace/safe_dump_to.hpp> // boost::stacktrace::detail::native_frame_ptr_t 19 #include <boost/stacktrace/detail/void_ptr_cast.hpp> 20 21 #include <boost/stacktrace/detail/push_options.h> 22 23 /// @file boost/stacktrace/detail/frame_decl.hpp 24 /// Use <boost/stacktrace/frame.hpp> header instead of this one! 25 26 namespace boost { namespace stacktrace { 27 28 /// @class boost::stacktrace::frame boost/stacktrace/detail/frame_decl.hpp <boost/stacktrace/frame.hpp> 29 /// @brief Class that stores frame/function address and can get information about it at runtime. 30 class frame { 31 public: 32 typedef boost::stacktrace::detail::native_frame_ptr_t native_frame_ptr_t; 33 34 private: 35 /// @cond 36 native_frame_ptr_t addr_; 37 /// @endcond 38 39 public: 40 /// @brief Constructs frame that references NULL address. 41 /// Calls to source_file() and source_line() will return empty string. 42 /// Calls to source_line() will return 0. 43 /// 44 /// @b Complexity: O(1). 45 /// 46 /// @b Async-Handler-Safety: Safe. 47 /// @throws Nothing. 48 constexpr frame() noexcept 49 : addr_(0) 50 {} 51 52 #ifdef BOOST_STACKTRACE_DOXYGEN_INVOKED 53 /// @brief Copy constructs frame. 54 /// 55 /// @b Complexity: O(1). 56 /// 57 /// @b Async-Handler-Safety: Safe. 58 /// @throws Nothing. 59 constexpr frame(const frame&) = default; 60 61 /// @brief Copy assigns frame. 62 /// 63 /// @b Complexity: O(1). 64 /// 65 /// @b Async-Handler-Safety: Safe. 66 /// @throws Nothing. 67 constexpr frame& operator=(const frame&) = default; 68 #endif 69 70 /// @brief Constructs frame that references addr and could later generate information about that address using platform specific features. 71 /// 72 /// @b Complexity: O(1). 73 /// 74 /// @b Async-Handler-Safety: Safe. 75 /// @throws Nothing. 76 constexpr explicit frame(native_frame_ptr_t addr) noexcept 77 : addr_(addr) 78 {} 79 80 /// @brief Constructs frame that references function_addr and could later generate information about that function using platform specific features. 81 /// 82 /// @b Complexity: O(1). 83 /// 84 /// @b Async-Handler-Safety: Safe. 85 /// @throws Nothing. 86 template <class T> 87 explicit frame(T* function_addr) noexcept 88 : addr_(boost::stacktrace::detail::void_ptr_cast<native_frame_ptr_t>(function_addr)) 89 {} 90 91 /// @returns Name of the frame (function name in a human readable form). 92 /// 93 /// @b Complexity: unknown (lots of platform specific work). 94 /// 95 /// @b Async-Handler-Safety: Unsafe. 96 /// @throws std::bad_alloc if not enough memory to construct resulting string. 97 BOOST_STACKTRACE_FUNCTION std::string name() const; 98 99 /// @returns Address of the frame function. 100 /// 101 /// @b Complexity: O(1). 102 /// 103 /// @b Async-Handler-Safety: Safe. 104 /// @throws Nothing. 105 constexpr native_frame_ptr_t address() const noexcept { 106 return addr_; 107 } 108 109 /// @returns Path to the source file, were the function of the frame is defined. Returns empty string 110 /// if this->source_line() == 0. 111 /// @throws std::bad_alloc if not enough memory to construct resulting string. 112 /// 113 /// @b Complexity: unknown (lots of platform specific work). 114 /// 115 /// @b Async-Handler-Safety: Unsafe. 116 BOOST_STACKTRACE_FUNCTION std::string source_file() const; 117 118 /// @returns Code line in the source file, were the function of the frame is defined. 119 /// @throws std::bad_alloc if not enough memory to construct string for internal needs. 120 /// 121 /// @b Complexity: unknown (lots of platform specific work). 122 /// 123 /// @b Async-Handler-Safety: Unsafe. 124 BOOST_STACKTRACE_FUNCTION std::size_t source_line() const; 125 126 /// @brief Checks that frame is not references NULL address. 127 /// @returns `true` if `this->address() != 0` 128 /// 129 /// @b Complexity: O(1) 130 /// 131 /// @b Async-Handler-Safety: Safe. 132 constexpr explicit operator bool () const noexcept { return !empty(); } 133 134 /// @brief Checks that frame references NULL address. 135 /// @returns `true` if `this->address() == 0` 136 /// 137 /// @b Complexity: O(1) 138 /// 139 /// @b Async-Handler-Safety: Safe. 140 constexpr bool empty() const noexcept { return !address(); } 141 }; 142 143 144 namespace detail { 145 BOOST_STACKTRACE_FUNCTION std::string to_string(const frame* frames, std::size_t size); 146 } // namespace detail 147 148 }} // namespace boost::stacktrace 149 150 151 #include <boost/stacktrace/detail/pop_options.h> 152 153 #endif // BOOST_STACKTRACE_DETAIL_FRAME_DECL_HPP