github.com/searKing/golang/go@v1.2.117/runtime/cgosymbolizer/include/boost/stacktrace/detail/frame_decl.hpp (about)

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