TLA Line data Source code
1 : //
2 : // Copyright (c) 2019 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/boostorg/url
8 : //
9 :
10 : #ifndef BOOST_URL_GRAMMAR_IMPL_ERROR_HPP
11 : #define BOOST_URL_GRAMMAR_IMPL_ERROR_HPP
12 :
13 : #include <type_traits>
14 :
15 : namespace boost {
16 : namespace system {
17 : template<>
18 : struct is_error_code_enum<
19 : ::boost::urls::grammar::error>
20 : {
21 : static bool const value = true;
22 : };
23 : template<>
24 : struct is_error_condition_enum<
25 : ::boost::urls::grammar::condition>
26 : {
27 : static bool const value = true;
28 : };
29 : } // system
30 : } // boost
31 :
32 : namespace boost {
33 : namespace urls {
34 : namespace grammar {
35 :
36 : namespace detail {
37 :
38 : struct BOOST_SYMBOL_VISIBLE
39 : error_cat_type
40 : : system::error_category
41 : {
42 : BOOST_URL_CXX20_CONSTEXPR
43 HIT 82 : const char* name(
44 : ) const noexcept override
45 : {
46 82 : return "boost.url.grammar";
47 : }
48 :
49 82 : std::string message(
50 : int code) const override
51 : {
52 164 : return message(code, nullptr, 0);
53 : }
54 :
55 : BOOST_URL_CXX20_CONSTEXPR
56 82 : char const* message(
57 : int code,
58 : char*,
59 : std::size_t) const noexcept override
60 : {
61 82 : switch(static_cast<error>(code))
62 : {
63 1 : default:
64 1 : case error::need_more: return "need more";
65 14 : case error::mismatch: return "mismatch";
66 13 : case error::invalid: return "invalid";
67 1 : case error::end_of_range: return "end of range";
68 52 : case error::leftover: return "leftover";
69 1 : case error::out_of_range: return "out of range";
70 : }
71 : }
72 :
73 : BOOST_URL_CXX20_CONSTEXPR
74 : system::error_condition
75 : default_error_condition(
76 : int ev) const noexcept override;
77 :
78 75 : BOOST_SYSTEM_CONSTEXPR error_cat_type() noexcept
79 75 : : error_category(0x0536e50a30f9e9f2)
80 : {
81 75 : }
82 : };
83 :
84 : struct BOOST_SYMBOL_VISIBLE
85 : condition_cat_type
86 : : system::error_category
87 : {
88 : BOOST_URL_CXX20_CONSTEXPR
89 5 : const char* name(
90 : ) const noexcept override
91 : {
92 5 : return "boost.url.grammar";
93 : }
94 :
95 5 : std::string message(
96 : int code) const override
97 : {
98 10 : return message(code, nullptr, 0);
99 : }
100 :
101 : BOOST_URL_CXX20_CONSTEXPR
102 5 : char const* message(
103 : int code,
104 : char*,
105 : std::size_t) const noexcept override
106 : {
107 : switch(static_cast<condition>(code))
108 : {
109 : default:
110 : case condition::fatal:
111 5 : return "fatal condition";
112 : }
113 : }
114 :
115 75 : BOOST_SYSTEM_CONSTEXPR condition_cat_type()
116 75 : : error_category(0x0536e50a30f9e9f2)
117 : {
118 75 : }
119 : };
120 :
121 : #if defined(BOOST_URL_HAS_CXX20_CONSTEXPR)
122 : inline constexpr error_cat_type error_cat{};
123 : inline constexpr condition_cat_type condition_cat{};
124 : #else
125 : BOOST_URL_DECL extern error_cat_type error_cat;
126 : BOOST_URL_DECL extern condition_cat_type condition_cat;
127 : #endif
128 :
129 : } // detail
130 :
131 : inline
132 : BOOST_SYSTEM_CONSTEXPR
133 : system::error_code
134 11005 : make_error_code(
135 : error ev) noexcept
136 : {
137 : return system::error_code{
138 : static_cast<std::underlying_type<
139 : error>::type>(ev),
140 11005 : detail::error_cat};
141 : }
142 :
143 : inline
144 : BOOST_SYSTEM_CONSTEXPR
145 : system::error_condition
146 20 : make_error_condition(
147 : condition c) noexcept
148 : {
149 20 : return system::error_condition{
150 : static_cast<std::underlying_type<
151 : condition>::type>(c),
152 20 : detail::condition_cat};
153 : }
154 :
155 : BOOST_URL_CXX20_CONSTEXPR_OR_INLINE
156 : system::error_condition
157 6 : detail::error_cat_type::
158 : default_error_condition(
159 : int ev) const noexcept
160 : {
161 6 : switch(static_cast<error>(ev))
162 : {
163 2 : case error::invalid:
164 : case error::out_of_range:
165 2 : return condition::fatal;
166 4 : default:
167 4 : return {ev, *this};
168 : }
169 : }
170 :
171 : } // grammar
172 : } // urls
173 : } // boost
174 :
175 : #endif
|