Import CStringView from the Babeltrace tree
[lttng-tools.git] / src / common / exception.hpp
index 20731c06aa4419f18daac0c2ff5a0622990cb559..1880978e76997c3ee9df65f556516fd5f16b9581 100644 (file)
@@ -8,41 +8,94 @@
 #ifndef LTTNG_EXCEPTION_H_
 #define LTTNG_EXCEPTION_H_
 
-#include <string>
+#include <lttng/lttng-error.h>
+
 #include <stdexcept>
+#include <string>
 #include <system_error>
 
-#include <lttng/lttng-error.h>
-
-#define LTTNG_THROW_CTL(error_code) \
+#define LTTNG_THROW_CTL(msg, error_code) \
        throw lttng::ctl::error(msg, error_code, __FILE__, __func__, __LINE__)
 #define LTTNG_THROW_POSIX(msg, errno_code) \
        throw lttng::posix_error(msg, errno_code, __FILE__, __func__, __LINE__)
+#define LTTNG_THROW_ERROR(msg) throw lttng::runtime_error(msg, __FILE__, __func__, __LINE__)
+#define LTTNG_THROW_UNSUPPORTED_ERROR(msg) \
+       throw lttng::unsupported_error(msg, __FILE__, __func__, __LINE__)
+#define LTTNG_THROW_COMMUNICATION_ERROR(msg) \
+       throw lttng::communication_error(msg, __FILE__, __func__, __LINE__)
+#define LTTNG_THROW_PROTOCOL_ERROR(msg) \
+       throw lttng::protocol_error(msg, __FILE__, __func__, __LINE__)
+#define LTTNG_THROW_INVALID_ARGUMENT_ERROR(msg) \
+       throw lttng::invalid_argument_error(msg, __FILE__, __func__, __LINE__)
 
 namespace lttng {
+class runtime_error : public std::runtime_error {
+public:
+       explicit runtime_error(const std::string& msg,
+                              const char *file_name,
+                              const char *function_name,
+                              unsigned int line_number);
+};
+
+class unsupported_error : public std::runtime_error {
+public:
+       explicit unsupported_error(const std::string& msg,
+                                  const char *file_name,
+                                  const char *function_name,
+                                  unsigned int line_number);
+};
 
 namespace ctl {
 /* Wrap lttng_error_code errors which may be reported through liblttng-ctl's interface. */
-class error : public std::runtime_error {
+class error : public runtime_error {
 public:
-       explicit error(lttng_error_code error_code,
-               const char *file_name,
-               const char *function_name,
-               unsigned int line_number);
-       lttng_error_code get_code() const;
+       explicit error(const std::string& msg,
+                      lttng_error_code error_code,
+                      const char *file_name,
+                      const char *function_name,
+                      unsigned int line_number);
+
+       lttng_error_code code() const noexcept
+       {
+               return _error_code;
+       }
 
 private:
-       lttng_error_code _error_code;
+       const lttng_error_code _error_code;
 };
 } /* namespace ctl */
 
 class posix_error : public std::system_error {
 public:
-       explicit posix_error(const std::string &msg,
-               int errno_code,
-               const char *file_name,
-               const char *function_name,
-               unsigned int line_number);
+       explicit posix_error(const std::string& msg,
+                            int errno_code,
+                            const char *file_name,
+                            const char *function_name,
+                            unsigned int line_number);
+};
+
+class communication_error : public runtime_error {
+public:
+       explicit communication_error(const std::string& msg,
+                                    const char *file_name,
+                                    const char *function_name,
+                                    unsigned int line_number);
+};
+
+class protocol_error : public communication_error {
+public:
+       explicit protocol_error(const std::string& msg,
+                               const char *file_name,
+                               const char *function_name,
+                               unsigned int line_number);
+};
+
+class invalid_argument_error : public runtime_error {
+public:
+       explicit invalid_argument_error(const std::string& msg,
+                                       const char *file_name,
+                                       const char *function_name,
+                                       unsigned int line_number);
 };
 
 }; /* namespace lttng */
This page took 0.024763 seconds and 4 git commands to generate.