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 1037 : error_cat_type::
28 : message(int code) const
29 : {
30 1037 : switch(static_cast<error>(code))
31 : {
32 6 : case error::eof: return "eof";
33 3 : case error::canceled: return "operation canceled";
34 3090 : case error::test_failure: return "test failure";
35 3 : case error::stream_truncated: return "stream truncated";
36 3 : case error::not_found: return "not found";
37 3 : case error::timeout: return "timeout";
38 1 : default:
39 2 : return "unknown";
40 : }
41 : }
42 :
43 : // Map each capy error code to its canonical portable condition.
44 : // canceled and timeout have standard equivalents, so they map to the
45 : // generic conditions rather than capy's own cond enumerators; this is
46 : // what lets, e.g., error::canceled compare equal to
47 : // std::errc::operation_canceled.
48 : std::error_condition
49 546 : error_cat_type::
50 : default_error_condition(int code) const noexcept
51 : {
52 546 : switch(static_cast<error>(code))
53 : {
54 301 : case error::eof: return make_error_condition(cond::eof);
55 4 : case error::canceled: return std::make_error_condition(std::errc::operation_canceled);
56 1 : case error::stream_truncated: return make_error_condition(cond::stream_truncated);
57 12 : case error::not_found: return make_error_condition(cond::not_found);
58 7 : case error::timeout: return std::make_error_condition(std::errc::timed_out);
59 221 : default: return std::error_condition(code, *this);
60 : }
61 : }
62 :
63 : //-----------------------------------------------
64 :
65 : // msvc 14.0 has a bug that warns about inability
66 : // to use constexpr construction here, even though
67 : // there's no constexpr construction
68 : #if BOOST_CAPY_WORKAROUND(_MSC_VER, <= 1900)
69 : BOOST_CAPY_MSVC_WARNING_PUSH
70 : BOOST_CAPY_MSVC_WARNING_DISABLE(4592)
71 : #endif
72 :
73 : #if defined(__cpp_constinit) && __cpp_constinit >= 201907L
74 : constinit error_cat_type error_cat;
75 : #else
76 : error_cat_type error_cat;
77 : #endif
78 :
79 : #if BOOST_CAPY_WORKAROUND(_MSC_VER, <= 1900)
80 : BOOST_CAPY_MSVC_WARNING_POP
81 : #endif
82 :
83 : } // detail
84 :
85 : } // capy
86 : } // boost
|