Line data Source code
1 : //
2 : // Copyright (c) 2025 Vinnie Falco (vinnie.falco@gmail.com)
3 : //
4 : // Distributed under the Boost Software License, Version 1.0. (See accompanying
5 : // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 : //
7 : // Official repository: https://github.com/cppalliance/capy
8 : //
9 :
10 : #include <boost/capy/cond.hpp>
11 : #include <boost/capy/error.hpp>
12 : #include <system_error>
13 :
14 : namespace boost {
15 : namespace capy {
16 :
17 : namespace detail {
18 :
19 : const char*
20 1 : cond_cat_type::
21 : name() const noexcept
22 : {
23 1 : return "boost.capy";
24 : }
25 :
26 : std::string
27 3 : cond_cat_type::
28 : message(int code) const
29 : {
30 3 : switch(static_cast<cond>(code))
31 : {
32 3 : case cond::eof: return "end of file";
33 3 : case cond::canceled: return "operation canceled";
34 0 : case cond::stream_truncated: return "stream truncated";
35 3 : case cond::not_found: return "not found";
36 0 : default:
37 0 : return "unknown";
38 : }
39 : }
40 :
41 : bool
42 1006 : cond_cat_type::
43 : equivalent(
44 : std::error_code const& ec,
45 : int condition) const noexcept
46 : {
47 1006 : switch(static_cast<cond>(condition))
48 : {
49 987 : case cond::eof:
50 987 : return ec == capy::error::eof;
51 :
52 5 : case cond::canceled:
53 5 : if(ec == capy::error::canceled)
54 0 : return true;
55 5 : if(ec == std::errc::operation_canceled)
56 2 : return true;
57 3 : return false;
58 :
59 0 : case cond::stream_truncated:
60 0 : return ec == capy::error::stream_truncated;
61 :
62 14 : case cond::not_found:
63 14 : return ec == capy::error::not_found;
64 :
65 0 : default:
66 0 : return false;
67 : }
68 : }
69 :
70 : //-----------------------------------------------
71 :
72 : // msvc 14.0 has a bug that warns about inability
73 : // to use constexpr construction here, even though
74 : // there's no constexpr construction
75 : #if defined(_MSC_VER) && _MSC_VER <= 1900
76 : # pragma warning( push )
77 : # pragma warning( disable : 4592 )
78 : #endif
79 :
80 : #if defined(__cpp_constinit) && __cpp_constinit >= 201907L
81 : constinit cond_cat_type cond_cat;
82 : #else
83 : cond_cat_type cond_cat;
84 : #endif
85 :
86 : #if defined(_MSC_VER) && _MSC_VER <= 1900
87 : # pragma warning( pop )
88 : #endif
89 :
90 : } // detail
91 :
92 : } // capy
93 : } // boost
|