LCOV - code coverage report
Current view: top level - opt/homebrew/include/boost/exception - get_error_info.hpp (source / functions) Hit Total Coverage
Test: total_coverage.info Lines: 0 11 0.0 %
Date: 2026-06-25 07:23:43 Functions: 0 6 0.0 %

          Line data    Source code
       1             : //Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.
       2             : 
       3             : //Distributed under the Boost Software License, Version 1.0. (See accompanying
       4             : //file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
       5             : 
       6             : #ifndef BOOST_EXCEPTION_1A590226753311DD9E4CCF6156D89593
       7             : #define BOOST_EXCEPTION_1A590226753311DD9E4CCF6156D89593
       8             : 
       9             : #include <boost/config.hpp>
      10             : #include <boost/exception/exception.hpp>
      11             : #include <boost/exception/detail/error_info_impl.hpp>
      12             : #include <boost/exception/detail/type_info.hpp>
      13             : #include <boost/exception/detail/shared_ptr.hpp>
      14             : #include <boost/assert.hpp>
      15             : 
      16             : #ifndef BOOST_EXCEPTION_ENABLE_WARNINGS
      17             : #if defined(__GNUC__) && __GNUC__*100+__GNUC_MINOR__>301
      18             : #pragma GCC system_header
      19             : #endif
      20             : #ifdef __clang__
      21             : #pragma clang system_header
      22             : #endif
      23             : #ifdef _MSC_VER
      24             : #pragma warning(push,1)
      25             : #endif
      26             : #endif
      27             : 
      28             : namespace
      29             : boost
      30             :     {
      31             :     namespace
      32             :     exception_detail
      33             :         {
      34             :         template <class ErrorInfo>
      35             :         struct
      36             :         get_info
      37             :             {
      38             :             static
      39             :             typename ErrorInfo::value_type *
      40             :             get( exception const & x )
      41             :                 {
      42             :                 if( exception_detail::error_info_container * c=x.data_.get() )
      43             :                     if( shared_ptr<exception_detail::error_info_base> eib = c->get(BOOST_EXCEPTION_STATIC_TYPEID(ErrorInfo)) )
      44             :                         {
      45             : #ifndef BOOST_NO_RTTI
      46             :                         BOOST_ASSERT( 0!=dynamic_cast<ErrorInfo *>(eib.get()) );
      47             : #endif
      48             :                         ErrorInfo * w = static_cast<ErrorInfo *>(eib.get());
      49             :                         return &w->value();
      50             :                         }
      51             :                 return 0;
      52             :                 }
      53             :             };
      54             : 
      55             :         template <>
      56             :         struct
      57             :         get_info<throw_function>
      58             :             {
      59             :             static
      60             :             char const * *
      61           0 :             get( exception const & x )
      62             :                 {
      63           0 :                 return x.throw_function_ ? &x.throw_function_ : 0;
      64             :                 }
      65             :             };
      66             : 
      67             :         template <>
      68             :         struct
      69             :         get_info<throw_file>
      70             :             {
      71             :             static
      72             :             char const * *
      73           0 :             get( exception const & x )
      74             :                 {
      75           0 :                 return x.throw_file_ ? &x.throw_file_ : 0;
      76             :                 }
      77             :             };
      78             : 
      79             :         template <>
      80             :         struct
      81             :         get_info<throw_line>
      82             :             {
      83             :             static
      84             :             int *
      85           0 :             get( exception const & x )
      86             :                 {
      87           0 :                 return x.throw_line_!=-1 ? &x.throw_line_ : 0;
      88             :                 }
      89             :             };
      90             : 
      91             :         template <class T,class R>
      92             :         struct
      93             :         get_error_info_return_type
      94             :             {
      95             :             typedef R * type;
      96             :             };
      97             : 
      98             :         template <class T,class R>
      99             :         struct
     100             :         get_error_info_return_type<T const,R>
     101             :             {
     102             :             typedef R const * type;
     103             :             };
     104             :         }
     105             : 
     106             : #ifdef BOOST_NO_RTTI
     107             :     template <class ErrorInfo>
     108             :     inline
     109             :     typename ErrorInfo::value_type const *
     110             :     get_error_info( boost::exception const & x )
     111             :         {
     112             :         return exception_detail::get_info<ErrorInfo>::get(x);
     113             :         }
     114             :     template <class ErrorInfo>
     115             :     inline
     116             :     typename ErrorInfo::value_type *
     117             :     get_error_info( boost::exception & x )
     118             :         {
     119             :         return exception_detail::get_info<ErrorInfo>::get(x);
     120             :         }
     121             : #else
     122             :     template <class ErrorInfo,class E>
     123             :     inline
     124             :     typename exception_detail::get_error_info_return_type<E,typename ErrorInfo::value_type>::type
     125           0 :     get_error_info( E & some_exception )
     126             :         {
     127           0 :         if( exception const * x = dynamic_cast<exception const *>(&some_exception) )
     128           0 :             return exception_detail::get_info<ErrorInfo>::get(*x);
     129             :         else
     130           0 :             return 0;
     131           0 :         }
     132             : #endif
     133             :     }
     134             : 
     135             : #if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
     136             : #pragma warning(pop)
     137             : #endif
     138             : #endif

Generated by: LCOV version 1.16