src/error.cpp

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