39 class SdoErrcCategory :
public ::std::error_category {
42 name() const noexcept
override {
46 ::std::error_condition default_error_condition(
int ev)
const
50 message(
int ev)
const override {
55 ::std::error_condition
56 SdoErrcCategory::default_error_condition(
int ev)
const noexcept {
57 switch (
static_cast<SdoErrc>(ev)) {
59 return ::std::errc::protocol_error;
61 return ::std::errc::timed_out;
65 return ::std::errc::protocol_error;
67 return ::std::errc::illegal_byte_sequence;
69 return ::std::errc::not_enough_memory;
73 return ::std::errc::permission_denied;
75 return ::std::errc::no_such_file_or_directory;
79 return ::std::errc::invalid_argument;
81 return ::std::errc::no_such_device_or_address;
83 return ::std::errc::io_error;
87 return ::std::errc::invalid_argument;
89 return ::std::errc::no_such_file_or_directory;
91 return ::std::errc::invalid_argument;
95 return ::std::errc::result_out_of_range;
97 return ::std::errc::protocol_not_supported;
100 return ::std::errc::io_error;
103 return ::std::errc::device_or_resource_busy;
105 #if !defined(__MINGW32__) || defined(ENODATA)
107 return ::std::errc::no_message_available;
110 return ::std::error_condition(ev, *
this);
115 SdoWhat(uint8_t
id, uint16_t idx, uint8_t subidx, ::std::error_code ec,
116 const ::std::string& what_arg =
"") {
117 ::std::stringstream ss;
118 ss << ::std::uppercase << ::std::setfill(
'0') << ::std::hex;
119 if (!what_arg.empty()) ss << what_arg <<
':';
120 ss << ::std::setw(2) << int(
id) <<
':';
121 ss << ::std::setw(4) << idx <<
':' << ::std::setw(2) << int(subidx) <<
": ";
123 ss <<
" (" << ::std::setw(8) << uint32_t(ec.value()) <<
')';
129 SdoError::SdoError(uint8_t
id, uint16_t idx, uint8_t subidx,
130 ::std::error_code ec)
131 : ::std::system_error(ec, SdoWhat(id, idx, subidx, ec)),
136 SdoError::SdoError(uint8_t
id, uint16_t idx, uint8_t subidx,
137 ::std::error_code ec, const ::std::string& what_arg)
138 : ::std::system_error(ec, SdoWhat(id, idx, subidx, ec, what_arg)),
143 SdoError::SdoError(uint8_t
id, uint16_t idx, uint8_t subidx,
144 ::std::error_code ec,
const char* what_arg)
145 : ::std::system_error(ec, SdoWhat(id, idx, subidx, ec, what_arg)),
150 SdoError::SdoError(uint8_t
id, uint16_t idx, uint8_t subidx,
int ev)
151 : SdoError(id, idx, subidx, ::std::error_code(ev,
SdoCategory())) {}
153 SdoError::SdoError(uint8_t
id, uint16_t idx, uint8_t subidx,
int ev,
154 const ::std::string& what_arg)
155 : SdoError(id, idx, subidx, ::std::error_code(ev,
SdoCategory()),
158 SdoError::SdoError(uint8_t
id, uint16_t idx, uint8_t subidx,
int ev,
159 const char* what_arg)
160 : SdoError(id, idx, subidx, ::std::error_code(ev,
SdoCategory()),
163 const ::std::error_category&
165 static const SdoErrcCategory category;
174 ::std::error_condition
183 return static_cast<SdoErrc>(ec.value());
184 }
else if (ec.category() == ::std::generic_category()) {
185 switch (
static_cast<::std::errc
>(ec.value())) {
186 case ::std::errc::timed_out:
188 case ::std::errc::not_enough_memory:
193 }
else if (ec.category() == ::std::system_category()) {
205 return static_cast<SdoErrc>(0);
210 ::std::error_code ec) noexcept {
213 return ::std::make_exception_ptr(
SdoError(
id, idx, subidx, ec));
215 return ::std::make_exception_ptr(::std::system_error(ec));
217 return ::std::current_exception();
223 ::std::error_code ec,
224 const ::std::string& what_arg) noexcept {
227 return ::std::make_exception_ptr(
SdoError(
id, idx, subidx, ec, what_arg));
229 return ::std::make_exception_ptr(::std::system_error(ec, what_arg));
231 return ::std::current_exception();
237 ::std::error_code ec,
const char* what_arg) noexcept {
240 return ::std::make_exception_ptr(
SdoError(
id, idx, subidx, ec, what_arg));
242 return ::std::make_exception_ptr(::std::system_error(ec, what_arg));
244 return ::std::current_exception();