rclcpp  master
C++ ROS Client Library API
exceptions.hpp
Go to the documentation of this file.
1 // Copyright 2016 Open Source Robotics Foundation, Inc.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #ifndef RCLCPP__EXCEPTIONS_HPP_
16 #define RCLCPP__EXCEPTIONS_HPP_
17 
18 #include <stdexcept>
19 #include <string>
20 
21 #include "rcl/error_handling.h"
22 #include "rcl/types.h"
24 
25 namespace rclcpp
26 {
27 namespace exceptions
28 {
29 
32 {
33 public:
35  : std::runtime_error("node is invalid") {}
36 };
37 
40 {
41 public:
43  const char * name_type_,
44  const char * name_,
45  const char * error_msg_,
46  size_t invalid_index_)
47  : std::invalid_argument(format_error(name_type_, name_, error_msg_, invalid_index_)),
48  name_type(name_type_), name(name_), error_msg(error_msg_), invalid_index(invalid_index_)
49  {}
50 
51  static std::string
53  const char * name_type,
54  const char * name,
55  const char * error_msg,
56  size_t invalid_index);
57 
61  const size_t invalid_index;
62 };
63 
66 {
67 public:
68  InvalidNodeNameError(const char * node_name, const char * error_msg, size_t invalid_index)
69  : NameValidationError("node name", node_name, error_msg, invalid_index)
70  {}
71 };
72 
75 {
76 public:
77  InvalidNamespaceError(const char * namespace_, const char * error_msg, size_t invalid_index)
78  : NameValidationError("namespace", namespace_, error_msg, invalid_index)
79  {}
80 };
81 
84 {
85 public:
86  InvalidTopicNameError(const char * namespace_, const char * error_msg, size_t invalid_index)
87  : NameValidationError("topic name", namespace_, error_msg, invalid_index)
88  {}
89 };
90 
93 {
94 public:
95  InvalidServiceNameError(const char * namespace_, const char * error_msg, size_t invalid_index)
96  : NameValidationError("service name", namespace_, error_msg, invalid_index)
97  {}
98 };
99 
101 
114 void
116  rcl_ret_t ret,
117  const std::string & prefix = "",
118  const rcl_error_state_t * error_state = nullptr,
119  void (*reset_error)() = rcl_reset_error);
120 
122 {
123 public:
125  RCLErrorBase(rcl_ret_t ret, const rcl_error_state_t * error_state);
126  virtual ~RCLErrorBase() {}
127 
131  size_t line;
133 };
134 
137 {
138 public:
140  RCLError(rcl_ret_t ret, const rcl_error_state_t * error_state, const std::string & prefix);
142  RCLError(const RCLErrorBase & base_exc, const std::string & prefix);
143 };
144 
147 {
148 public:
150  RCLBadAlloc(rcl_ret_t ret, const rcl_error_state_t * error_state);
152  explicit RCLBadAlloc(const RCLErrorBase & base_exc);
153 };
154 
157 {
158 public:
161  rcl_ret_t ret,
162  const rcl_error_state_t * error_state,
163  const std::string & prefix);
165  RCLInvalidArgument(const RCLErrorBase & base_exc, const std::string & prefix);
166 };
167 
170 {
171 public:
173  : std::runtime_error("event is invalid") {}
174 };
175 
178 {
179 public:
181  : std::runtime_error("event already registered") {}
182 };
183 
184 } // namespace exceptions
185 } // namespace rclcpp
186 
187 #endif // RCLCPP__EXCEPTIONS_HPP_
Thrown when a node name is invalid.
Definition: exceptions.hpp:65
Thrown when a topic name is invalid.
Definition: exceptions.hpp:83
RCLErrorBase(rcl_ret_t ret, const rcl_error_state_t *error_state)
InvalidTopicNameError(const char *namespace_, const char *error_msg, size_t invalid_index)
Definition: exceptions.hpp:86
size_t line
Definition: exceptions.hpp:131
rmw_ret_t rcl_ret_t
const std::string name
Definition: exceptions.hpp:59
InvalidServiceNameError(const char *namespace_, const char *error_msg, size_t invalid_index)
Definition: exceptions.hpp:95
Definition: allocator_common.hpp:24
Thrown when an unregistered rclcpp::Event is encountered where a registered one was expected...
Definition: exceptions.hpp:177
InvalidNodeError()
Definition: exceptions.hpp:34
Definition: exceptions.hpp:121
std::string file
Definition: exceptions.hpp:130
Thrown when a node namespace is invalid.
Definition: exceptions.hpp:74
InvalidNodeNameError(const char *node_name, const char *error_msg, size_t invalid_index)
Definition: exceptions.hpp:68
void throw_from_rcl_error(rcl_ret_t ret, const std::string &prefix="", const rcl_error_state_t *error_state=nullptr, void(*reset_error)()=rcl_reset_error)
Throw a C++ std::exception which was created based on an rcl error.
const std::string error_msg
Definition: exceptions.hpp:60
Thrown when a service name is invalid.
Definition: exceptions.hpp:92
const std::string name_type
Definition: exceptions.hpp:58
NameValidationError(const char *name_type_, const char *name_, const char *error_msg_, size_t invalid_index_)
Definition: exceptions.hpp:42
const size_t invalid_index
Definition: exceptions.hpp:61
virtual ~RCLErrorBase()
Definition: exceptions.hpp:126
RCLBadAlloc(rcl_ret_t ret, const rcl_error_state_t *error_state)
RCLError(rcl_ret_t ret, const rcl_error_state_t *error_state, const std::string &prefix)
#define RCLCPP_PUBLIC
Definition: visibility_control.hpp:50
Created when the ret is RCL_RET_INVALID_ARGUMENT.
Definition: exceptions.hpp:156
Created when the ret is RCL_RET_BAD_ALLOC.
Definition: exceptions.hpp:146
std::string message
Definition: exceptions.hpp:129
std::string formatted_message
Definition: exceptions.hpp:132
Thrown when a any kind of name (node, namespace, topic, etc.) is invalid.
Definition: exceptions.hpp:39
Thrown when a method is trying to use a node, but it is invalid.
Definition: exceptions.hpp:31
RCLInvalidArgument(rcl_ret_t ret, const rcl_error_state_t *error_state, const std::string &prefix)
EventNotRegisteredError()
Definition: exceptions.hpp:180
InvalidEventError()
Definition: exceptions.hpp:172
Created when the return code does not match one of the other specialized exceptions.
Definition: exceptions.hpp:136
static std::string format_error(const char *name_type, const char *name, const char *error_msg, size_t invalid_index)
InvalidNamespaceError(const char *namespace_, const char *error_msg, size_t invalid_index)
Definition: exceptions.hpp:77
rcl_ret_t ret
Definition: exceptions.hpp:128
Thrown when an invalid rclcpp::Event object or SharedPtr is encountered.
Definition: exceptions.hpp:169