100.00% Lines (20/20) 100.00% Functions (3/3)
TLA Baseline Branch
Line Hits Code Line Hits Code
1   // 1   //
2   // Copyright (c) 2025 Vinnie Falco (vinnie.falco@gmail.com) 2   // Copyright (c) 2025 Vinnie Falco (vinnie.falco@gmail.com)
3   // Copyright (c) 2026 Michael Vandeberg 3   // Copyright (c) 2026 Michael Vandeberg
4   // 4   //
5   // Distributed under the Boost Software License, Version 1.0. (See accompanying 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) 6   // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7   // 7   //
8   // Official repository: https://github.com/cppalliance/capy 8   // Official repository: https://github.com/cppalliance/capy
9   // 9   //
10   10  
11   #include <boost/capy/error.hpp> 11   #include <boost/capy/error.hpp>
12   #include <boost/capy/cond.hpp> 12   #include <boost/capy/cond.hpp>
13   13  
14   namespace boost { 14   namespace boost {
15   namespace capy { 15   namespace capy {
16   16  
17   namespace detail { 17   namespace detail {
18   18  
19   const char* 19   const char*
HITCBC 20   2 error_cat_type:: 20   2 error_cat_type::
21   name() const noexcept 21   name() const noexcept
22   { 22   {
HITCBC 23   2 return "boost.capy"; 23   2 return "boost.capy";
24   } 24   }
25   25  
26   std::string 26   std::string
HITCBC 27   1037 error_cat_type:: 27   1037 error_cat_type::
28   message(int code) const 28   message(int code) const
29   { 29   {
HITCBC 30   1037 switch(static_cast<error>(code)) 30   1037 switch(static_cast<error>(code))
31   { 31   {
HITCBC 32   6 case error::eof: return "eof"; 32   6 case error::eof: return "eof";
HITCBC 33   3 case error::canceled: return "operation canceled"; 33   3 case error::canceled: return "operation canceled";
HITCBC 34   3090 case error::test_failure: return "test failure"; 34   3090 case error::test_failure: return "test failure";
HITCBC 35   3 case error::stream_truncated: return "stream truncated"; 35   3 case error::stream_truncated: return "stream truncated";
HITCBC 36   3 case error::not_found: return "not found"; 36   3 case error::not_found: return "not found";
HITCBC 37   3 case error::timeout: return "timeout"; 37   3 case error::timeout: return "timeout";
HITCBC 38   1 default: 38   1 default:
HITCBC 39   2 return "unknown"; 39   2 return "unknown";
40   } 40   }
41   } 41   }
42   42  
43   // Map each capy error code to its canonical portable condition. 43   // Map each capy error code to its canonical portable condition.
44   // canceled and timeout have standard equivalents, so they map to the 44   // canceled and timeout have standard equivalents, so they map to the
45   // generic conditions rather than capy's own cond enumerators; this is 45   // generic conditions rather than capy's own cond enumerators; this is
46   // what lets, e.g., error::canceled compare equal to 46   // what lets, e.g., error::canceled compare equal to
47   // std::errc::operation_canceled. 47   // std::errc::operation_canceled.
48   std::error_condition 48   std::error_condition
HITCBC 49   547 error_cat_type:: 49   547 error_cat_type::
50   default_error_condition(int code) const noexcept 50   default_error_condition(int code) const noexcept
51   { 51   {
HITCBC 52   547 switch(static_cast<error>(code)) 52   547 switch(static_cast<error>(code))
53   { 53   {
HITCBC 54   302 case error::eof: return make_error_condition(cond::eof); 54   302 case error::eof: return make_error_condition(cond::eof);
HITCBC 55   4 case error::canceled: return std::make_error_condition(std::errc::operation_canceled); 55   4 case error::canceled: return std::make_error_condition(std::errc::operation_canceled);
HITCBC 56   1 case error::stream_truncated: return make_error_condition(cond::stream_truncated); 56   1 case error::stream_truncated: return make_error_condition(cond::stream_truncated);
HITCBC 57   12 case error::not_found: return make_error_condition(cond::not_found); 57   12 case error::not_found: return make_error_condition(cond::not_found);
HITCBC 58   7 case error::timeout: return std::make_error_condition(std::errc::timed_out); 58   7 case error::timeout: return std::make_error_condition(std::errc::timed_out);
HITCBC 59   221 default: return std::error_condition(code, *this); 59   221 default: return std::error_condition(code, *this);
60   } 60   }
61   } 61   }
62   62  
63   //----------------------------------------------- 63   //-----------------------------------------------
64   64  
65   // msvc 14.0 has a bug that warns about inability 65   // msvc 14.0 has a bug that warns about inability
66   // to use constexpr construction here, even though 66   // to use constexpr construction here, even though
67   // there's no constexpr construction 67   // there's no constexpr construction
68   #if BOOST_CAPY_WORKAROUND(_MSC_VER, <= 1900) 68   #if BOOST_CAPY_WORKAROUND(_MSC_VER, <= 1900)
69   BOOST_CAPY_MSVC_WARNING_PUSH 69   BOOST_CAPY_MSVC_WARNING_PUSH
70   BOOST_CAPY_MSVC_WARNING_DISABLE(4592) 70   BOOST_CAPY_MSVC_WARNING_DISABLE(4592)
71   #endif 71   #endif
72   72  
73   #if defined(__cpp_constinit) && __cpp_constinit >= 201907L 73   #if defined(__cpp_constinit) && __cpp_constinit >= 201907L
74   constinit error_cat_type error_cat; 74   constinit error_cat_type error_cat;
75   #else 75   #else
76   error_cat_type error_cat; 76   error_cat_type error_cat;
77   #endif 77   #endif
78   78  
79   #if BOOST_CAPY_WORKAROUND(_MSC_VER, <= 1900) 79   #if BOOST_CAPY_WORKAROUND(_MSC_VER, <= 1900)
80   BOOST_CAPY_MSVC_WARNING_POP 80   BOOST_CAPY_MSVC_WARNING_POP
81   #endif 81   #endif
82   82  
83   } // detail 83   } // detail
84   84  
85   } // capy 85   } // capy
86   } // boost 86   } // boost