xtd 0.2.0
system_exception.h
Go to the documentation of this file.
1 #pragma once
7 #include "optional.h"
8 #include "core_export.h"
9 #include "literals.h"
10 #include "object.h"
11 #include "ustring.h"
12 #include <cstdint>
13 #include <stdexcept>
14 #include <system_error>
15 
17 namespace xtd {
24  class core_export_ system_exception : public object, public std::exception {
25  public:
27 
30  using exception_ref = std::optional<std::reference_wrapper<const std::exception>>;
32 
34 
39  explicit system_exception(const xtd::diagnostics::stack_frame& information = xtd::diagnostics::stack_frame::empty()) : system_exception(default_message(), nullptr, std::error_code(), "", information) {}
43  explicit system_exception(const xtd::ustring& message, const xtd::diagnostics::stack_frame& information = xtd::diagnostics::stack_frame::empty()) : system_exception(message, nullptr, std::error_code(), "", information) {}
48  system_exception(const xtd::ustring& message, const std::error_code& error, const xtd::diagnostics::stack_frame& information = xtd::diagnostics::stack_frame::empty()) : system_exception(message, nullptr, error, "", information) {}
53  system_exception(const xtd::ustring& message, const xtd::ustring& help_link, const xtd::diagnostics::stack_frame& information = xtd::diagnostics::stack_frame::empty()) : system_exception(message, nullptr, std::error_code(), help_link, information) {}
59  system_exception(const xtd::ustring& message, const std::error_code& error, const xtd::ustring& help_link, const xtd::diagnostics::stack_frame& information = xtd::diagnostics::stack_frame::empty()) : system_exception(message, nullptr, error, help_link, information) {}
64  explicit system_exception(const std::exception& inner_exception, const xtd::diagnostics::stack_frame& information = xtd::diagnostics::stack_frame::empty()) : system_exception(default_message(), &inner_exception, std::error_code(), "", information) {}
69  system_exception(const xtd::ustring& message, const std::exception& inner_exception, const xtd::diagnostics::stack_frame& information = xtd::diagnostics::stack_frame::empty()) : system_exception(message, &inner_exception, std::error_code(), "", information) {}
75  system_exception(const xtd::ustring& message, const std::exception& inner_exception, const std::error_code& error, const xtd::diagnostics::stack_frame& information = xtd::diagnostics::stack_frame::empty()) : system_exception(message, &inner_exception, error, "", information) {}
81  system_exception(const xtd::ustring& message, const std::exception& inner_exception, const xtd::ustring& help_link, const xtd::diagnostics::stack_frame& information = xtd::diagnostics::stack_frame::empty()) : system_exception(message, &inner_exception, std::error_code(), help_link, information) {}
88  system_exception(const xtd::ustring& message, const std::exception& inner_exception, const std::error_code& error, const xtd::ustring& help_link, const xtd::diagnostics::stack_frame& information = xtd::diagnostics::stack_frame::empty()) : system_exception(message, &inner_exception, error, help_link, information) {}
90 
92  system_exception(const system_exception&) = default;
93  system_exception& operator =(const system_exception&) = default;
95 
97 
101  virtual const xtd::ustring& file_path() const noexcept;
102 
105  virtual const xtd::ustring& help_link() const noexcept;
106 
108  static bool enable_stack_trace() noexcept;
109  static void enable_stack_trace(bool enable) noexcept;
110 
113  virtual std::error_code error_code() const noexcept;
114 
117  virtual exception_ref inner_exception() const noexcept;
118 
121  virtual uint32 line_number() const noexcept;
122 
125  virtual const xtd::ustring& member_name() const noexcept;
126 
129  virtual const xtd::ustring& message() const noexcept;
130 
133  virtual const xtd::ustring& name() const noexcept;
134 
137  virtual xtd::ustring stack_trace() const noexcept;
139 
141 
145  xtd::ustring to_string() const noexcept override;
146 
149  const char* what() const noexcept override;
151 
152  private:
153  system_exception(const xtd::ustring& message, const std::exception* inner_exception, const std::error_code& error, const xtd::ustring& help_link, const xtd::diagnostics::stack_frame& information);
154  xtd::ustring stack_trace_to_string() const noexcept;
155  const char* default_message() const noexcept;
156 
157  static bool enable_stack_trace_;
158  mutable xtd::ustring name_;
159  xtd::ustring message_;
160  exception_ref inner_exception_;
161  std::error_code error_;
162  xtd::ustring help_link_;
163  xtd::diagnostics::stack_frame information_;
164  std::shared_ptr<xtd::diagnostics::stack_trace> stack_trace_;
165  };
166 }
167 
180 #define system_exception_(...) system_exception(add_csf_(__VA_ARGS__))
Contains xtd::diagnostics::stack_trace class.
Defines the base class for predefined exceptions in the xtd namespace.
Definition: system_exception.h:24
Contains std::optional type and std::bad_optional_access exception.
system_exception(const std::exception &inner_exception, const xtd::diagnostics::stack_frame &information=xtd::diagnostics::stack_frame::empty())
Create a new instance of class system_exception.
Definition: system_exception.h:64
The xtd namespace contains all fundamental classes to access Hardware, Os, System, and more.
Definition: system_report.h:17
Contains xtd literals.
system_exception(const xtd::ustring &message, const std::error_code &error, const xtd::diagnostics::stack_frame &information=xtd::diagnostics::stack_frame::empty())
Create a new instance of class system_exception.
Definition: system_exception.h:48
system_exception(const xtd::ustring &message, const xtd::ustring &help_link, const xtd::diagnostics::stack_frame &information=xtd::diagnostics::stack_frame::empty())
Create a new instance of class system_exception.
Definition: system_exception.h:53
Represents text as a sequence of UTF-8 code units.
Definition: ustring.h:46
system_exception(const xtd::ustring &message, const std::error_code &error, const xtd::ustring &help_link, const xtd::diagnostics::stack_frame &information=xtd::diagnostics::stack_frame::empty())
Create a new instance of class system_exception.
Definition: system_exception.h:59
std::string to_string(const date_time &value, const std::string &fmt, const std::locale &loc)
Convert a specified value into a string with specified format and locale.
Definition: date_time.h:1063
system_exception(const xtd::ustring &message, const xtd::diagnostics::stack_frame &information=xtd::diagnostics::stack_frame::empty())
Create a new instance of class system_exception.
Definition: system_exception.h:43
std::optional< std::reference_wrapper< const std::exception > > exception_ref
Optional reference wrapper on std::exception.
Definition: system_exception.h:30
system_exception(const xtd::ustring &message, const std::exception &inner_exception, const std::error_code &error, const xtd::ustring &help_link, const xtd::diagnostics::stack_frame &information=xtd::diagnostics::stack_frame::empty())
Create a new instance of class system_exception.
Definition: system_exception.h:88
Provides information about a xtd::diagnostics::stack_frame, which represents a function call on the c...
Definition: stack_frame.h:37
static stack_frame empty() noexcept
Return an empty stack frame.
Contains xtd::ustring class.
system_exception(const xtd::diagnostics::stack_frame &information=xtd::diagnostics::stack_frame::empty())
Create a new instance of class system_exception.
Definition: system_exception.h:39
Contains xtd::object class.
Supports all classes in the xtd class hierarchy and provides low-level services to derived classes...
Definition: object.h:32
system_exception(const xtd::ustring &message, const std::exception &inner_exception, const xtd::diagnostics::stack_frame &information=xtd::diagnostics::stack_frame::empty())
Create a new instance of class system_exception.
Definition: system_exception.h:69
Contains xtd::diagnostics::stack_frame class.
system_exception(const xtd::ustring &message, const std::exception &inner_exception, const std::error_code &error, const xtd::diagnostics::stack_frame &information=xtd::diagnostics::stack_frame::empty())
Create a new instance of class system_exception.
Definition: system_exception.h:75
uint_least32_t uint32
Represents a 32-bit unsigned integer.
Definition: types.h:239
system_exception(const xtd::ustring &message, const std::exception &inner_exception, const xtd::ustring &help_link, const xtd::diagnostics::stack_frame &information=xtd::diagnostics::stack_frame::empty())
Create a new instance of class system_exception.
Definition: system_exception.h:81