TLA Line data 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 HIT 2 : error_cat_type::
21 : name() const noexcept
22 : {
23 2 : return "boost.capy";
24 : }
25 :
26 : std::string
27 888 : error_cat_type::
28 : message(int code) const
29 : {
30 888 : switch(static_cast<error>(code))
31 : {
32 6 : case error::eof: return "eof";
33 3 : case error::canceled: return "operation canceled";
34 2646 : case error::test_failure: return "test failure";
35 3 : case error::stream_truncated: return "stream truncated";
36 3 : case error::timeout: return "timeout";
37 1 : default:
38 2 : 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 413 : error_cat_type::
49 : default_error_condition(int code) const noexcept
50 : {
51 413 : switch(static_cast<error>(code))
52 : {
53 251 : case error::eof: return make_error_condition(cond::eof);
54 50 : case error::canceled: return std::make_error_condition(std::errc::operation_canceled);
55 1 : case error::stream_truncated: return make_error_condition(cond::stream_truncated);
56 2 : case error::timeout: return std::make_error_condition(std::errc::timed_out);
57 109 : 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
|