xtd 0.2.0
Loading...
Searching...
No Matches
system_exception.h
Go to the documentation of this file.
1
4#pragma once
7#include "optional.h"
8#include "core_export.h"
9#include "finally.h"
10#include "literals.h"
11#include "object.h"
12#include "ustring.h"
13#include <cstdint>
14#include <stdexcept>
15#include <system_error>
16
18namespace xtd {
25 class core_export_ system_exception : public object, public std::exception {
26 public:
28
31 using exception_ref = std::optional<std::reference_wrapper<const std::exception>>;
33
35
40 explicit system_exception(const xtd::diagnostics::stack_frame& information = xtd::diagnostics::stack_frame::empty()) : system_exception(default_message(), nullptr, std::error_code(), "", information) {}
44 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) {}
49 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) {}
54 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) {}
60 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) {}
65 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) {}
70 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) {}
76 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) {}
82 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) {}
89 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) {}
91
93 system_exception(const system_exception&) = default;
94 system_exception& operator =(const system_exception&) = default;
96
98
102 virtual const xtd::ustring& file_path() const noexcept;
103
106 virtual const xtd::ustring& help_link() const noexcept;
107
110 virtual std::error_code error_code() const noexcept;
111
114 virtual exception_ref inner_exception() const noexcept;
115
118 virtual uint32 line_number() const noexcept;
119
122 virtual const xtd::ustring& member_name() const noexcept;
123
126 virtual const xtd::ustring& message() const noexcept;
127
130 virtual const xtd::ustring& name() const noexcept;
131
134 virtual xtd::ustring stack_trace() const noexcept;
136
138
142 xtd::ustring to_string() const noexcept override;
143
146 const char* what() const noexcept override;
148
150
154 static bool enable_stack_trace() noexcept;
157 static void enable_stack_trace(bool enable) noexcept;
159
160 private:
161 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);
162 xtd::ustring stack_trace_to_string() const noexcept;
163 const char* default_message() const noexcept;
164
165 static bool enable_stack_trace_;
166 mutable xtd::ustring name_;
167 xtd::ustring message_;
168 exception_ref inner_exception_;
169 std::error_code error_;
170 xtd::ustring help_link_;
171 xtd::diagnostics::stack_frame information_;
172 std::shared_ptr<xtd::diagnostics::stack_trace> stack_trace_;
173 };
174}
175
188#define system_exception_(...) system_exception(add_csf_(__VA_ARGS__))
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.
Supports all classes in the xtd class hierarchy and provides low-level services to derived classes....
Definition object.h:32
Defines the base class for predefined exceptions in the xtd namespace.
Definition system_exception.h:25
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:89
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:40
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:60
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:54
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:82
std::optional< std::reference_wrapper< const std::exception > > exception_ref
Optional reference wrapper on std::exception.
Definition system_exception.h:31
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:44
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:76
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:65
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:70
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:49
virtual const xtd::ustring & file_path() const noexcept
Gets file path where exception occurred.
Represents text as a sequence of UTF-8 code units.
Definition ustring.h:47
Contains core_export_ keyword.
Contains finally_ keyword.
#define core_export_
Define shared library export.
Definition core_export.h:13
uint_least32_t uint32
Represents a 32-bit unsigned integer.
Definition types.h:241
Contains xtd literals.
The xtd namespace contains all fundamental classes to access Hardware, Os, System,...
Definition xtd_about_box.h:10
Contains xtd::object class.
Contains std::optional type and std::bad_optional_access exception.
Contains xtd::diagnostics::stack_frame class.
Contains xtd::diagnostics::stack_trace class.
Contains xtd::ustring class.