LCOV - code coverage report
Current view: top level - url/grammar/impl - error.hpp (source / functions) Coverage Total Hit
Test: coverage_remapped.info Lines: 100.0 % 36 36
Test Date: 2026-10-16 04:17:11 Functions: 100.0 % 11 11

           TLA  Line data    Source code
       1                 : //
       2                 : // Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com)
       3                 : // Copyright (c) 2022 Alan de Freitas (alandefreitas@gmail.com)
       4                 : //
       5                 : // Distributed under the Boost Software License, Version 1.0. (See accompanying
       6                 : // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
       7                 : //
       8                 : // Official repository: https://github.com/boostorg/url
       9                 : //
      10                 : 
      11                 : #ifndef BOOST_URL_GRAMMAR_IMPL_ERROR_HPP
      12                 : #define BOOST_URL_GRAMMAR_IMPL_ERROR_HPP
      13                 : 
      14                 : #include <type_traits>
      15                 : 
      16                 : namespace boost {
      17                 : namespace system {
      18                 : template<>
      19                 : struct is_error_code_enum<
      20                 :     ::boost::urls::grammar::error>
      21                 : {
      22                 :     static bool const value = true;
      23                 : };
      24                 : template<>
      25                 : struct is_error_condition_enum<
      26                 :     ::boost::urls::grammar::condition>
      27                 : {
      28                 :     static bool const value = true;
      29                 : };
      30                 : } // system
      31                 : } // boost
      32                 : 
      33                 : namespace boost {
      34                 : namespace urls {
      35                 : namespace grammar {
      36                 : 
      37                 : namespace detail {
      38                 : 
      39                 : struct BOOST_SYMBOL_VISIBLE
      40                 :     error_cat_type
      41                 :     : system::error_category
      42                 : {
      43                 :     BOOST_URL_CXX20_CONSTEXPR
      44 HIT         616 :     const char* name(
      45                 :         ) const noexcept override
      46                 :     {
      47             616 :         return "boost.url.grammar";
      48                 :     }
      49                 : 
      50             616 :     std::string message(
      51                 :         int code) const override
      52                 :     {
      53            1232 :         return message(code, nullptr, 0);
      54                 :     }
      55                 : 
      56                 :     BOOST_URL_CXX20_CONSTEXPR
      57             616 :     char const* message(
      58                 :         int code,
      59                 :         char*,
      60                 :         std::size_t) const noexcept override
      61                 :     {
      62             616 :         switch(static_cast<error>(code))
      63                 :         {
      64               1 :         default:
      65               1 :         case error::need_more: return "need more";
      66              63 :         case error::mismatch: return "mismatch";
      67              13 :         case error::invalid: return "invalid";
      68               1 :         case error::end_of_range: return "end of range";
      69             537 :         case error::leftover: return "leftover";
      70               1 :         case error::out_of_range: return "out of range";
      71                 :         }
      72                 :     }
      73                 : 
      74                 :     BOOST_URL_CXX20_CONSTEXPR
      75                 :     system::error_condition
      76                 :         default_error_condition(
      77                 :             int ev) const noexcept override;
      78                 : 
      79              78 :     BOOST_SYSTEM_CONSTEXPR error_cat_type() noexcept
      80              78 :         : error_category(0x0536e50a30f9e9f2)
      81                 :     {
      82              78 :     }
      83                 : };
      84                 : 
      85                 : struct BOOST_SYMBOL_VISIBLE
      86                 :     condition_cat_type
      87                 :     : system::error_category
      88                 : {
      89                 :     BOOST_URL_CXX20_CONSTEXPR
      90               5 :     const char* name(
      91                 :         ) const noexcept override
      92                 :     {
      93               5 :         return "boost.url.grammar";
      94                 :     }
      95                 : 
      96               5 :     std::string message(
      97                 :         int code) const override
      98                 :     {
      99              10 :         return message(code, nullptr, 0);
     100                 :     }
     101                 : 
     102                 :     BOOST_URL_CXX20_CONSTEXPR
     103               5 :     char const* message(
     104                 :         int code,
     105                 :         char*,
     106                 :         std::size_t) const noexcept override
     107                 :     {
     108                 :         switch(static_cast<condition>(code))
     109                 :         {
     110                 :         default:
     111                 :         case condition::fatal:
     112               5 :             return "fatal condition";
     113                 :         }
     114                 :     }
     115                 : 
     116              78 :     BOOST_SYSTEM_CONSTEXPR condition_cat_type()
     117              78 :         : error_category(0x0536e50a30f9e9f2)
     118                 :     {
     119              78 :     }
     120                 : };
     121                 : 
     122                 : #if defined(BOOST_URL_HAS_CXX20_CONSTEXPR)
     123                 : // Visible so a shared library built as C++20
     124                 : // still exports the symbols that consumers built
     125                 : // as C++17 reference through the externs below
     126                 : BOOST_SYMBOL_VISIBLE
     127                 : inline constexpr error_cat_type error_cat{};
     128                 : BOOST_SYMBOL_VISIBLE
     129                 : inline constexpr condition_cat_type condition_cat{};
     130                 : #else
     131                 : BOOST_URL_DECL extern error_cat_type error_cat;
     132                 : BOOST_URL_DECL extern condition_cat_type condition_cat;
     133                 : #endif
     134                 : 
     135                 : } // detail
     136                 : 
     137                 : inline
     138                 : BOOST_SYSTEM_CONSTEXPR
     139                 : system::error_code
     140           53401 : make_error_code(
     141                 :     error ev) noexcept
     142                 : {
     143                 :     return system::error_code{
     144                 :         static_cast<std::underlying_type<
     145                 :             error>::type>(ev),
     146           53401 :                 detail::error_cat};
     147                 : }
     148                 : 
     149                 : inline
     150                 : BOOST_SYSTEM_CONSTEXPR
     151                 : system::error_condition
     152              20 : make_error_condition(
     153                 :     condition c) noexcept
     154                 : {
     155              20 :     return system::error_condition{
     156                 :         static_cast<std::underlying_type<
     157                 :             condition>::type>(c),
     158              20 :                 detail::condition_cat};
     159                 : }
     160                 : 
     161                 : BOOST_URL_CXX20_CONSTEXPR_OR_INLINE
     162                 : system::error_condition
     163               6 : detail::error_cat_type::
     164                 :     default_error_condition(
     165                 :         int ev) const noexcept
     166                 : {
     167               6 :     switch(static_cast<error>(ev))
     168                 :     {
     169               2 :     case error::invalid:
     170                 :     case error::out_of_range:
     171               2 :         return condition::fatal;
     172               4 :     default:
     173               4 :         return {ev, *this};
     174                 :     }
     175                 : }
     176                 : 
     177                 : } // grammar
     178                 : } // urls
     179                 : } // boost
     180                 : 
     181                 : #endif
        

Generated by: LCOV version 2.3